From 1b9616c134447c08b7d7831de7e9133a4438f7f4 Mon Sep 17 00:00:00 2001 From: Andrey Marchenko Date: Thu, 4 Jun 2026 17:08:55 +0200 Subject: [PATCH 1/2] Treat disabled managed tests as skipped --- .../integrations/civisibility_features.go | 4 +- civisibility/utils/net/client.go | 2 +- civisibility/utils/net/raw_response_test.go | 4 +- civisibility/utils/net/skippable.go | 24 +- .../high_skippable_integration_test.go | 5 +- internal/planner/planner.go | 47 ++- internal/planner/planner_test.go | 275 ++++++++++++++++-- .../spree_26236954724.json | 2 +- internal/testoptimization/client.go | 25 +- internal/testoptimization/client_test.go | 100 ++++--- internal/testoptimization/test_management.go | 28 ++ internal/testoptimization/types.go | 5 + 12 files changed, 403 insertions(+), 118 deletions(-) create mode 100644 internal/testoptimization/test_management.go diff --git a/civisibility/integrations/civisibility_features.go b/civisibility/integrations/civisibility_features.go index 94bb211..841cb98 100644 --- a/civisibility/integrations/civisibility_features.go +++ b/civisibility/integrations/civisibility_features.go @@ -68,7 +68,7 @@ var ( ciVisibilityFlakyRetriesSettings FlakyRetriesSetting // ciVisibilitySkippables contains the CI Visibility skippable tests for this session - ciVisibilitySkippables map[string]map[string][]net.SkippableResponseDataAttributes + ciVisibilitySkippables net.SkippableTests // ciVisibilityTestManagementTests contains the CI Visibility test management tests for this session ciVisibilityTestManagementTests net.TestManagementTestsResponseDataModules @@ -373,7 +373,7 @@ func GetFlakyRetriesSettings() *FlakyRetriesSetting { } // GetSkippableTests gets the skippable tests from the backend -func GetSkippableTests() map[string]map[string][]net.SkippableResponseDataAttributes { +func GetSkippableTests() net.SkippableTests { // call to ensure the additional features initialization is completed ensureAdditionalFeaturesInitialization(autoDetectServiceName) return ciVisibilitySkippables diff --git a/civisibility/utils/net/client.go b/civisibility/utils/net/client.go index d453fd9..9edaf3b 100644 --- a/civisibility/utils/net/client.go +++ b/civisibility/utils/net/client.go @@ -42,7 +42,7 @@ type ( GetKnownTestsRawResponse() json.RawMessage GetCommits(localCommits []string) ([]string, error) SendPackFiles(commitSha string, packFiles []string) (bytes int64, err error) - GetSkippableTests() (correlationID string, skippables map[string]map[string][]SkippableResponseDataAttributes, err error) + GetSkippableTests() (correlationID string, skippables SkippableTests, err error) GetSkippableTestsRawResponse() json.RawMessage GetTestManagementTests() (*TestManagementTestsResponseDataModules, error) GetTestManagementTestsRawResponse() json.RawMessage diff --git a/civisibility/utils/net/raw_response_test.go b/civisibility/utils/net/raw_response_test.go index 285c00c..7606277 100644 --- a/civisibility/utils/net/raw_response_test.go +++ b/civisibility/utils/net/raw_response_test.go @@ -50,7 +50,7 @@ func newRawResponseTestServer(t *testing.T, responses map[string]string) *httpte func TestClientStoresRawBackendResponses(t *testing.T) { settingsResponse := `{"data":{"id":"settings-id","type":"ci_app_test_service_libraries_settings","attributes":{"itr_enabled":true,"tests_skipping":true,"known_tests_enabled":true,"test_management":{"enabled":true,"attempt_to_fix_retries":3}}}}` knownTestsResponse := `{"data":{"id":"known-tests-id","type":"ci_app_libraries_tests_request","attributes":{"tests":{"module-a":{"suite-a":["test-a"]}}}}}` - skippableTestsResponse := `{"meta":{"correlation_id":"correlation-id"},"data":[{"id":"skippable-id","type":"test","attributes":{"suite":"suite-a","name":"test-a","parameters":"params","configurations":{"os.platform":"linux","os.architecture":"amd64","runtime.name":"ruby","runtime.version":"3.3.0"}}}]}` + skippableTestsResponse := `{"meta":{"correlation_id":"correlation-id"},"data":[{"id":"skippable-id","type":"test","attributes":{"module":"module-a","suite":"suite-a","name":"test-a","parameters":"params","configurations":{"os.platform":"linux","os.architecture":"amd64","runtime.name":"ruby","runtime.version":"3.3.0"}}}]}` testManagementResponse := `{"data":{"id":"test-management-id","type":"ci_app_libraries_tests_request","attributes":{"modules":{"module-a":{"suites":{"suite-a":{"tests":{"test-a":{"properties":{"quarantined":true,"disabled":false,"attempt_to_fix":true}}}}}}}}}}` server := newRawResponseTestServer(t, map[string]string{ @@ -89,7 +89,7 @@ func TestClientStoresRawBackendResponses(t *testing.T) { if err != nil { t.Fatalf("GetSkippableTests() returned error: %v", err) } - if correlationID != "correlation-id" || skippableTests["suite-a"]["test-a"][0].Parameters != "params" { + if correlationID != "correlation-id" || !skippableTests["module-a.suite-a.test-a.params"] { t.Fatalf("GetSkippableTests() returned unexpected processed data: correlationID=%s skippableTests=%+v", correlationID, skippableTests) } if string(client.GetSkippableTestsRawResponse()) != skippableTestsResponse { diff --git a/civisibility/utils/net/skippable.go b/civisibility/utils/net/skippable.go index d90585f..8e27bee 100644 --- a/civisibility/utils/net/skippable.go +++ b/civisibility/utils/net/skippable.go @@ -49,14 +49,17 @@ type ( } SkippableResponseDataAttributes struct { + Module string `json:"module"` Suite string `json:"suite"` Name string `json:"name"` Parameters string `json:"parameters"` Configurations testConfigurations `json:"configurations"` } + + SkippableTests map[string]bool ) -func (c *client) GetSkippableTests() (correlationID string, skippables map[string]map[string][]SkippableResponseDataAttributes, err error) { +func (c *client) GetSkippableTests() (correlationID string, skippables SkippableTests, err error) { if c.repositoryURL == "" || c.commitSha == "" { err = fmt.Errorf("civisibility.GetSkippableTests: repository URL and commit SHA are required") return @@ -91,7 +94,7 @@ func (c *client) GetSkippableTests() (correlationID string, skippables map[strin return "", nil, fmt.Errorf("unmarshalling skippable tests response: %s", err) } - skippableTestsMap := map[string]map[string][]SkippableResponseDataAttributes{} + skippableTestsMap := SkippableTests{} for _, data := range responseObject.Data { // Filter out the tests that do not match the test configurations @@ -120,19 +123,12 @@ func (c *client) GetSkippableTests() (correlationID string, skippables map[strin continue } - var ok bool - var testsMap map[string][]SkippableResponseDataAttributes - if testsMap, ok = skippableTestsMap[data.Attributes.Suite]; !ok { - testsMap = map[string][]SkippableResponseDataAttributes{} - skippableTestsMap[data.Attributes.Suite] = testsMap - } - - if test, ok := testsMap[data.Attributes.Name]; ok { - testsMap[data.Attributes.Name] = append(test, data.Attributes) - } else { - testsMap[data.Attributes.Name] = []SkippableResponseDataAttributes{data.Attributes} - } + skippableTestsMap[skippableTestKey(data.Attributes)] = true } return responseObject.Meta.CorrelationID, skippableTestsMap, nil } + +func skippableTestKey(test SkippableResponseDataAttributes) string { + return test.Module + "." + test.Suite + "." + test.Name + "." + test.Parameters +} diff --git a/internal/planner/high_skippable_integration_test.go b/internal/planner/high_skippable_integration_test.go index 11dd218..a4249c0 100644 --- a/internal/planner/high_skippable_integration_test.go +++ b/internal/planner/high_skippable_integration_test.go @@ -77,7 +77,10 @@ func TestTestPlanner_Plan_HighSkippableIntegrationSelectsExpectedRunnerCountAndR } runner := NewWithDependencies( &MockPlatformDetector{Platform: mockPlatform}, - &MockTestOptimizationClient{SkippableTests: fixture.skippableTestSet()}, + &MockTestOptimizationClient{ + Settings: testOptimizationSettings(true, true, false), + SkippableTests: fixture.skippableTestSet(), + }, &MockTestSuiteDurationsClient{Durations: fixture.TestSuiteDurations}, newDefaultMockCIProviderDetector(), ) diff --git a/internal/planner/planner.go b/internal/planner/planner.go index 88c1c18..5ce3d3a 100644 --- a/internal/planner/planner.go +++ b/internal/planner/planner.go @@ -272,7 +272,7 @@ func (tp *TestPlanner) PreparePlanningData(ctx context.Context) error { discoveryCtx, cancelDiscovery := context.WithCancel(ctx) defer cancelDiscovery() - var skippableTests map[string]bool + var skippedTests map[string]bool var discoveredTests []testoptimization.Test var discoveredTestFiles []string var fullDiscoverySucceeded bool @@ -296,24 +296,21 @@ func (tp *TestPlanner) PreparePlanningData(ctx context.Context) error { repositorySettings := tp.optimizationClient.GetSettings() tp.planReport.DatadogSettings = newDatadogSettingsReport(repositorySettings) + tiaSkippingEnabled := false if repositorySettings != nil { - slog.Debug("Repository settings", "itr_enabled", repositorySettings.ItrEnabled, "tests_skipping", repositorySettings.TestsSkipping) + slog.Debug("Repository settings", "tia_enabled", repositorySettings.ItrEnabled, "tests_skipping", repositorySettings.TestsSkipping) + tiaSkippingEnabled = repositorySettings.ItrEnabled && repositorySettings.TestsSkipping - if !repositorySettings.ItrEnabled || !repositorySettings.TestsSkipping { - slog.Info("ITR or test skipping disabled, cancelling full test discovery") + if !tiaSkippingEnabled { + slog.Info("TIA or test skipping disabled, cancelling full test discovery") cancelDiscovery() } } tp.testSuiteDurations = tp.durationsClient.GetTestSuiteDurations() - startTime := time.Now() - slog.Info("Fetching skippable tests from Datadog...") - skippableTests = tp.optimizationClient.GetSkippableTests() - tp.planReport.SkippableTestsCount = len(skippableTests) - tp.planReport.KnownTests = newKnownTestsReport(tp.optimizationClient.GetKnownTests()) - tp.planReport.ManagedFlakyTests = newManagedFlakyTestsReport(tp.optimizationClient.GetTestManagementTestsData()) - slog.Info("Fetched skippable tests", "duration", time.Since(startTime)) + skippedTests = tp.fetchTestsToSkip(tiaSkippingEnabled) + tp.planReport.SkippableTestsCount = len(skippedTests) return nil }) @@ -380,7 +377,7 @@ func (tp *TestPlanner) PreparePlanningData(ctx context.Context) error { // into a collection of testSuiteAggregate structs. // This collection is used to calculate the skippable percentage and the weighted test files. if fullDiscoverySucceeded { - tp.recordFullDiscoveryResults(discoveredTests, skippableTests, subdirPrefix) + tp.recordFullDiscoveryResults(discoveredTests, skippedTests, subdirPrefix) tp.estimateDiscoveredSuiteDurations() slog.Info("Full test discovery succeeded; using full discovery results and ignoring fast-discovered-only files", @@ -406,10 +403,34 @@ func (tp *TestPlanner) PreparePlanningData(ctx context.Context) error { return nil } +func (tp *TestPlanner) fetchTestsToSkip(tiaSkippingEnabled bool) map[string]bool { + startTime := time.Now() + slog.Info("Fetching tests to skip from Datadog...") + + tiaSkippableTests := map[string]bool{} + if tiaSkippingEnabled { + tiaSkippableTests = tp.optimizationClient.GetSkippableTests() + } + + tp.planReport.KnownTests = newKnownTestsReport(tp.optimizationClient.GetKnownTests()) + testManagementTests := tp.optimizationClient.GetTestManagementTestsData() + tp.planReport.ManagedFlakyTests = newManagedFlakyTestsReport(testManagementTests) + + disabledTests := testoptimization.DisabledTestsFromTestManagementData(testManagementTests) + skippedTests := maps.Clone(tiaSkippableTests) + maps.Copy(skippedTests, disabledTests) + slog.Info("Fetched tests to skip", + "duration", time.Since(startTime), + "tiaSkippableTestsCount", len(tiaSkippableTests), + "disabledTestsCount", len(disabledTests)) + + return skippedTests +} + func (tp *TestPlanner) estimateDiscoveredSuiteDurations() { for key, aggregate := range tp.suiteAggregates { // Without backend timing data, use test counts as the estimate: - // TotalDuration is the full suite before ITR skips, while EstimatedDuration + // TotalDuration is the full suite before TIA skips, while EstimatedDuration // is the runnable remainder after skipped tests are removed. aggregate.TotalDuration = float64(aggregate.NumTests) * float64(time.Second) aggregate.EstimatedDuration = float64(aggregate.NumTests-aggregate.NumTestsSkipped) * float64(time.Second) diff --git a/internal/planner/planner_test.go b/internal/planner/planner_test.go index 87ff392..7a46b9c 100644 --- a/internal/planner/planner_test.go +++ b/internal/planner/planner_test.go @@ -241,6 +241,15 @@ func gitTestEnv() []string { ) } +func testOptimizationSettings(tiaEnabled, testsSkipping, testManagementEnabled bool) *net.SettingsResponseData { + settings := &net.SettingsResponseData{ + ItrEnabled: tiaEnabled, + TestsSkipping: testsSkipping, + } + settings.TestManagement.Enabled = testManagementEnabled + return settings +} + func TestNew(t *testing.T) { runner := New() @@ -342,11 +351,11 @@ func TestTestPlanner_Setup_WithParallelRunners(t *testing.T) { mockFramework := &MockFramework{ FrameworkName: "rspec", Tests: []testoptimization.Test{ - {Suite: "TestSuite1", Name: "test1", Parameters: "", SuiteSourceFile: "test/file1_test.rb"}, - {Suite: "TestSuite1", Name: "test2", Parameters: "", SuiteSourceFile: "test/file1_test.rb"}, - {Suite: "TestSuite2", Name: "test3", Parameters: "", SuiteSourceFile: "test/file2_test.rb"}, - {Suite: "TestSuite3", Name: "test4", Parameters: "", SuiteSourceFile: "test/file3_test.rb"}, - {Suite: "TestSuite4", Name: "test5", Parameters: "", SuiteSourceFile: "test/file4_test.rb"}, + {Module: "rspec", Suite: "TestSuite1", Name: "test1", Parameters: "", SuiteSourceFile: "test/file1_test.rb"}, + {Module: "rspec", Suite: "TestSuite1", Name: "test2", Parameters: "", SuiteSourceFile: "test/file1_test.rb"}, + {Module: "rspec", Suite: "TestSuite2", Name: "test3", Parameters: "", SuiteSourceFile: "test/file2_test.rb"}, + {Module: "rspec", Suite: "TestSuite3", Name: "test4", Parameters: "", SuiteSourceFile: "test/file3_test.rb"}, + {Module: "rspec", Suite: "TestSuite4", Name: "test5", Parameters: "", SuiteSourceFile: "test/file4_test.rb"}, }, } @@ -358,9 +367,10 @@ func TestTestPlanner_Setup_WithParallelRunners(t *testing.T) { mockPlatformDetector := &MockPlatformDetector{Platform: mockPlatform} mockOptimizationClient := &MockTestOptimizationClient{ + Settings: testOptimizationSettings(true, true, false), SkippableTests: map[string]bool{ - "TestSuite1.test2.": true, // Skip test2 - "TestSuite4.test5.": true, // Skip test5 + (&testoptimization.Test{Module: "rspec", Suite: "TestSuite1", Name: "test2"}).FQN(): true, // Skip test2 + (&testoptimization.Test{Module: "rspec", Suite: "TestSuite4", Name: "test5"}).FQN(): true, // Skip test5 }, } @@ -410,8 +420,8 @@ func TestTestPlanner_Plan_WritesManifestAndRunnerLayout(t *testing.T) { mockFramework := &MockFramework{ FrameworkName: "rspec", Tests: []testoptimization.Test{ - {Suite: "TestSuite1", Name: "test1", Parameters: "", SuiteSourceFile: "test/file1_test.rb"}, - {Suite: "TestSuite2", Name: "test2", Parameters: "", SuiteSourceFile: "test/file2_test.rb"}, + {Module: "rspec", Suite: "TestSuite1", Name: "test1", Parameters: "", SuiteSourceFile: "test/file1_test.rb"}, + {Module: "rspec", Suite: "TestSuite2", Name: "test2", Parameters: "", SuiteSourceFile: "test/file2_test.rb"}, }, } mockPlatform := &MockPlatform{ @@ -509,14 +519,16 @@ func TestTestPlanner_Plan_ChoosesParallelismFromFanoutAdjustedSplit(t *testing.T sourceFile := fmt.Sprintf("test/file%d_test.rb", suiteIndex) for testIndex := range 10 { name := fmt.Sprintf("test%d", testIndex) - tests = append(tests, testoptimization.Test{ + test := testoptimization.Test{ + Module: "rspec", Suite: suite, Name: name, Parameters: "", SuiteSourceFile: sourceFile, - }) + } + tests = append(tests, test) if testIndex > 0 { - skippableTests[fmt.Sprintf("%s.%s.", suite, name)] = true + skippableTests[test.FQN()] = true } } } @@ -533,7 +545,10 @@ func TestTestPlanner_Plan_ChoosesParallelismFromFanoutAdjustedSplit(t *testing.T runner := NewWithDependencies( &MockPlatformDetector{Platform: mockPlatform}, - &MockTestOptimizationClient{SkippableTests: skippableTests}, + &MockTestOptimizationClient{ + Settings: testOptimizationSettings(true, true, false), + SkippableTests: skippableTests, + }, &MockTestSuiteDurationsClient{}, newDefaultMockCIProviderDetector(), ) @@ -583,8 +598,9 @@ func TestTestPlanner_Setup_WithCIProvider(t *testing.T) { mockPlatformDetector := &MockPlatformDetector{Platform: mockPlatform} mockOptimizationClient := &MockTestOptimizationClient{ + Settings: testOptimizationSettings(true, true, false), SkippableTests: map[string]bool{ - "TestSuite1.test1": true, // Skip test1 = 50% skippable + (&testoptimization.Test{Module: "rspec", Suite: "TestSuite1", Name: "test1"}).FQN(): true, // Skip test1 = 50% skippable }, } @@ -1039,9 +1055,10 @@ func TestTestPlanner_PreparePlanningData_Success(t *testing.T) { } mockOptimizationClient := &MockTestOptimizationClient{ + Settings: testOptimizationSettings(true, true, false), SkippableTests: map[string]bool{ - "TestSuite1.test2.": true, // Skip test2 - "TestSuite3.test4.": true, // Skip test4 + (&testoptimization.Test{Module: "rspec", Suite: "TestSuite1", Name: "test2"}).FQN(): true, // Skip test2 + (&testoptimization.Test{Module: "rspec", Suite: "TestSuite3", Name: "test4"}).FQN(): true, // Skip test4 }, } mockDurationsClient := &MockTestSuiteDurationsClient{ @@ -1139,6 +1156,219 @@ func TestTestPlanner_PreparePlanningData_Success(t *testing.T) { } } +func TestTestPlanner_PreparePlanningData_DisabledTestManagementTestsAreSkipped(t *testing.T) { + ctx := context.Background() + ciUtils.ResetCITags() + t.Cleanup(ciUtils.ResetCITags) + + mockFramework := &MockFramework{ + FrameworkName: "rspec", + Tests: []testoptimization.Test{ + {Module: "rspec", Suite: "Suite1", Name: "test1", Parameters: "", SuiteSourceFile: "spec/file1_spec.rb"}, + {Module: "rspec", Suite: "Suite1", Name: "test2", Parameters: "", SuiteSourceFile: "spec/file1_spec.rb"}, + {Module: "rspec", Suite: "Suite2", Name: "test3", Parameters: "", SuiteSourceFile: "spec/file2_spec.rb"}, + {Module: "rspec", Suite: "Suite3", Name: "test4", Parameters: "", SuiteSourceFile: "spec/file3_spec.rb"}, + }, + } + mockPlatform := &MockPlatform{ + PlatformName: "ruby", + Tags: map[string]string{"platform": "ruby"}, + Framework: mockFramework, + } + mockOptimizationClient := &MockTestOptimizationClient{ + Settings: testOptimizationSettings(true, true, true), + SkippableTests: map[string]bool{ + (&testoptimization.Test{Module: "rspec", Suite: "Suite1", Name: "test2"}).FQN(): true, + }, + TestManagementTests: &net.TestManagementTestsResponseDataModules{ + Modules: map[string]net.TestManagementTestsResponseDataSuites{ + "rspec": { + Suites: map[string]net.TestManagementTestsResponseDataTests{ + "Suite2": { + Tests: map[string]net.TestManagementTestsResponseDataTestProperties{ + "test3": {Properties: net.TestManagementTestsResponseDataTestPropertiesAttributes{Disabled: true}}, + }, + }, + "Suite3": { + Tests: map[string]net.TestManagementTestsResponseDataTestProperties{ + "test4": {Properties: net.TestManagementTestsResponseDataTestPropertiesAttributes{Quarantined: true}}, + }, + }, + }, + }, + }, + }, + } + + runner := NewWithDependencies( + &MockPlatformDetector{Platform: mockPlatform}, + mockOptimizationClient, + &MockTestSuiteDurationsClient{}, + newDefaultMockCIProviderDetector(), + ) + + if err := runner.PreparePlanningData(ctx); err != nil { + t.Fatalf("PreparePlanningData() should not return error, got: %v", err) + } + + suite1 := runner.suiteAggregates[testSuiteKey{Module: "rspec", Suite: "Suite1"}] + if suite1.NumTests != 2 || suite1.NumTestsSkipped != 1 { + t.Errorf("Expected Suite1 to skip only the TIA-skippable test, got %+v", suite1) + } + + suite2 := runner.suiteAggregates[testSuiteKey{Module: "rspec", Suite: "Suite2"}] + if suite2.NumTests != 1 || suite2.NumTestsSkipped != 1 { + t.Errorf("Expected Suite2 disabled test to be skipped, got %+v", suite2) + } + + suite3 := runner.suiteAggregates[testSuiteKey{Module: "rspec", Suite: "Suite3"}] + if suite3.NumTests != 1 || suite3.NumTestsSkipped != 0 { + t.Errorf("Expected Suite3 quarantined test to remain runnable, got %+v", suite3) + } + + if runner.planReport.SkippableTestsCount != 2 { + t.Errorf("Expected planner skip set to include TIA-skippable and disabled tests, got %d", runner.planReport.SkippableTestsCount) + } +} + +func TestTestPlanner_PreparePlanningData_ModuleQualifiedSkipsDoNotCrossModules(t *testing.T) { + ctx := context.Background() + ciUtils.ResetCITags() + t.Cleanup(ciUtils.ResetCITags) + + mockFramework := &MockFramework{ + FrameworkName: "rspec", + Tests: []testoptimization.Test{ + {Module: "module-a", Suite: "SharedSuite", Name: "same name", Parameters: "", SuiteSourceFile: "spec/module_a_spec.rb"}, + {Module: "module-b", Suite: "SharedSuite", Name: "same name", Parameters: "", SuiteSourceFile: "spec/module_b_spec.rb"}, + {Module: "module-c", Suite: "ManagedSuite", Name: "same name", Parameters: "", SuiteSourceFile: "spec/module_c_spec.rb"}, + {Module: "module-d", Suite: "ManagedSuite", Name: "same name", Parameters: "", SuiteSourceFile: "spec/module_d_spec.rb"}, + }, + } + mockPlatform := &MockPlatform{ + PlatformName: "ruby", + Tags: map[string]string{"platform": "ruby"}, + Framework: mockFramework, + } + mockOptimizationClient := &MockTestOptimizationClient{ + Settings: testOptimizationSettings(true, true, true), + SkippableTests: map[string]bool{ + (&testoptimization.Test{Module: "module-a", Suite: "SharedSuite", Name: "same name"}).FQN(): true, + }, + TestManagementTests: &net.TestManagementTestsResponseDataModules{ + Modules: map[string]net.TestManagementTestsResponseDataSuites{ + "module-c": { + Suites: map[string]net.TestManagementTestsResponseDataTests{ + "ManagedSuite": { + Tests: map[string]net.TestManagementTestsResponseDataTestProperties{ + "same name": {Properties: net.TestManagementTestsResponseDataTestPropertiesAttributes{Disabled: true}}, + }, + }, + }, + }, + }, + }, + } + + runner := NewWithDependencies( + &MockPlatformDetector{Platform: mockPlatform}, + mockOptimizationClient, + &MockTestSuiteDurationsClient{}, + newDefaultMockCIProviderDetector(), + ) + + if err := runner.PreparePlanningData(ctx); err != nil { + t.Fatalf("PreparePlanningData() should not return error, got: %v", err) + } + + expectSkipped := func(module, suite string, skipped int) { + t.Helper() + aggregate := runner.suiteAggregates[testSuiteKey{Module: module, Suite: suite}] + if aggregate.NumTests != 1 || aggregate.NumTestsSkipped != skipped { + t.Errorf("Expected %s/%s to skip %d tests, got %+v", module, suite, skipped, aggregate) + } + } + + expectSkipped("module-a", "SharedSuite", 1) + expectSkipped("module-b", "SharedSuite", 0) + expectSkipped("module-c", "ManagedSuite", 1) + expectSkipped("module-d", "ManagedSuite", 0) +} + +func TestTestPlanner_PreparePlanningData_TestManagementDoesNotKeepFullDiscoveryWhenTIASkippingDisabled(t *testing.T) { + ctx := context.Background() + ciUtils.ResetCITags() + t.Cleanup(ciUtils.ResetCITags) + + mockFramework := &MockFramework{ + FrameworkName: "rspec", + TestFiles: []string{"spec/file1_spec.rb", "spec/file2_spec.rb", "spec/file3_spec.rb"}, + DiscoverTestsErr: errors.New("full discovery cancelled because TIA skipping is disabled"), + Tests: []testoptimization.Test{ + {Module: "rspec", Suite: "Suite1", Name: "runnable", Parameters: "", SuiteSourceFile: "spec/file1_spec.rb"}, + {Module: "rspec", Suite: "Suite1", Name: "disabled", Parameters: "", SuiteSourceFile: "spec/file1_spec.rb"}, + {Module: "rspec", Suite: "Suite2", Name: "not_applied", Parameters: "", SuiteSourceFile: "spec/file2_spec.rb"}, + {Module: "rspec", Suite: "Suite3", Name: "disabled", Parameters: "", SuiteSourceFile: "spec/file3_spec.rb"}, + }, + } + mockPlatform := &MockPlatform{ + PlatformName: "ruby", + Tags: map[string]string{"platform": "ruby"}, + Framework: mockFramework, + } + mockOptimizationClient := &MockTestOptimizationClient{ + Settings: testOptimizationSettings(false, false, true), + SkippableTests: map[string]bool{ + (&testoptimization.Test{Module: "rspec", Suite: "Suite2", Name: "not_applied"}).FQN(): true, + }, + TestManagementTests: &net.TestManagementTestsResponseDataModules{ + Modules: map[string]net.TestManagementTestsResponseDataSuites{ + "rspec": { + Suites: map[string]net.TestManagementTestsResponseDataTests{ + "Suite1": { + Tests: map[string]net.TestManagementTestsResponseDataTestProperties{ + "disabled": {Properties: net.TestManagementTestsResponseDataTestPropertiesAttributes{Disabled: true}}, + }, + }, + "Suite3": { + Tests: map[string]net.TestManagementTestsResponseDataTestProperties{ + "disabled": {Properties: net.TestManagementTestsResponseDataTestPropertiesAttributes{Disabled: true}}, + }, + }, + }, + }, + }, + }, + } + + runner := NewWithDependencies( + &MockPlatformDetector{Platform: mockPlatform}, + mockOptimizationClient, + &MockTestSuiteDurationsClient{}, + newDefaultMockCIProviderDetector(), + ) + + if err := runner.PreparePlanningData(ctx); err != nil { + t.Fatalf("PreparePlanningData() should not return error, got: %v", err) + } + + if len(runner.suiteAggregates) != 0 { + t.Errorf("Expected fast discovery fallback without full-discovery suite aggregates, got %+v", runner.suiteAggregates) + } + + if _, ok := runner.testFileWeights["spec/file3_spec.rb"]; !ok { + t.Errorf("Expected disabled test management file to remain runnable in fast discovery fallback, got %v", runner.testFileWeights) + } + + if len(runner.testFileWeights) != len(mockFramework.TestFiles) { + t.Errorf("Expected fast discovery fallback to keep all discovered files, got %v", runner.testFileWeights) + } + + if runner.planReport.SkippableTestsCount != 2 { + t.Errorf("Expected planner skip set to include fetched disabled tests for reporting, got %d", runner.planReport.SkippableTestsCount) + } +} + func TestTestPlanner_PreparePlanningData_EmptyDurationsContinues(t *testing.T) { ctx := context.Background() ciUtils.ResetCITags() @@ -1265,6 +1495,7 @@ func TestTestPlanner_PreparePlanningData_SkippablePercentageUsesDurations(t *tes } skippedTest := mockFramework.Tests[0] mockOptimizationClient := &MockTestOptimizationClient{ + Settings: testOptimizationSettings(true, true, false), SkippableTests: map[string]bool{skippedTest.FQN(): true}, } mockDurationsClient := &MockTestSuiteDurationsClient{ @@ -1959,6 +2190,7 @@ func TestTestPlanner_PreparePlanningData_BackendDoesNotReintroduceFullySkippedSu Framework: mockFramework, } mockOptimizationClient := &MockTestOptimizationClient{ + Settings: testOptimizationSettings(true, true, false), SkippableTests: map[string]bool{skippedTest.FQN(): true}, } mockDurationsClient := &MockTestSuiteDurationsClient{ @@ -2013,6 +2245,7 @@ func TestTestPlanner_PreparePlanningData_BackendDoesNotDuplicateDiscoveredSource Framework: mockFramework, } mockOptimizationClient := &MockTestOptimizationClient{ + Settings: testOptimizationSettings(true, true, false), SkippableTests: map[string]bool{skippedTest.FQN(): true}, } mockDurationsClient := &MockTestSuiteDurationsClient{ @@ -2281,8 +2514,8 @@ func TestTestPlanner_PreparePlanningData_AllTestsSkipped(t *testing.T) { mockFramework := &MockFramework{ Tests: []testoptimization.Test{ - {Suite: "Suite1", Name: "test1", Parameters: "", SuiteSourceFile: "file1.rb"}, - {Suite: "Suite2", Name: "test2", Parameters: "", SuiteSourceFile: "file2.rb"}, + {Module: "rspec", Suite: "Suite1", Name: "test1", Parameters: "", SuiteSourceFile: "file1.rb"}, + {Module: "rspec", Suite: "Suite2", Name: "test2", Parameters: "", SuiteSourceFile: "file2.rb"}, }, } @@ -2293,9 +2526,10 @@ func TestTestPlanner_PreparePlanningData_AllTestsSkipped(t *testing.T) { mockPlatformDetector := &MockPlatformDetector{Platform: mockPlatform} mockOptimizationClient := &MockTestOptimizationClient{ + Settings: testOptimizationSettings(true, true, false), SkippableTests: map[string]bool{ - "Suite1.test1.": true, - "Suite2.test2.": true, + (&testoptimization.Test{Module: "rspec", Suite: "Suite1", Name: "test1"}).FQN(): true, + (&testoptimization.Test{Module: "rspec", Suite: "Suite2", Name: "test2"}).FQN(): true, }, } @@ -2807,6 +3041,7 @@ func TestPreparePlanningData_ITRSubdir_SkipMatching_WithSuitePathsMatchingCwd(t Suite: "Spree::Role at ./spec/models/role_spec.rb", Name: "should have permissions", Parameters: "", } mockOptimizationClient := &MockTestOptimizationClient{ + Settings: testOptimizationSettings(true, true, false), SkippableTests: map[string]bool{ roleTest1.FQN(): true, roleTest2.FQN(): true, diff --git a/internal/planner/testdata/high_skippable_integration/spree_26236954724.json b/internal/planner/testdata/high_skippable_integration/spree_26236954724.json index 6aa55b4..d2c809b 100644 --- a/internal/planner/testdata/high_skippable_integration/spree_26236954724.json +++ b/internal/planner/testdata/high_skippable_integration/spree_26236954724.json @@ -1 +1 @@ -{"source":{"repository":"anmarchenko/spree-dd-testopt","workflowRun":26236954724,"headSha":"796307d65f584ff8a92b19ec62d610708ac44240","ddtestSha":"078dea03eb5beae6a9639a8049dcdd83ec85be6a"},"tests":[{"name":"#execute without any filter parameters returns all addresses without filtering","suite":"Spree::Addresses::Find at ./spec/finders/spree/addresses/find_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/finders/spree/addresses/find_spec.rb"},{"name":"#execute with exclude_quick_checkout filter set to truthy value returns only non-quick-checkout addresses","suite":"Spree::Addresses::Find at ./spec/finders/spree/addresses/find_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/finders/spree/addresses/find_spec.rb"},{"name":"#execute with exclude_quick_checkout filter set to falsey value returns all addresses without filtering","suite":"Spree::Addresses::Find at ./spec/finders/spree/addresses/find_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","suiteSourceFile":"core/spec/finders/spree/addresses/find_spec.rb"},{"name":"#execute finds available Option Values","suite":"Spree::OptionValues::FindAvailable at ./spec/finders/spree/option_values/find_available_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/finders/spree/option_values/find_available_spec.rb"},{"name":"#execute when given a predefined scope finds available Option Values with respect to a predefined scope","suite":"Spree::OptionValues::FindAvailable at ./spec/finders/spree/option_values/find_available_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/finders/spree/option_values/find_available_spec.rb"},{"name":"#execute when given a predefined products scope finds filterable Option Values with respect to a predefined Products scope","suite":"Spree::OptionValues::FindAvailable at ./spec/finders/spree/option_values/find_available_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","suiteSourceFile":"core/spec/finders/spree/option_values/find_available_spec.rb"},{"name":"#execute ordering orders the option values by option type position and option value position","suite":"Spree::OptionValues::FindAvailable at ./spec/finders/spree/option_values/find_available_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1\"}}","suiteSourceFile":"core/spec/finders/spree/option_values/find_available_spec.rb"},{"name":"#execute finds available Product Properties","suite":"Spree::ProductProperties::FindAvailable at ./spec/finders/spree/product_properties/find_available_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/finders/spree/product_properties/find_available_spec.rb"},{"name":"#execute when given a predefined scope finds available Product Properties with respect to a predefined scope","suite":"Spree::ProductProperties::FindAvailable at ./spec/finders/spree/product_properties/find_available_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/finders/spree/product_properties/find_available_spec.rb"},{"name":"#execute when given a predefined products scope finds filterable Product Properties with respect to a predefined Products scope","suite":"Spree::ProductProperties::FindAvailable at ./spec/finders/spree/product_properties/find_available_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","suiteSourceFile":"core/spec/finders/spree/product_properties/find_available_spec.rb"},{"name":"include discontinued returns products with discontinued","suite":"Spree::Products::Find at ./spec/finders/spree/products/find_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/finders/spree/products/find_spec.rb"},{"name":"include deleted returns products with deleted","suite":"Spree::Products::Find at ./spec/finders/spree/products/find_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/finders/spree/products/find_spec.rb"},{"name":"in stock returns products with variants in stock","suite":"Spree::Products::Find at ./spec/finders/spree/products/find_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/finders/spree/products/find_spec.rb"},{"name":"backorderable returns products with backorderable variants","suite":"Spree::Products::Find at ./spec/finders/spree/products/find_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/finders/spree/products/find_spec.rb"},{"name":"purchasable returns products with purchasable variants","suite":"Spree::Products::Find at ./spec/finders/spree/products/find_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","suiteSourceFile":"core/spec/finders/spree/products/find_spec.rb"},{"name":"exclude discontinued and deleted returns not discontinued and not deleted products","suite":"Spree::Products::Find at ./spec/finders/spree/products/find_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","suiteSourceFile":"core/spec/finders/spree/products/find_spec.rb"},{"name":"filter by options and option values for options returns products matching all given options","suite":"Spree::Products::Find at ./spec/finders/spree/products/find_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1:1\"}}","suiteSourceFile":"core/spec/finders/spree/products/find_spec.rb"},{"name":"filter by options and option values for option values filtering by one option returns products with proper option values","suite":"Spree::Products::Find at ./spec/finders/spree/products/find_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2:1:1\"}}","suiteSourceFile":"core/spec/finders/spree/products/find_spec.rb"},{"name":"filter by options and option values for option values filtering by several options returns products that have both options","suite":"Spree::Products::Find at ./spec/finders/spree/products/find_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2:2:1\"}}","suiteSourceFile":"core/spec/finders/spree/products/find_spec.rb"},{"name":"filter by taxons one taxon is requested in params behaves like returns distinct products associated both to self and descendants example at ./spec/finders/spree/products/find_spec.rb:265","suite":"Spree::Products::Find at ./spec/finders/spree/products/find_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1:1:1\"}}","suiteSourceFile":"core/spec/finders/spree/products/find_spec.rb"},{"name":"filter by taxons one taxon is requested in params when product is already related to both taxons behaves like returns distinct products associated both to self and descendants example at ./spec/finders/spree/products/find_spec.rb:265","suite":"Spree::Products::Find at ./spec/finders/spree/products/find_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1:2:1:1\"}}","suiteSourceFile":"core/spec/finders/spree/products/find_spec.rb"},{"name":"filter by taxons multiple taxons are requested example at ./spec/finders/spree/products/find_spec.rb:292","suite":"Spree::Products::Find at ./spec/finders/spree/products/find_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2:1\"}}","suiteSourceFile":"core/spec/finders/spree/products/find_spec.rb"},{"name":"filter by taxons multiple taxons + 1 concat_taxons are requested example at ./spec/finders/spree/products/find_spec.rb:308","suite":"Spree::Products::Find at ./spec/finders/spree/products/find_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:3:1\"}}","suiteSourceFile":"core/spec/finders/spree/products/find_spec.rb"},{"name":"filter by taxons only multiple concat_taxons are requested example at ./spec/finders/spree/products/find_spec.rb:324","suite":"Spree::Products::Find at ./spec/finders/spree/products/find_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:4:1\"}}","suiteSourceFile":"core/spec/finders/spree/products/find_spec.rb"},{"name":"filter by taxons only one concat_taxons is requested example at ./spec/finders/spree/products/find_spec.rb:340","suite":"Spree::Products::Find at ./spec/finders/spree/products/find_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:5:1\"}}","suiteSourceFile":"core/spec/finders/spree/products/find_spec.rb"},{"name":"filter by prices for a price less than 20 example at ./spec/finders/spree/products/find_spec.rb:357","suite":"Spree::Products::Find at ./spec/finders/spree/products/find_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1:1\"}}","suiteSourceFile":"core/spec/finders/spree/products/find_spec.rb"},{"name":"filter by prices for a price between 16 and 24 example at ./spec/finders/spree/products/find_spec.rb:363","suite":"Spree::Products::Find at ./spec/finders/spree/products/find_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:2:1\"}}","suiteSourceFile":"core/spec/finders/spree/products/find_spec.rb"},{"name":"filter by prices for a price more than 23 example at ./spec/finders/spree/products/find_spec.rb:369","suite":"Spree::Products::Find at ./spec/finders/spree/products/find_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:3:1\"}}","suiteSourceFile":"core/spec/finders/spree/products/find_spec.rb"},{"name":"filter by properties when filtering by one Property finds Products matching any of Property values","suite":"Spree::Products::Find at ./spec/finders/spree/products/find_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1:1\"}}","suiteSourceFile":"core/spec/finders/spree/products/find_spec.rb"},{"name":"filter by properties when filtering by many Properties finds Products matching any of Property values, but for all given Properties","suite":"Spree::Products::Find at ./spec/finders/spree/products/find_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:2:1\"}}","suiteSourceFile":"core/spec/finders/spree/products/find_spec.rb"},{"name":"ordered returns products in newest-first order","suite":"Spree::Products::Find at ./spec/finders/spree/products/find_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2\"}}","suiteSourceFile":"core/spec/finders/spree/products/find_spec.rb"},{"name":"ordered returns products in price-high-to-low order","suite":"Spree::Products::Find at ./spec/finders/spree/products/find_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:3\"}}","suiteSourceFile":"core/spec/finders/spree/products/find_spec.rb"},{"name":"ordered returns products in price-low-to-high order","suite":"Spree::Products::Find at ./spec/finders/spree/products/find_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:4\"}}","suiteSourceFile":"core/spec/finders/spree/products/find_spec.rb"},{"name":"ordered returns products in name-a-z order","suite":"Spree::Products::Find at ./spec/finders/spree/products/find_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:5\"}}","suiteSourceFile":"core/spec/finders/spree/products/find_spec.rb"},{"name":"ordered returns products in name-z-a order","suite":"Spree::Products::Find at ./spec/finders/spree/products/find_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:6\"}}","suiteSourceFile":"core/spec/finders/spree/products/find_spec.rb"},{"name":"ordered default when not filtering by taxons returns products in default order","suite":"Spree::Products::Find at ./spec/finders/spree/products/find_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1:1:1\"}}","suiteSourceFile":"core/spec/finders/spree/products/find_spec.rb"},{"name":"ordered default when filtering by taxons returns products ordered by associated taxon position","suite":"Spree::Products::Find at ./spec/finders/spree/products/find_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1:2:1\"}}","suiteSourceFile":"core/spec/finders/spree/products/find_spec.rb"},{"name":"filter by slug when product with given slug is present returns products with the given slug","suite":"Spree::Products::Find at ./spec/finders/spree/products/find_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:1:1\"}}","suiteSourceFile":"core/spec/finders/spree/products/find_spec.rb"},{"name":"filter by slug when product with given slug is not present returns all products","suite":"Spree::Products::Find at ./spec/finders/spree/products/find_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:2:1\"}}","suiteSourceFile":"core/spec/finders/spree/products/find_spec.rb"},{"name":"filter by slug when slug is not present returns all products","suite":"Spree::Products::Find at ./spec/finders/spree/products/find_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:3:1\"}}","suiteSourceFile":"core/spec/finders/spree/products/find_spec.rb"},{"name":"no arguments example at ./spec/finders/spree/stores/find_current_spec.rb:18","suite":"Spree::Stores::FindCurrent at ./spec/finders/spree/stores/find_current_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/finders/spree/stores/find_current_spec.rb"},{"name":"no arguments example at ./spec/finders/spree/stores/find_current_spec.rb:19","suite":"Spree::Stores::FindCurrent at ./spec/finders/spree/stores/find_current_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/finders/spree/stores/find_current_spec.rb"},{"name":"existing store example at ./spec/finders/spree/stores/find_current_spec.rb:25","suite":"Spree::Stores::FindCurrent at ./spec/finders/spree/stores/find_current_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/finders/spree/stores/find_current_spec.rb"},{"name":"existing store example at ./spec/finders/spree/stores/find_current_spec.rb:26","suite":"Spree::Stores::FindCurrent at ./spec/finders/spree/stores/find_current_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","suiteSourceFile":"core/spec/finders/spree/stores/find_current_spec.rb"},{"name":"non-existing store example at ./spec/finders/spree/stores/find_current_spec.rb:32","suite":"Spree::Stores::FindCurrent at ./spec/finders/spree/stores/find_current_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/finders/spree/stores/find_current_spec.rb"},{"name":"with scope example at ./spec/finders/spree/stores/find_current_spec.rb:39","suite":"Spree::Stores::FindCurrent at ./spec/finders/spree/stores/find_current_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/finders/spree/stores/find_current_spec.rb"},{"name":"with custom domain example at ./spec/finders/spree/stores/find_current_spec.rb:46","suite":"Spree::Stores::FindCurrent at ./spec/finders/spree/stores/find_current_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","suiteSourceFile":"core/spec/finders/spree/stores/find_current_spec.rb"},{"name":"filtering by taxon property when filtering by taxon name returns taxon with matching name","suite":"Spree::Taxons::Find at ./spec/finders/spree/taxons/find_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/finders/spree/taxons/find_spec.rb"},{"name":"#execute returns ordered Option Types and Option Values","suite":"Spree::Variants::OptionTypesFinder at ./spec/finders/spree/variants/option_types_finder_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/finders/spree/variants/option_types_finder_spec.rb"},{"name":"#execute when Option Type is color returns color Option Type first","suite":"Spree::Variants::OptionTypesFinder at ./spec/finders/spree/variants/option_types_finder_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/finders/spree/variants/option_types_finder_spec.rb"},{"name":"#execute returns variants ordered by option value position for passed currency","suite":"Spree::Variants::VisibleFinder at ./spec/finders/spree/variants/visible_finder_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/finders/spree/variants/visible_finder_spec.rb"},{"name":"available_countries with checkout zone assigned to the store return only the countries defined by the checkout_zone_id","suite":"Spree::BaseHelper at ./spec/helpers/base_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/helpers/base_helper_spec.rb"},{"name":"available_countries with no checkout zone defined return complete list of countries","suite":"Spree::BaseHelper at ./spec/helpers/base_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/helpers/base_helper_spec.rb"},{"name":"#spree_storefront_resource_url for Product URL example at ./spec/helpers/base_helper_spec.rb:56","suite":"Spree::BaseHelper at ./spec/helpers/base_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","suiteSourceFile":"core/spec/helpers/base_helper_spec.rb"},{"name":"#spree_storefront_resource_url for Product URL when a locale is passed example at ./spec/helpers/base_helper_spec.rb:63","suite":"Spree::BaseHelper at ./spec/helpers/base_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:2:1\"}}","suiteSourceFile":"core/spec/helpers/base_helper_spec.rb"},{"name":"#spree_storefront_resource_url for Product URL when locale_param is present example at ./spec/helpers/base_helper_spec.rb:71","suite":"Spree::BaseHelper at ./spec/helpers/base_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:3:1\"}}","suiteSourceFile":"core/spec/helpers/base_helper_spec.rb"},{"name":"#spree_storefront_resource_url for Product URL when preview_id is not present returns the product url","suite":"Spree::BaseHelper at ./spec/helpers/base_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:4:1\"}}","suiteSourceFile":"core/spec/helpers/base_helper_spec.rb"},{"name":"#spree_storefront_resource_url for Product URL when preview_id is present returns the product preview url","suite":"Spree::BaseHelper at ./spec/helpers/base_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:5:1\"}}","suiteSourceFile":"core/spec/helpers/base_helper_spec.rb"},{"name":"#spree_storefront_resource_url for Product URL for product with custom domain returns the product url","suite":"Spree::BaseHelper at ./spec/helpers/base_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:6:1\"}}","suiteSourceFile":"core/spec/helpers/base_helper_spec.rb"},{"name":"#spree_storefront_resource_url for Product URL for product with relative option returns the product url","suite":"Spree::BaseHelper at ./spec/helpers/base_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:7:1\"}}","suiteSourceFile":"core/spec/helpers/base_helper_spec.rb"},{"name":"#spree_storefront_resource_url for Taxon URL example at ./spec/helpers/base_helper_spec.rb:102","suite":"Spree::BaseHelper at ./spec/helpers/base_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","suiteSourceFile":"core/spec/helpers/base_helper_spec.rb"},{"name":"#spree_storefront_resource_url for Taxon URL when a locale is passed example at ./spec/helpers/base_helper_spec.rb:105","suite":"Spree::BaseHelper at ./spec/helpers/base_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:2:1\"}}","suiteSourceFile":"core/spec/helpers/base_helper_spec.rb"},{"name":"#spree_storefront_resource_url for Taxon URL when locale_param is present example at ./spec/helpers/base_helper_spec.rb:113","suite":"Spree::BaseHelper at ./spec/helpers/base_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:3:1\"}}","suiteSourceFile":"core/spec/helpers/base_helper_spec.rb"},{"name":"defining custom image helpers does not raise errors when style exists","suite":"Spree::BaseHelper at ./spec/helpers/base_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/helpers/base_helper_spec.rb"},{"name":"defining custom image helpers raises NoMethodError when style is not exists","suite":"Spree::BaseHelper at ./spec/helpers/base_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","suiteSourceFile":"core/spec/helpers/base_helper_spec.rb"},{"name":"defining custom image helpers does not raise errors when helper method called","suite":"Spree::BaseHelper at ./spec/helpers/base_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3\"}}","suiteSourceFile":"core/spec/helpers/base_helper_spec.rb"},{"name":"defining custom image helpers raises NoMethodError when statement with name equal to style name called","suite":"Spree::BaseHelper at ./spec/helpers/base_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4\"}}","suiteSourceFile":"core/spec/helpers/base_helper_spec.rb"},{"name":"link_to_tracking returns tracking link if available","suite":"Spree::BaseHelper at ./spec/helpers/base_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/helpers/base_helper_spec.rb"},{"name":"link_to_tracking returns tracking without link if link unavailable","suite":"Spree::BaseHelper at ./spec/helpers/base_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2\"}}","suiteSourceFile":"core/spec/helpers/base_helper_spec.rb"},{"name":"link_to_tracking returns nothing when no shipping method","suite":"Spree::BaseHelper at ./spec/helpers/base_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3\"}}","suiteSourceFile":"core/spec/helpers/base_helper_spec.rb"},{"name":"link_to_tracking returns nothing when no tracking","suite":"Spree::BaseHelper at ./spec/helpers/base_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:4\"}}","suiteSourceFile":"core/spec/helpers/base_helper_spec.rb"},{"name":"spree_base_cache_key when try_spree_current_user defined when admin user returns base cache key","suite":"Spree::BaseHelper at ./spec/helpers/base_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:1:1\"}}","suiteSourceFile":"core/spec/helpers/base_helper_spec.rb"},{"name":"spree_base_cache_key when try_spree_current_user defined when user without admin role returns base cache key","suite":"Spree::BaseHelper at ./spec/helpers/base_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:2:1\"}}","suiteSourceFile":"core/spec/helpers/base_helper_spec.rb"},{"name":"spree_base_cache_key when try_spree_current_user defined when spree_current_user is nil returns base cache key","suite":"Spree::BaseHelper at ./spec/helpers/base_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:3:1\"}}","suiteSourceFile":"core/spec/helpers/base_helper_spec.rb"},{"name":"spree_base_cache_key when try_spree_current_user is undefined returns base cache key","suite":"Spree::BaseHelper at ./spec/helpers/base_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1\"}}","suiteSourceFile":"core/spec/helpers/base_helper_spec.rb"},{"name":"pretty_time prints in a format","suite":"Spree::BaseHelper at ./spec/helpers/base_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","suiteSourceFile":"core/spec/helpers/base_helper_spec.rb"},{"name":"pretty_time return empty string when nil is supplied","suite":"Spree::BaseHelper at ./spec/helpers/base_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2\"}}","suiteSourceFile":"core/spec/helpers/base_helper_spec.rb"},{"name":"pretty_date prints in a format","suite":"Spree::BaseHelper at ./spec/helpers/base_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","suiteSourceFile":"core/spec/helpers/base_helper_spec.rb"},{"name":"pretty_date return empty string when nil is supplied","suite":"Spree::BaseHelper at ./spec/helpers/base_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2\"}}","suiteSourceFile":"core/spec/helpers/base_helper_spec.rb"},{"name":"#display_price when there is no current order returns the price including default vat","suite":"Spree::BaseHelper at ./spec/helpers/base_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1:1\"}}","suiteSourceFile":"core/spec/helpers/base_helper_spec.rb"},{"name":"#display_price when there is no current order with a default VAT returns the price adding the VAT","suite":"Spree::BaseHelper at ./spec/helpers/base_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1:2:1\"}}","suiteSourceFile":"core/spec/helpers/base_helper_spec.rb"},{"name":"#display_price with an order that has a tax zone that matches no VAT returns the price excluding VAT","suite":"Spree::BaseHelper at ./spec/helpers/base_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2:1:1\"}}","suiteSourceFile":"core/spec/helpers/base_helper_spec.rb"},{"name":"#display_price with an order that has a tax zone that matches a VAT returns the price adding the VAT","suite":"Spree::BaseHelper at ./spec/helpers/base_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2:2:1\"}}","suiteSourceFile":"core/spec/helpers/base_helper_spec.rb"},{"name":"#spree_favicon_path when a store has its own favicon example at ./spec/helpers/base_helper_spec.rb:324","suite":"Spree::BaseHelper at ./spec/helpers/base_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1:1\"}}","suiteSourceFile":"core/spec/helpers/base_helper_spec.rb"},{"name":"#spree_favicon_path when a store has no favicon example at ./spec/helpers/base_helper_spec.rb:331","suite":"Spree::BaseHelper at ./spec/helpers/base_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:2:1\"}}","suiteSourceFile":"core/spec/helpers/base_helper_spec.rb"},{"name":"#supported_currency_options example at ./spec/helpers/currency_helper_spec.rb:12","suite":"Spree::CurrencyHelper at ./spec/helpers/currency_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/helpers/currency_helper_spec.rb"},{"name":"#should_render_currency_dropdown? store with multiple currencies example at ./spec/helpers/currency_helper_spec.rb:17","suite":"Spree::CurrencyHelper at ./spec/helpers/currency_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","suiteSourceFile":"core/spec/helpers/currency_helper_spec.rb"},{"name":"#should_render_currency_dropdown? store with single currency example at ./spec/helpers/currency_helper_spec.rb:23","suite":"Spree::CurrencyHelper at ./spec/helpers/currency_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","suiteSourceFile":"core/spec/helpers/currency_helper_spec.rb"},{"name":"#currency_symbol example at ./spec/helpers/currency_helper_spec.rb:28","suite":"Spree::CurrencyHelper at ./spec/helpers/currency_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/helpers/currency_helper_spec.rb"},{"name":"#currency_presentation example at ./spec/helpers/currency_helper_spec.rb:32","suite":"Spree::CurrencyHelper at ./spec/helpers/currency_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/helpers/currency_helper_spec.rb"},{"name":"#currency_money returns Money::Currency instance for given currency","suite":"Spree::CurrencyHelper at ./spec/helpers/currency_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","suiteSourceFile":"core/spec/helpers/currency_helper_spec.rb"},{"name":"#currency_money uses current_currency when no argument is provided","suite":"Spree::CurrencyHelper at ./spec/helpers/currency_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2\"}}","suiteSourceFile":"core/spec/helpers/currency_helper_spec.rb"},{"name":"#preferred_currencies returns array of supported currencies from current store as `Money::Currency`","suite":"Spree::CurrencyHelper at ./spec/helpers/currency_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","suiteSourceFile":"core/spec/helpers/currency_helper_spec.rb"},{"name":"#spree_image_tag returns an image tag with the correct url","suite":"Spree::ImagesHelper at ./spec/helpers/images_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/helpers/images_helper_spec.rb"},{"name":"#spree_image_tag when variant option is provided passes only variant to spree_image_url and excludes it from image_tag options","suite":"Spree::ImagesHelper at ./spec/helpers/images_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/helpers/images_helper_spec.rb"},{"name":"#spree_image_tag when variant option is provided ignores width, height, and format when variant is provided","suite":"Spree::ImagesHelper at ./spec/helpers/images_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2\"}}","suiteSourceFile":"core/spec/helpers/images_helper_spec.rb"},{"name":"#spree_image_tag when image is not attached returns nil","suite":"Spree::ImagesHelper at ./spec/helpers/images_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","suiteSourceFile":"core/spec/helpers/images_helper_spec.rb"},{"name":"#spree_image_tag when image is not variable returns nil","suite":"Spree::ImagesHelper at ./spec/helpers/images_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1\"}}","suiteSourceFile":"core/spec/helpers/images_helper_spec.rb"},{"name":"#spree_image_url supports blob","suite":"Spree::ImagesHelper at ./spec/helpers/images_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/helpers/images_helper_spec.rb"},{"name":"#spree_image_url when image is not attached returns nil","suite":"Spree::ImagesHelper at ./spec/helpers/images_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","suiteSourceFile":"core/spec/helpers/images_helper_spec.rb"},{"name":"#spree_image_url when image is not variable returns nil","suite":"Spree::ImagesHelper at ./spec/helpers/images_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:1\"}}","suiteSourceFile":"core/spec/helpers/images_helper_spec.rb"},{"name":"#spree_image_url when width and height are present returns a url with resize_to_fill","suite":"Spree::ImagesHelper at ./spec/helpers/images_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:4:1\"}}","suiteSourceFile":"core/spec/helpers/images_helper_spec.rb"},{"name":"#spree_image_url when only width is present returns a url with resize_to_limit","suite":"Spree::ImagesHelper at ./spec/helpers/images_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:5:1\"}}","suiteSourceFile":"core/spec/helpers/images_helper_spec.rb"},{"name":"#spree_image_url when format is provided returns a url with the correct format","suite":"Spree::ImagesHelper at ./spec/helpers/images_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:6:1\"}}","suiteSourceFile":"core/spec/helpers/images_helper_spec.rb"},{"name":"#spree_image_url when variant option is provided uses the named variant directly","suite":"Spree::ImagesHelper at ./spec/helpers/images_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:7:1\"}}","suiteSourceFile":"core/spec/helpers/images_helper_spec.rb"},{"name":"#spree_image_url when variant option is provided ignores width and height when variant is provided","suite":"Spree::ImagesHelper at ./spec/helpers/images_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:7:2\"}}","suiteSourceFile":"core/spec/helpers/images_helper_spec.rb"},{"name":"#spree_asset_aspect_ratio when attachment is not present returns nil","suite":"Spree::ImagesHelper at ./spec/helpers/images_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","suiteSourceFile":"core/spec/helpers/images_helper_spec.rb"},{"name":"#spree_asset_aspect_ratio when attachment is not analyzed returns nil","suite":"Spree::ImagesHelper at ./spec/helpers/images_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","suiteSourceFile":"core/spec/helpers/images_helper_spec.rb"},{"name":"#spree_asset_aspect_ratio when aspect_ratio is present in metadata returns the aspect ratio","suite":"Spree::ImagesHelper at ./spec/helpers/images_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3:1\"}}","suiteSourceFile":"core/spec/helpers/images_helper_spec.rb"},{"name":"#spree_asset_aspect_ratio when calculating aspect ratio from dimensions when height is greater than width returns the correct ratio","suite":"Spree::ImagesHelper at ./spec/helpers/images_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4:1:1\"}}","suiteSourceFile":"core/spec/helpers/images_helper_spec.rb"},{"name":"#spree_asset_aspect_ratio when calculating aspect ratio from dimensions when width is greater than height returns the correct ratio","suite":"Spree::ImagesHelper at ./spec/helpers/images_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4:2:1\"}}","suiteSourceFile":"core/spec/helpers/images_helper_spec.rb"},{"name":"#spree_asset_aspect_ratio when calculating aspect ratio from dimensions when width equals height returns 1.0","suite":"Spree::ImagesHelper at ./spec/helpers/images_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4:3:1\"}}","suiteSourceFile":"core/spec/helpers/images_helper_spec.rb"},{"name":"#all_locales_options example at ./spec/helpers/locale_helper_spec.rb:25","suite":"Spree::LocaleHelper at ./spec/helpers/locale_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/helpers/locale_helper_spec.rb"},{"name":"#available_locales_options example at ./spec/helpers/locale_helper_spec.rb:34","suite":"Spree::LocaleHelper at ./spec/helpers/locale_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/helpers/locale_helper_spec.rb"},{"name":"#supported_locales_options example at ./spec/helpers/locale_helper_spec.rb:40","suite":"Spree::LocaleHelper at ./spec/helpers/locale_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/helpers/locale_helper_spec.rb"},{"name":"#locale_presentation example at ./spec/helpers/locale_helper_spec.rb:44","suite":"Spree::LocaleHelper at ./spec/helpers/locale_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/helpers/locale_helper_spec.rb"},{"name":"#locale_presentation returns the locale when no translation exists","suite":"Spree::LocaleHelper at ./spec/helpers/locale_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2\"}}","suiteSourceFile":"core/spec/helpers/locale_helper_spec.rb"},{"name":"#should_render_locale_dropdown? store with multiple locales example at ./spec/helpers/locale_helper_spec.rb:55","suite":"Spree::LocaleHelper at ./spec/helpers/locale_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:1\"}}","suiteSourceFile":"core/spec/helpers/locale_helper_spec.rb"},{"name":"#should_render_locale_dropdown? store with single locale example at ./spec/helpers/locale_helper_spec.rb:61","suite":"Spree::LocaleHelper at ./spec/helpers/locale_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1\"}}","suiteSourceFile":"core/spec/helpers/locale_helper_spec.rb"},{"name":"#variant_price_diff when variant is same as master example at ./spec/helpers/products_helper_spec.rb:31","suite":"Spree::ProductsHelper at ./spec/helpers/products_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/helpers/products_helper_spec.rb"},{"name":"#variant_price_diff when the master has no price example at ./spec/helpers/products_helper_spec.rb:37","suite":"Spree::ProductsHelper at ./spec/helpers/products_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/helpers/products_helper_spec.rb"},{"name":"#variant_price_diff when currency is default when variant is more than master example at ./spec/helpers/products_helper_spec.rb:44","suite":"Spree::ProductsHelper at ./spec/helpers/products_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1:1\"}}","suiteSourceFile":"core/spec/helpers/products_helper_spec.rb"},{"name":"#variant_price_diff when currency is default when variant is more than master example at ./spec/helpers/products_helper_spec.rb:46","suite":"Spree::ProductsHelper at ./spec/helpers/products_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1:2\"}}","suiteSourceFile":"core/spec/helpers/products_helper_spec.rb"},{"name":"#variant_price_diff when currency is default when variant is less than master example at ./spec/helpers/products_helper_spec.rb:52","suite":"Spree::ProductsHelper at ./spec/helpers/products_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:2:1\"}}","suiteSourceFile":"core/spec/helpers/products_helper_spec.rb"},{"name":"#variant_price_diff when currency is JPY when variant is more than master example at ./spec/helpers/products_helper_spec.rb:64","suite":"Spree::ProductsHelper at ./spec/helpers/products_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1:1\"}}","suiteSourceFile":"core/spec/helpers/products_helper_spec.rb"},{"name":"#variant_price_diff when currency is JPY when variant is less than master example at ./spec/helpers/products_helper_spec.rb:70","suite":"Spree::ProductsHelper at ./spec/helpers/products_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:2:1\"}}","suiteSourceFile":"core/spec/helpers/products_helper_spec.rb"},{"name":"#variant_price_full is nil when all variant prices are equal","suite":"Spree::ProductsHelper at ./spec/helpers/products_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3\"}}","suiteSourceFile":"core/spec/helpers/products_helper_spec.rb"},{"name":"#variant_price_full when currency is default returns the variant price if the price is different than master","suite":"Spree::ProductsHelper at ./spec/helpers/products_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","suiteSourceFile":"core/spec/helpers/products_helper_spec.rb"},{"name":"#variant_price_full when currency is JPY returns the variant price if the price is different than master","suite":"Spree::ProductsHelper at ./spec/helpers/products_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","suiteSourceFile":"core/spec/helpers/products_helper_spec.rb"},{"name":"#line_item_description_text behaves like line item descriptions variant has a blank description example at ./spec/helpers/products_helper_spec.rb:124","suite":"Spree::ProductsHelper at ./spec/helpers/products_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1:1\"}}","suiteSourceFile":"core/spec/helpers/products_helper_spec.rb"},{"name":"#line_item_description_text behaves like line item descriptions variant has a description example at ./spec/helpers/products_helper_spec.rb:130","suite":"Spree::ProductsHelper at ./spec/helpers/products_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:2:1\"}}","suiteSourceFile":"core/spec/helpers/products_helper_spec.rb"},{"name":"#line_item_description_text behaves like line item descriptions description has nonbreaking spaces example at ./spec/helpers/products_helper_spec.rb:136","suite":"Spree::ProductsHelper at ./spec/helpers/products_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:3:1\"}}","suiteSourceFile":"core/spec/helpers/products_helper_spec.rb"},{"name":"#line_item_description_text behaves like line item descriptions description has line endings example at ./spec/helpers/products_helper_spec.rb:142","suite":"Spree::ProductsHelper at ./spec/helpers/products_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:4:1\"}}","suiteSourceFile":"core/spec/helpers/products_helper_spec.rb"},{"name":"#cache_key_for_products when there is a maximum updated date example at ./spec/helpers/products_helper_spec.rb:175","suite":"Spree::ProductsHelper at ./spec/helpers/products_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1\"}}","suiteSourceFile":"core/spec/helpers/products_helper_spec.rb"},{"name":"#cache_key_for_products when there is no considered maximum updated date example at ./spec/helpers/products_helper_spec.rb:186","suite":"Spree::ProductsHelper at ./spec/helpers/products_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1\"}}","suiteSourceFile":"core/spec/helpers/products_helper_spec.rb"},{"name":"#cache_key_for_products with Taxon ID present example at ./spec/helpers/products_helper_spec.rb:197","suite":"Spree::ProductsHelper at ./spec/helpers/products_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3:1\"}}","suiteSourceFile":"core/spec/helpers/products_helper_spec.rb"},{"name":"#cache_key_for_products with `additional_cache_key` passed example at ./spec/helpers/products_helper_spec.rb:210","suite":"Spree::ProductsHelper at ./spec/helpers/products_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:4:1\"}}","suiteSourceFile":"core/spec/helpers/products_helper_spec.rb"},{"name":"#cache_key_for_product when there is a current tax zone includes the current_tax_zone","suite":"Spree::ProductsHelper at ./spec/helpers/products_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:1\"}}","suiteSourceFile":"core/spec/helpers/products_helper_spec.rb"},{"name":"#cache_key_for_product when there is no current tax zone example at ./spec/helpers/products_helper_spec.rb:235","suite":"Spree::ProductsHelper at ./spec/helpers/products_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1\"}}","suiteSourceFile":"core/spec/helpers/products_helper_spec.rb"},{"name":"#cache_key_for_product when current_price_options includes nil values does not include nil values","suite":"Spree::ProductsHelper at ./spec/helpers/products_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3:1\"}}","suiteSourceFile":"core/spec/helpers/products_helper_spec.rb"},{"name":"#cache_key_for_product when current_price_options includes values that do not implement cache_key includes string representations of these values","suite":"Spree::ProductsHelper at ./spec/helpers/products_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:4:1\"}}","suiteSourceFile":"core/spec/helpers/products_helper_spec.rb"},{"name":"#cache_key_for_product when keys in the options hash are inserted in non-alphabetical order the values are nevertheless returned in alphabetical order of their keys","suite":"Spree::ProductsHelper at ./spec/helpers/products_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:5:1\"}}","suiteSourceFile":"core/spec/helpers/products_helper_spec.rb"},{"name":"#cache_key_for_product given possible promotions example at ./spec/helpers/products_helper_spec.rb:286","suite":"Spree::ProductsHelper at ./spec/helpers/products_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:6:1\"}}","suiteSourceFile":"core/spec/helpers/products_helper_spec.rb"},{"name":"#shipment_tracking_link_to with tracking and tracking_url creates link with tracking as a name","suite":"Spree::ShipmentHelper at ./spec/helpers/shipment_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/helpers/shipment_helper_spec.rb"},{"name":"#shipment_tracking_link_to with name passed in params creates link with passed value as a name","suite":"Spree::ShipmentHelper at ./spec/helpers/shipment_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/helpers/shipment_helper_spec.rb"},{"name":"#shipment_tracking_link_to with tracking_url only creates a link with tracking_url as a name","suite":"Spree::ShipmentHelper at ./spec/helpers/shipment_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","suiteSourceFile":"core/spec/helpers/shipment_helper_spec.rb"},{"name":"#shipment_tracking_link_to with no tracking_url returns empty string","suite":"Spree::ShipmentHelper at ./spec/helpers/shipment_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1\"}}","suiteSourceFile":"core/spec/helpers/shipment_helper_spec.rb"},{"name":"#shipment_tracking_link_to with options sets options for link","suite":"Spree::ShipmentHelper at ./spec/helpers/shipment_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5:1\"}}","suiteSourceFile":"core/spec/helpers/shipment_helper_spec.rb"},{"name":"does not have missing keys","suite":"I18n at ./spec/i18n_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","suiteSourceFile":"core/spec/i18n_spec.rb"},{"name":"files are normalized","suite":"I18n at ./spec/i18n_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2\"}}","suiteSourceFile":"core/spec/i18n_spec.rb"},{"name":"does not have inconsistent interpolations","suite":"I18n at ./spec/i18n_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3\"}}","suiteSourceFile":"core/spec/i18n_spec.rb"},{"name":"geocodes the address","suite":"Spree::Addresses::GeocodeAddressJob at ./spec/jobs/spree/addresses/geocode_address_job_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","suiteSourceFile":"core/spec/jobs/spree/addresses/geocode_address_job_spec.rb"},{"name":"when the address cannot be geocoded handles the error","suite":"Spree::Addresses::GeocodeAddressJob at ./spec/jobs/spree/addresses/geocode_address_job_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/jobs/spree/addresses/geocode_address_job_spec.rb"},{"name":"#perform generates coupon codes","suite":"Spree::CouponCodes::BulkGenerateJob at ./spec/jobs/spree/coupon_codes/bulk_generate_job_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/jobs/spree/coupon_codes/bulk_generate_job_spec.rb"},{"name":"#perform calls generate on the export","suite":"Spree::Exports::GenerateJob at ./spec/jobs/spree/exports/generate_job_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/jobs/spree/exports/generate_job_spec.rb"},{"name":"#perform generates gift cards","suite":"Spree::GiftCards::BulkGenerateJob at ./spec/jobs/spree/gift_cards/bulk_generate_job_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/jobs/spree/gift_cards/bulk_generate_job_spec.rb"},{"name":"is queued in the correct queue","suite":"Spree::Images::SaveFromUrlJob at ./spec/jobs/spree/images/save_from_url_job_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","suiteSourceFile":"core/spec/jobs/spree/images/save_from_url_job_spec.rb"},{"name":"can be enqueued","suite":"Spree::Images::SaveFromUrlJob at ./spec/jobs/spree/images/save_from_url_job_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2\"}}","suiteSourceFile":"core/spec/jobs/spree/images/save_from_url_job_spec.rb"},{"name":"when performing the job downloads and attaches image from the URL","suite":"Spree::Images::SaveFromUrlJob at ./spec/jobs/spree/images/save_from_url_job_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/jobs/spree/images/save_from_url_job_spec.rb"},{"name":"when performing the job with position sets the position if provided","suite":"Spree::Images::SaveFromUrlJob at ./spec/jobs/spree/images/save_from_url_job_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","suiteSourceFile":"core/spec/jobs/spree/images/save_from_url_job_spec.rb"},{"name":"when performing the job when image already exists with the given external_url does not re-download but triggers save!","suite":"Spree::Images::SaveFromUrlJob at ./spec/jobs/spree/images/save_from_url_job_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3:1\"}}","suiteSourceFile":"core/spec/jobs/spree/images/save_from_url_job_spec.rb"},{"name":"when performing the job when skip_import? returns true does not download the image","suite":"Spree::Images::SaveFromUrlJob at ./spec/jobs/spree/images/save_from_url_job_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4:1\"}}","suiteSourceFile":"core/spec/jobs/spree/images/save_from_url_job_spec.rb"},{"name":"creates import rows from the CSV file","suite":"Spree::Imports::CreateRowsJob at ./spec/jobs/spree/imports/create_rows_job_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","suiteSourceFile":"core/spec/jobs/spree/imports/create_rows_job_spec.rb"},{"name":"transitions import to processing if not already processing","suite":"Spree::Imports::CreateRowsJob at ./spec/jobs/spree/imports/create_rows_job_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2\"}}","suiteSourceFile":"core/spec/jobs/spree/imports/create_rows_job_spec.rb"},{"name":"persists rows count","suite":"Spree::Imports::CreateRowsJob at ./spec/jobs/spree/imports/create_rows_job_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3\"}}","suiteSourceFile":"core/spec/jobs/spree/imports/create_rows_job_spec.rb"},{"name":"enqueues process_rows_async after rows creation","suite":"Spree::Imports::CreateRowsJob at ./spec/jobs/spree/imports/create_rows_job_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4\"}}","suiteSourceFile":"core/spec/jobs/spree/imports/create_rows_job_spec.rb"},{"name":"when CSV is malformed sets processing_errors and fails the import","suite":"Spree::Imports::CreateRowsJob at ./spec/jobs/spree/imports/create_rows_job_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","suiteSourceFile":"core/spec/jobs/spree/imports/create_rows_job_spec.rb"},{"name":"processes pending and failed rows","suite":"Spree::Imports::ProcessRowsJob at ./spec/jobs/spree/imports/process_rows_job_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","suiteSourceFile":"core/spec/jobs/spree/imports/process_rows_job_spec.rb"},{"name":"marks import as complete after processing all rows","suite":"Spree::Imports::ProcessRowsJob at ./spec/jobs/spree/imports/process_rows_job_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2\"}}","suiteSourceFile":"core/spec/jobs/spree/imports/process_rows_job_spec.rb"},{"name":"#perform when store_product exists calls refresh_metrics! on the store_product","suite":"Spree::Products::RefreshMetricsJob at ./spec/jobs/spree/products/refresh_metrics_job_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/jobs/spree/products/refresh_metrics_job_spec.rb"},{"name":"#perform when store_product does not exist does nothing","suite":"Spree::Products::RefreshMetricsJob at ./spec/jobs/spree/products/refresh_metrics_job_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/jobs/spree/products/refresh_metrics_job_spec.rb"},{"name":"#perform when product_id is invalid does nothing","suite":"Spree::Products::RefreshMetricsJob at ./spec/jobs/spree/products/refresh_metrics_job_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","suiteSourceFile":"core/spec/jobs/spree/products/refresh_metrics_job_spec.rb"},{"name":"#perform when store_id is invalid does nothing","suite":"Spree::Products::RefreshMetricsJob at ./spec/jobs/spree/products/refresh_metrics_job_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1\"}}","suiteSourceFile":"core/spec/jobs/spree/products/refresh_metrics_job_spec.rb"},{"name":"#perform touches all specified taxons","suite":"Spree::Products::TouchTaxonsJob at ./spec/jobs/spree/products/touch_taxons_job_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/jobs/spree/products/touch_taxons_job_spec.rb"},{"name":"#perform touches all specified taxonomies","suite":"Spree::Products::TouchTaxonsJob at ./spec/jobs/spree/products/touch_taxons_job_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/jobs/spree/products/touch_taxons_job_spec.rb"},{"name":"#perform does not touch other taxons","suite":"Spree::Products::TouchTaxonsJob at ./spec/jobs/spree/products/touch_taxons_job_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/jobs/spree/products/touch_taxons_job_spec.rb"},{"name":"enqueues the creation of the stock location stock items","suite":"Spree::StockLocations::StockItems::CreateJob at ./spec/jobs/spree/stock_locations/stock_items/create_job_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","suiteSourceFile":"core/spec/jobs/spree/stock_locations/stock_items/create_job_spec.rb"},{"name":"enqueues the removal of variants line items","suite":"Spree::Variants::RemoveFromIncompleteOrdersJob at ./spec/jobs/spree/variants/remove_from_incomplete_orders_job_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","suiteSourceFile":"core/spec/jobs/spree/variants/remove_from_incomplete_orders_job_spec.rb"},{"name":"removes the line item from the order","suite":"Spree::Variants::RemoveLineItemJob at ./spec/jobs/spree/variants/remove_line_item_job_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","suiteSourceFile":"core/spec/jobs/spree/variants/remove_line_item_job_spec.rb"},{"name":"touches all variants with the given IDs","suite":"Spree::Variants::TouchJob at ./spec/jobs/spree/variants/touch_job_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","suiteSourceFile":"core/spec/jobs/spree/variants/touch_job_spec.rb"},{"name":"handles empty array","suite":"Spree::Variants::TouchJob at ./spec/jobs/spree/variants/touch_job_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2\"}}","suiteSourceFile":"core/spec/jobs/spree/variants/touch_job_spec.rb"},{"name":"adds has_one :calculator relationship","suite":"Spree::CalculatedAdjustments at ./spec/lib/calculated_adjustments_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","suiteSourceFile":"core/spec/lib/calculated_adjustments_spec.rb"},{"name":"translates within the spree scope","suite":"i18n at ./spec/lib/i18n_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2\"}}","suiteSourceFile":"core/spec/lib/i18n_spec.rb"},{"name":"raise error without any context when using a path","suite":"i18n at ./spec/lib/i18n_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3\"}}","suiteSourceFile":"core/spec/lib/i18n_spec.rb"},{"name":"prepends a string scope","suite":"i18n at ./spec/lib/i18n_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4\"}}","suiteSourceFile":"core/spec/lib/i18n_spec.rb"},{"name":"prepends to an array scope","suite":"i18n at ./spec/lib/i18n_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5\"}}","suiteSourceFile":"core/spec/lib/i18n_spec.rb"},{"name":"returns two translations","suite":"i18n at ./spec/lib/i18n_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6\"}}","suiteSourceFile":"core/spec/lib/i18n_spec.rb"},{"name":"returns reasonable string for missing translations","suite":"i18n at ./spec/lib/i18n_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7\"}}","suiteSourceFile":"core/spec/lib/i18n_spec.rb"},{"name":"#available_locales when SpreeI18n is defined returns all locales from the SpreeI18n","suite":"i18n at ./spec/lib/i18n_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/lib/i18n_spec.rb"},{"name":"#available_locales when SpreeI18n is defined returns an array with the string \"en\" removed","suite":"i18n at ./spec/lib/i18n_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2\"}}","suiteSourceFile":"core/spec/lib/i18n_spec.rb"},{"name":"#available_locales when SpreeI18n is not defined returns just default locale","suite":"i18n at ./spec/lib/i18n_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/lib/i18n_spec.rb"},{"name":"missed + unused translations missed translations logs missing translations","suite":"i18n at ./spec/lib/i18n_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1:1\"}}","suiteSourceFile":"core/spec/lib/i18n_spec.rb"},{"name":"missed + unused translations missed translations does not log present translations","suite":"i18n at ./spec/lib/i18n_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1:2\"}}","suiteSourceFile":"core/spec/lib/i18n_spec.rb"},{"name":"missed + unused translations missed translations does not break when asked for multiple translations","suite":"i18n at ./spec/lib/i18n_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1:3\"}}","suiteSourceFile":"core/spec/lib/i18n_spec.rb"},{"name":"missed + unused translations unused translations logs translations that aren't used","suite":"i18n at ./spec/lib/i18n_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2:1\"}}","suiteSourceFile":"core/spec/lib/i18n_spec.rb"},{"name":"missed + unused translations unused translations does not log used translations","suite":"i18n at ./spec/lib/i18n_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2:2\"}}","suiteSourceFile":"core/spec/lib/i18n_spec.rb"},{"name":"#current_ability returns Spree::Ability instance","suite":"Spree::Core::ControllerHelpers::Auth at ./spec/lib/spree/core/controller_helpers/auth_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/controller_helpers/auth_spec.rb"},{"name":"#store_location sets session return url","suite":"Spree::Core::ControllerHelpers::Auth at ./spec/lib/spree/core/controller_helpers/auth_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/controller_helpers/auth_spec.rb"},{"name":"#try_spree_current_user calls spree_current_user when define spree_current_user method","suite":"Spree::Core::ControllerHelpers::Auth at ./spec/lib/spree/core/controller_helpers/auth_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/controller_helpers/auth_spec.rb"},{"name":"#try_spree_current_user calls current_spree_user when define current_spree_user method","suite":"Spree::Core::ControllerHelpers::Auth at ./spec/lib/spree/core/controller_helpers/auth_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","suiteSourceFile":"core/spec/lib/spree/core/controller_helpers/auth_spec.rb"},{"name":"#try_spree_current_user returns nil","suite":"Spree::Core::ControllerHelpers::Auth at ./spec/lib/spree/core/controller_helpers/auth_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3\"}}","suiteSourceFile":"core/spec/lib/spree/core/controller_helpers/auth_spec.rb"},{"name":"#current_currency returns current store default currency","suite":"Spree::Core::ControllerHelpers::Currency at ./spec/lib/spree/core/controller_helpers/currency_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/controller_helpers/currency_spec.rb"},{"name":"#current_currency sets Spree::Current.currency","suite":"Spree::Core::ControllerHelpers::Currency at ./spec/lib/spree/core/controller_helpers/currency_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/lib/spree/core/controller_helpers/currency_spec.rb"},{"name":"#supported_currencies returns supported currencies","suite":"Spree::Core::ControllerHelpers::Currency at ./spec/lib/spree/core/controller_helpers/currency_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/controller_helpers/currency_spec.rb"},{"name":"#currency_param same as store default locale example at ./spec/lib/spree/core/controller_helpers/currency_spec.rb:41","suite":"Spree::Core::ControllerHelpers::Currency at ./spec/lib/spree/core/controller_helpers/currency_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/controller_helpers/currency_spec.rb"},{"name":"#currency_param different than store locale example at ./spec/lib/spree/core/controller_helpers/currency_spec.rb:47","suite":"Spree::Core::ControllerHelpers::Currency at ./spec/lib/spree/core/controller_helpers/currency_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/controller_helpers/currency_spec.rb"},{"name":"#current_locale taking locale from user and store with locale set returns locale set within user","suite":"Spree::Core::ControllerHelpers::Locale at ./spec/lib/spree/core/controller_helpers/locale_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/controller_helpers/locale_spec.rb"},{"name":"#current_locale not taking locale from user store with locale set returns current store default locale","suite":"Spree::Core::ControllerHelpers::Locale at ./spec/lib/spree/core/controller_helpers/locale_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/controller_helpers/locale_spec.rb"},{"name":"#current_locale not taking locale from user store with locale set return supported locale when passed as param","suite":"Spree::Core::ControllerHelpers::Locale at ./spec/lib/spree/core/controller_helpers/locale_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1:2\"}}","suiteSourceFile":"core/spec/lib/spree/core/controller_helpers/locale_spec.rb"},{"name":"#current_locale not taking locale from user config_locale present returns config_locale if present","suite":"Spree::Core::ControllerHelpers::Locale at ./spec/lib/spree/core/controller_helpers/locale_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/controller_helpers/locale_spec.rb"},{"name":"#current_locale not taking locale from user store without locale set without I18n.default_locale set fallbacks to english","suite":"Spree::Core::ControllerHelpers::Locale at ./spec/lib/spree/core/controller_helpers/locale_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:3:1:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/controller_helpers/locale_spec.rb"},{"name":"#current_locale not taking locale from user store without locale set with I18n.default_locale set fallbacks to the default application locale","suite":"Spree::Core::ControllerHelpers::Locale at ./spec/lib/spree/core/controller_helpers/locale_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:3:2:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/controller_helpers/locale_spec.rb"},{"name":"#supported_locales returns supported currencies","suite":"Spree::Core::ControllerHelpers::Locale at ./spec/lib/spree/core/controller_helpers/locale_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/controller_helpers/locale_spec.rb"},{"name":"#supported_locales returns supported locales","suite":"Spree::Core::ControllerHelpers::Locale at ./spec/lib/spree/core/controller_helpers/locale_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","suiteSourceFile":"core/spec/lib/spree/core/controller_helpers/locale_spec.rb"},{"name":"#locale_param same as store default locale example at ./spec/lib/spree/core/controller_helpers/locale_spec.rb:102","suite":"Spree::Core::ControllerHelpers::Locale at ./spec/lib/spree/core/controller_helpers/locale_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/controller_helpers/locale_spec.rb"},{"name":"#locale_param different than store locale example at ./spec/lib/spree/core/controller_helpers/locale_spec.rb:110","suite":"Spree::Core::ControllerHelpers::Locale at ./spec/lib/spree/core/controller_helpers/locale_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/controller_helpers/locale_spec.rb"},{"name":"#set_locale sets the default and the current locale","suite":"Spree::Core::ControllerHelpers::Locale at ./spec/lib/spree/core/controller_helpers/locale_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/controller_helpers/locale_spec.rb"},{"name":"#set_locale when always using translations sets only the current locale","suite":"Spree::Core::ControllerHelpers::Locale at ./spec/lib/spree/core/controller_helpers/locale_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/controller_helpers/locale_spec.rb"},{"name":"#simple_current_order returns an empty order","suite":"Spree::Core::ControllerHelpers::Order at ./spec/lib/spree/core/controller_helpers/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/controller_helpers/order_spec.rb"},{"name":"#simple_current_order returns Spree::Order instance","suite":"Spree::Core::ControllerHelpers::Order at ./spec/lib/spree/core/controller_helpers/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/lib/spree/core/controller_helpers/order_spec.rb"},{"name":"#current_order create_order_if_necessary option is false returns current order","suite":"Spree::Core::ControllerHelpers::Order at ./spec/lib/spree/core/controller_helpers/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/controller_helpers/order_spec.rb"},{"name":"#current_order create_order_if_necessary option is true creates new order","suite":"Spree::Core::ControllerHelpers::Order at ./spec/lib/spree/core/controller_helpers/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/controller_helpers/order_spec.rb"},{"name":"#current_order creating a token cookie for a cart with token creates a new token cookie","suite":"Spree::Core::ControllerHelpers::Order at ./spec/lib/spree/core/controller_helpers/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:1:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/controller_helpers/order_spec.rb"},{"name":"#current_order creating a token cookie for a cart with token on a custom domain creates a new token cookie on a custom domain","suite":"Spree::Core::ControllerHelpers::Order at ./spec/lib/spree/core/controller_helpers/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:1:2:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/controller_helpers/order_spec.rb"},{"name":"#current_order creating a token cookie for a cart without token does nothing","suite":"Spree::Core::ControllerHelpers::Order at ./spec/lib/spree/core/controller_helpers/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:2:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/controller_helpers/order_spec.rb"},{"name":"#current_order creating a token cookie with a checkout token creates a new token cookie","suite":"Spree::Core::ControllerHelpers::Order at ./spec/lib/spree/core/controller_helpers/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:3:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/controller_helpers/order_spec.rb"},{"name":"#current_order creating a token cookie with a checkout token on a custom domain creates a new token cookie on a custom domain","suite":"Spree::Core::ControllerHelpers::Order at ./spec/lib/spree/core/controller_helpers/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:3:2:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/controller_helpers/order_spec.rb"},{"name":"#current_order creating a token cookie for a checkout without token does nothing","suite":"Spree::Core::ControllerHelpers::Order at ./spec/lib/spree/core/controller_helpers/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:4:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/controller_helpers/order_spec.rb"},{"name":"#associate_user user is blank calls Spree::Order#associate_user! method","suite":"Spree::Core::ControllerHelpers::Order at ./spec/lib/spree/core/controller_helpers/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/controller_helpers/order_spec.rb"},{"name":"#associate_user user isn't blank does not calls Spree::Order#associate_user! method","suite":"Spree::Core::ControllerHelpers::Order at ./spec/lib/spree/core/controller_helpers/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/controller_helpers/order_spec.rb"},{"name":"#set_current_order user has some incomplete orders other than current one within the same store calls Spree::Order#merge!","suite":"Spree::Core::ControllerHelpers::Order at ./spec/lib/spree/core/controller_helpers/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/controller_helpers/order_spec.rb"},{"name":"#set_current_order user has some incomplete orders other than current one within different store does not call Spree::Order#merge!","suite":"Spree::Core::ControllerHelpers::Order at ./spec/lib/spree/core/controller_helpers/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:2:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/controller_helpers/order_spec.rb"},{"name":"#set_current_order user has no incomplete orders other than current one does not call Spree::Order#merge!","suite":"Spree::Core::ControllerHelpers::Order at ./spec/lib/spree/core/controller_helpers/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/controller_helpers/order_spec.rb"},{"name":"#current_currency returns current currency","suite":"Spree::Core::ControllerHelpers::Order at ./spec/lib/spree/core/controller_helpers/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/controller_helpers/order_spec.rb"},{"name":"#ip_address returns remote ip","suite":"Spree::Core::ControllerHelpers::Order at ./spec/lib/spree/core/controller_helpers/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/controller_helpers/order_spec.rb"},{"name":"#create_token_cookie creates a new token cookie","suite":"Spree::Core::ControllerHelpers::Order at ./spec/lib/spree/core/controller_helpers/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/controller_helpers/order_spec.rb"},{"name":"#build_searcher returns Spree::Core::Search::Base instance","suite":"Spree::Core::ControllerHelpers::Search at ./spec/lib/spree/core/controller_helpers/search_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/controller_helpers/search_spec.rb"},{"name":"#current_store default store returns current store","suite":"Spree::Core::ControllerHelpers::Store at ./spec/lib/spree/core/controller_helpers/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/controller_helpers/store_spec.rb"},{"name":"#current_store by domain returns current store","suite":"Spree::Core::ControllerHelpers::Store at ./spec/lib/spree/core/controller_helpers/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/controller_helpers/store_spec.rb"},{"name":"#current_store by subdomain returns current store","suite":"Spree::Core::ControllerHelpers::Store at ./spec/lib/spree/core/controller_helpers/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/controller_helpers/store_spec.rb"},{"name":"#ensure_current_store on an object that accepts multiple stores when the object has no stores associated associates the object with the current_store","suite":"Spree::Core::ControllerHelpers::Store at ./spec/lib/spree/core/controller_helpers/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/controller_helpers/store_spec.rb"},{"name":"#ensure_current_store on an object that accepts multiple stores when the object has a store pre assigned adds the new store without removing the original store","suite":"Spree::Core::ControllerHelpers::Store at ./spec/lib/spree/core/controller_helpers/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:2:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/controller_helpers/store_spec.rb"},{"name":"#ensure_current_store on an object that accepts multiple stores when the object has a store and the same store is attempted to be added object is not changed","suite":"Spree::Core::ControllerHelpers::Store at ./spec/lib/spree/core/controller_helpers/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:3:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/controller_helpers/store_spec.rb"},{"name":"#ensure_current_store on a object that accepts a single store when no store is present sets the current_store","suite":"Spree::Core::ControllerHelpers::Store at ./spec/lib/spree/core/controller_helpers/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/controller_helpers/store_spec.rb"},{"name":"#ensure_current_store on a object that accepts a single store when an object already has a store assigned raises an exception","suite":"Spree::Core::ControllerHelpers::Store at ./spec/lib/spree/core/controller_helpers/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:2:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/controller_helpers/store_spec.rb"},{"name":"#ensure_current_store on a object that accepts a single store when an object already has a store assigned and the same store is re-assigned no exception is raised","suite":"Spree::Core::ControllerHelpers::Store at ./spec/lib/spree/core/controller_helpers/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:3:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/controller_helpers/store_spec.rb"},{"name":"#ensure_current_store when object is nil returns nil","suite":"Spree::Core::ControllerHelpers::Store at ./spec/lib/spree/core/controller_helpers/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/controller_helpers/store_spec.rb"},{"name":"#current_price_options when there is a default tax zone when there is no current order returns the default tax zone","suite":"Spree::Core::ControllerHelpers::Store at ./spec/lib/spree/core/controller_helpers/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/controller_helpers/store_spec.rb"},{"name":"#current_price_options when there is a default tax zone when there is no current order sets Spree::Current.zone to the default tax zone","suite":"Spree::Core::ControllerHelpers::Store at ./spec/lib/spree/core/controller_helpers/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1:2\"}}","suiteSourceFile":"core/spec/lib/spree/core/controller_helpers/store_spec.rb"},{"name":"#current_price_options when there is a default tax zone when there is a current order example at ./spec/lib/spree/core/controller_helpers/store_spec.rb:164","suite":"Spree::Core::ControllerHelpers::Store at ./spec/lib/spree/core/controller_helpers/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:2:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/controller_helpers/store_spec.rb"},{"name":"#current_price_options when there is a default tax zone when there is a current order sets Spree::Current.zone to the order tax zone","suite":"Spree::Core::ControllerHelpers::Store at ./spec/lib/spree/core/controller_helpers/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:2:2\"}}","suiteSourceFile":"core/spec/lib/spree/core/controller_helpers/store_spec.rb"},{"name":"#current_price_options when there is no default tax zone when there is no current order when store has a checkout_zone returns the store checkout_zone","suite":"Spree::Core::ControllerHelpers::Store at ./spec/lib/spree/core/controller_helpers/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1:1:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/controller_helpers/store_spec.rb"},{"name":"#current_price_options when there is no default tax zone when there is no current order when store has a checkout_zone sets Spree::Current.zone to the store checkout_zone","suite":"Spree::Core::ControllerHelpers::Store at ./spec/lib/spree/core/controller_helpers/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1:1:2\"}}","suiteSourceFile":"core/spec/lib/spree/core/controller_helpers/store_spec.rb"},{"name":"#current_price_options when there is no default tax zone when there is no current order when store has no checkout_zone returns nil when asked for the current tax zone","suite":"Spree::Core::ControllerHelpers::Store at ./spec/lib/spree/core/controller_helpers/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1:2:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/controller_helpers/store_spec.rb"},{"name":"#current_price_options when there is no default tax zone when there is no current order when store has no checkout_zone sets Spree::Current.zone to nil","suite":"Spree::Core::ControllerHelpers::Store at ./spec/lib/spree/core/controller_helpers/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1:2:2\"}}","suiteSourceFile":"core/spec/lib/spree/core/controller_helpers/store_spec.rb"},{"name":"#current_price_options when there is no default tax zone when there is a current order example at ./spec/lib/spree/core/controller_helpers/store_spec.rb:225","suite":"Spree::Core::ControllerHelpers::Store at ./spec/lib/spree/core/controller_helpers/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:2:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/controller_helpers/store_spec.rb"},{"name":"#current_price_options when there is no default tax zone when there is a current order sets Spree::Current.zone to the order tax zone","suite":"Spree::Core::ControllerHelpers::Store at ./spec/lib/spree/core/controller_helpers/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:2:2\"}}","suiteSourceFile":"core/spec/lib/spree/core/controller_helpers/store_spec.rb"},{"name":"#raise_record_not_found_if_store_is_not_found when the store is not found raises an exception","suite":"Spree::Core::ControllerHelpers::Store at ./spec/lib/spree/core/controller_helpers/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/controller_helpers/store_spec.rb"},{"name":"#raise_record_not_found_if_store_is_not_found with root_domain set does not raise an exception","suite":"Spree::Core::ControllerHelpers::Store at ./spec/lib/spree/core/controller_helpers/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/controller_helpers/store_spec.rb"},{"name":"#raise_record_not_found_if_store_is_not_found when store is found does not raise an exception","suite":"Spree::Core::ControllerHelpers::Store at ./spec/lib/spree/core/controller_helpers/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/controller_helpers/store_spec.rb"},{"name":"#permitted_attributes returns Spree::PermittedAttributes module","suite":"Spree::Core::ControllerHelpers::StrongParameters at ./spec/lib/spree/core/controller_helpers/strong_parameters_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/controller_helpers/strong_parameters_spec.rb"},{"name":"#permitted_payment_attributes returns Array class","suite":"Spree::Core::ControllerHelpers::StrongParameters at ./spec/lib/spree/core/controller_helpers/strong_parameters_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/controller_helpers/strong_parameters_spec.rb"},{"name":"#permitted_checkout_attributes returns Array class","suite":"Spree::Core::ControllerHelpers::StrongParameters at ./spec/lib/spree/core/controller_helpers/strong_parameters_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/controller_helpers/strong_parameters_spec.rb"},{"name":"#permitted_order_attributes returns Array class","suite":"Spree::Core::ControllerHelpers::StrongParameters at ./spec/lib/spree/core/controller_helpers/strong_parameters_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/controller_helpers/strong_parameters_spec.rb"},{"name":"#permitted_product_attributes returns Array class","suite":"Spree::Core::ControllerHelpers::StrongParameters at ./spec/lib/spree/core/controller_helpers/strong_parameters_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/controller_helpers/strong_parameters_spec.rb"},{"name":"#permitted_store_attributes returns Array class","suite":"Spree::Core::ControllerHelpers::StrongParameters at ./spec/lib/spree/core/controller_helpers/strong_parameters_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/controller_helpers/strong_parameters_spec.rb"},{"name":"can import an order number","suite":"Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/importer/order_spec.rb"},{"name":"optionally add completed at","suite":"Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2\"}}","suiteSourceFile":"core/spec/lib/spree/core/importer/order_spec.rb"},{"name":"assigns order[email] over user email to order","suite":"Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3\"}}","suiteSourceFile":"core/spec/lib/spree/core/importer/order_spec.rb"},{"name":"can build an order from API with just line items","suite":"Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5\"}}","suiteSourceFile":"core/spec/lib/spree/core/importer/order_spec.rb"},{"name":"handles line_item building exceptions","suite":"Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6\"}}","suiteSourceFile":"core/spec/lib/spree/core/importer/order_spec.rb"},{"name":"handles line_item updating exceptions","suite":"Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7\"}}","suiteSourceFile":"core/spec/lib/spree/core/importer/order_spec.rb"},{"name":"can build an order from API with variant sku","suite":"Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8\"}}","suiteSourceFile":"core/spec/lib/spree/core/importer/order_spec.rb"},{"name":"handles exceptions when sku is not found","suite":"Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9\"}}","suiteSourceFile":"core/spec/lib/spree/core/importer/order_spec.rb"},{"name":"can build an order from API shipping address","suite":"Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10\"}}","suiteSourceFile":"core/spec/lib/spree/core/importer/order_spec.rb"},{"name":"can build an order from API with country attributes","suite":"Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11\"}}","suiteSourceFile":"core/spec/lib/spree/core/importer/order_spec.rb"},{"name":"handles country lookup exceptions","suite":"Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12\"}}","suiteSourceFile":"core/spec/lib/spree/core/importer/order_spec.rb"},{"name":"can build an order from API with state attributes","suite":"Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13\"}}","suiteSourceFile":"core/spec/lib/spree/core/importer/order_spec.rb"},{"name":"ensures_country_id for country fields","suite":"Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19\"}}","suiteSourceFile":"core/spec/lib/spree/core/importer/order_spec.rb"},{"name":"raises with proper message when can't find country","suite":"Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:20\"}}","suiteSourceFile":"core/spec/lib/spree/core/importer/order_spec.rb"},{"name":"ensures_state_id for state fields","suite":"Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:21\"}}","suiteSourceFile":"core/spec/lib/spree/core/importer/order_spec.rb"},{"name":"handles shipment building exceptions","suite":"Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:23\"}}","suiteSourceFile":"core/spec/lib/spree/core/importer/order_spec.rb"},{"name":"adds adjustments","suite":"Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:24\"}}","suiteSourceFile":"core/spec/lib/spree/core/importer/order_spec.rb"},{"name":"adds line item adjustments from promotion","suite":"Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:25\"}}","suiteSourceFile":"core/spec/lib/spree/core/importer/order_spec.rb"},{"name":"adds line item adjustments from taxation","suite":"Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:26\"}}","suiteSourceFile":"core/spec/lib/spree/core/importer/order_spec.rb"},{"name":"calculates final order total correctly","suite":"Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:27\"}}","suiteSourceFile":"core/spec/lib/spree/core/importer/order_spec.rb"},{"name":"handles adjustment building exceptions","suite":"Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:28\"}}","suiteSourceFile":"core/spec/lib/spree/core/importer/order_spec.rb"},{"name":"builds a payment using state","suite":"Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29\"}}","suiteSourceFile":"core/spec/lib/spree/core/importer/order_spec.rb"},{"name":"builds a payment using status as fallback","suite":"Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:30\"}}","suiteSourceFile":"core/spec/lib/spree/core/importer/order_spec.rb"},{"name":"handles payment building exceptions","suite":"Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:31\"}}","suiteSourceFile":"core/spec/lib/spree/core/importer/order_spec.rb"},{"name":"build a source payment using years and month","suite":"Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:32\"}}","suiteSourceFile":"core/spec/lib/spree/core/importer/order_spec.rb"},{"name":"handles source building exceptions when do not have years and month","suite":"Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:33\"}}","suiteSourceFile":"core/spec/lib/spree/core/importer/order_spec.rb"},{"name":"builds a payment with an optional created_at","suite":"Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:34\"}}","suiteSourceFile":"core/spec/lib/spree/core/importer/order_spec.rb"},{"name":"assigning a user to an order as an admin a user's id is not provided doesn't unassociate the admin from the order","suite":"Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/importer/order_spec.rb"},{"name":"assigning a user to an order as a user does not assign the order to the other user","suite":"Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/importer/order_spec.rb"},{"name":"with a different currency sets the order currency","suite":"Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/importer/order_spec.rb"},{"name":"with a different currency can handle it when a line order price is specified","suite":"Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:2\"}}","suiteSourceFile":"core/spec/lib/spree/core/importer/order_spec.rb"},{"name":"variant not deleted ensures variant id from api","suite":"Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:17:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/importer/order_spec.rb"},{"name":"variant was deleted raise error as variant shouldn't be found","suite":"Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/importer/order_spec.rb"},{"name":"shipments ensures variant exists and is not deleted","suite":"Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:22:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/importer/order_spec.rb"},{"name":"shipments builds them properly","suite":"Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:22:2\"}}","suiteSourceFile":"core/spec/lib/spree/core/importer/order_spec.rb"},{"name":"shipments allocates inventory units to the correct shipments","suite":"Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:22:3\"}}","suiteSourceFile":"core/spec/lib/spree/core/importer/order_spec.rb"},{"name":"shipments accepts admin name for stock location","suite":"Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:22:4\"}}","suiteSourceFile":"core/spec/lib/spree/core/importer/order_spec.rb"},{"name":"shipments raises if can't find stock location","suite":"Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:22:5\"}}","suiteSourceFile":"core/spec/lib/spree/core/importer/order_spec.rb"},{"name":"shipments when a shipping adjustment is present creates the shipping adjustment","suite":"Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:22:6:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/importer/order_spec.rb"},{"name":"shipments when completed_at and shipped_at present builds them properly","suite":"Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:22:7:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/importer/order_spec.rb"},{"name":"raises error clears out order from db","suite":"Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:35:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/importer/order_spec.rb"},{"name":"#prefix returns attribute value from options","suite":"Spree::Core::NumberGenerator at ./spec/lib/spree/core/number_generator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/number_generator_spec.rb"},{"name":"#prefix= writes attribute value","suite":"Spree::Core::NumberGenerator at ./spec/lib/spree/core/number_generator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/number_generator_spec.rb"},{"name":"#length returns attribute value from options","suite":"Spree::Core::NumberGenerator at ./spec/lib/spree/core/number_generator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/number_generator_spec.rb"},{"name":"#length= writes attribute value","suite":"Spree::Core::NumberGenerator at ./spec/lib/spree/core/number_generator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/number_generator_spec.rb"},{"name":"#included generates .number_generator on host returns number generator","suite":"Spree::Core::NumberGenerator at ./spec/lib/spree/core/number_generator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/number_generator_spec.rb"},{"name":"#included generates validation hooks on host when permalink field value is nil on defaults and generated candidate is unique sets permalink field","suite":"Spree::Core::NumberGenerator at ./spec/lib/spree/core/number_generator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1:1:1:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/number_generator_spec.rb"},{"name":"#included generates validation hooks on host when permalink field value is nil on defaults and generated candidate is NOT unique and less than half of the value space taken sets permalink field","suite":"Spree::Core::NumberGenerator at ./spec/lib/spree/core/number_generator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1:1:2:1:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/number_generator_spec.rb"},{"name":"#included generates validation hooks on host when permalink field value is nil on defaults and generated candidate is NOT unique and exactly half of the value space taken sets permalink field","suite":"Spree::Core::NumberGenerator at ./spec/lib/spree/core/number_generator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1:1:2:2:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/number_generator_spec.rb"},{"name":"#included generates validation hooks on host when permalink field value is nil on defaults and generated candidate is NOT unique and more than half of the value space is taken sets permalink field","suite":"Spree::Core::NumberGenerator at ./spec/lib/spree/core/number_generator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1:1:2:3:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/number_generator_spec.rb"},{"name":"#included generates validation hooks on host when permalink field value is nil with length: option and generated candidate is unique sets permalink field","suite":"Spree::Core::NumberGenerator at ./spec/lib/spree/core/number_generator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1:2:1:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/number_generator_spec.rb"},{"name":"#included generates validation hooks on host when permalink field value is nil with length: option and generated candidate is NOT unique and less than half of the value space taken sets permalink field","suite":"Spree::Core::NumberGenerator at ./spec/lib/spree/core/number_generator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1:2:2:1:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/number_generator_spec.rb"},{"name":"#included generates validation hooks on host when permalink field value is nil with length: option and generated candidate is NOT unique and exactly half of the value space taken sets permalink field","suite":"Spree::Core::NumberGenerator at ./spec/lib/spree/core/number_generator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1:2:2:2:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/number_generator_spec.rb"},{"name":"#included generates validation hooks on host when permalink field value is nil with length: option and generated candidate is NOT unique and more than half of the value space is taken sets permalink field","suite":"Spree::Core::NumberGenerator at ./spec/lib/spree/core/number_generator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1:2:2:3:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/number_generator_spec.rb"},{"name":"#included generates validation hooks on host when permalink field value is nil with letters option and generated candidate is unique sets permalink field","suite":"Spree::Core::NumberGenerator at ./spec/lib/spree/core/number_generator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1:3:1:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/number_generator_spec.rb"},{"name":"#included generates validation hooks on host when permalink field value is nil with letters option and generated candidate is NOT unique and less than half of the value space taken sets permalink field","suite":"Spree::Core::NumberGenerator at ./spec/lib/spree/core/number_generator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1:3:2:1:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/number_generator_spec.rb"},{"name":"#included generates validation hooks on host when permalink field value is nil with letters option and generated candidate is NOT unique and exactly half of the value space taken sets permalink field","suite":"Spree::Core::NumberGenerator at ./spec/lib/spree/core/number_generator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1:3:2:2:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/number_generator_spec.rb"},{"name":"#included generates validation hooks on host when permalink field value is nil with letters option and generated candidate is NOT unique and more than half of the value space is taken sets permalink field","suite":"Spree::Core::NumberGenerator at ./spec/lib/spree/core/number_generator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1:3:2:3:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/number_generator_spec.rb"},{"name":"#included generates validation hooks on host when permalink field value is present does not touch field","suite":"Spree::Core::NumberGenerator at ./spec/lib/spree/core/number_generator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:2:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/number_generator_spec.rb"},{"name":"generator method redefinition allows to override generator method","suite":"Spree::Core::NumberGenerator at ./spec/lib/spree/core/number_generator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/number_generator_spec.rb"},{"name":"#initialize accepts config and environment parameters","suite":"Spree::Core::Partials at ./spec/lib/spree/core/partials_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/partials_spec.rb"},{"name":"#initialize sets config and environment","suite":"Spree::Core::Partials at ./spec/lib/spree/core/partials_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/lib/spree/core/partials_spec.rb"},{"name":"#partial_members returns only members ending with _partials","suite":"Spree::Core::Partials at ./spec/lib/spree/core/partials_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/partials_spec.rb"},{"name":"#keys returns partial member names without _partials suffix","suite":"Spree::Core::Partials at ./spec/lib/spree/core/partials_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/partials_spec.rb"},{"name":"dynamically defined methods defines getter methods for all _partials attributes","suite":"Spree::Core::Partials at ./spec/lib/spree/core/partials_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/partials_spec.rb"},{"name":"dynamically defined methods defines setter methods for all _partials attributes","suite":"Spree::Core::Partials at ./spec/lib/spree/core/partials_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2\"}}","suiteSourceFile":"core/spec/lib/spree/core/partials_spec.rb"},{"name":"dynamically defined methods does not define methods for non-partials attributes","suite":"Spree::Core::Partials at ./spec/lib/spree/core/partials_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3\"}}","suiteSourceFile":"core/spec/lib/spree/core/partials_spec.rb"},{"name":"getter methods calls the config with the full _partials attribute name","suite":"Spree::Core::Partials at ./spec/lib/spree/core/partials_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/partials_spec.rb"},{"name":"getter methods works with different partial types","suite":"Spree::Core::Partials at ./spec/lib/spree/core/partials_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2\"}}","suiteSourceFile":"core/spec/lib/spree/core/partials_spec.rb"},{"name":"setter methods sets the config with the full _partials attribute name","suite":"Spree::Core::Partials at ./spec/lib/spree/core/partials_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/partials_spec.rb"},{"name":"setter methods works with different partial types","suite":"Spree::Core::Partials at ./spec/lib/spree/core/partials_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2\"}}","suiteSourceFile":"core/spec/lib/spree/core/partials_spec.rb"},{"name":"#assign assigns a single permission set to a role","suite":"Spree::PermissionConfiguration at ./spec/lib/spree/core/permission_configuration_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/permission_configuration_spec.rb"},{"name":"#assign assigns multiple permission sets to a role","suite":"Spree::PermissionConfiguration at ./spec/lib/spree/core/permission_configuration_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/lib/spree/core/permission_configuration_spec.rb"},{"name":"#assign adds to existing permission sets when called multiple times","suite":"Spree::PermissionConfiguration at ./spec/lib/spree/core/permission_configuration_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/lib/spree/core/permission_configuration_spec.rb"},{"name":"#assign does not duplicate permission sets","suite":"Spree::PermissionConfiguration at ./spec/lib/spree/core/permission_configuration_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","suiteSourceFile":"core/spec/lib/spree/core/permission_configuration_spec.rb"},{"name":"#assign normalizes role names to symbols","suite":"Spree::PermissionConfiguration at ./spec/lib/spree/core/permission_configuration_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","suiteSourceFile":"core/spec/lib/spree/core/permission_configuration_spec.rb"},{"name":"#clear removes all permission sets from a role","suite":"Spree::PermissionConfiguration at ./spec/lib/spree/core/permission_configuration_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/permission_configuration_spec.rb"},{"name":"#clear returns the removed permission sets","suite":"Spree::PermissionConfiguration at ./spec/lib/spree/core/permission_configuration_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","suiteSourceFile":"core/spec/lib/spree/core/permission_configuration_spec.rb"},{"name":"#clear returns nil for non-existent roles","suite":"Spree::PermissionConfiguration at ./spec/lib/spree/core/permission_configuration_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3\"}}","suiteSourceFile":"core/spec/lib/spree/core/permission_configuration_spec.rb"},{"name":"#permission_sets_for returns an empty array for non-configured roles","suite":"Spree::PermissionConfiguration at ./spec/lib/spree/core/permission_configuration_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/permission_configuration_spec.rb"},{"name":"#permission_sets_for returns the assigned permission sets","suite":"Spree::PermissionConfiguration at ./spec/lib/spree/core/permission_configuration_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","suiteSourceFile":"core/spec/lib/spree/core/permission_configuration_spec.rb"},{"name":"#permission_sets_for normalizes role names","suite":"Spree::PermissionConfiguration at ./spec/lib/spree/core/permission_configuration_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3\"}}","suiteSourceFile":"core/spec/lib/spree/core/permission_configuration_spec.rb"},{"name":"#permission_sets_for_roles combines permission sets from multiple roles","suite":"Spree::PermissionConfiguration at ./spec/lib/spree/core/permission_configuration_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/permission_configuration_spec.rb"},{"name":"#permission_sets_for_roles deduplicates permission sets shared across roles","suite":"Spree::PermissionConfiguration at ./spec/lib/spree/core/permission_configuration_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2\"}}","suiteSourceFile":"core/spec/lib/spree/core/permission_configuration_spec.rb"},{"name":"#permission_sets_for_roles returns empty array when no roles have permission sets","suite":"Spree::PermissionConfiguration at ./spec/lib/spree/core/permission_configuration_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3\"}}","suiteSourceFile":"core/spec/lib/spree/core/permission_configuration_spec.rb"},{"name":"#roles returns all configured roles","suite":"Spree::PermissionConfiguration at ./spec/lib/spree/core/permission_configuration_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/permission_configuration_spec.rb"},{"name":"#roles returns empty array when no roles are configured","suite":"Spree::PermissionConfiguration at ./spec/lib/spree/core/permission_configuration_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2\"}}","suiteSourceFile":"core/spec/lib/spree/core/permission_configuration_spec.rb"},{"name":"#role_configured? returns true for configured roles","suite":"Spree::PermissionConfiguration at ./spec/lib/spree/core/permission_configuration_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/permission_configuration_spec.rb"},{"name":"#role_configured? returns false for non-configured roles","suite":"Spree::PermissionConfiguration at ./spec/lib/spree/core/permission_configuration_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2\"}}","suiteSourceFile":"core/spec/lib/spree/core/permission_configuration_spec.rb"},{"name":"#role_configured? returns false for cleared roles","suite":"Spree::PermissionConfiguration at ./spec/lib/spree/core/permission_configuration_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:3\"}}","suiteSourceFile":"core/spec/lib/spree/core/permission_configuration_spec.rb"},{"name":"#reset! clears all role permissions","suite":"Spree::PermissionConfiguration at ./spec/lib/spree/core/permission_configuration_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/permission_configuration_spec.rb"},{"name":"#initialize with all parameters sets all attributes","suite":"Spree::Pricing::Context at ./spec/lib/spree/core/pricing/context_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/pricing/context_spec.rb"},{"name":"#initialize with minimal parameters sets required attributes","suite":"Spree::Pricing::Context at ./spec/lib/spree/core/pricing/context_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/pricing/context_spec.rb"},{"name":"#initialize with minimal parameters defaults store to Spree::Current.store","suite":"Spree::Pricing::Context at ./spec/lib/spree/core/pricing/context_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2\"}}","suiteSourceFile":"core/spec/lib/spree/core/pricing/context_spec.rb"},{"name":"#initialize with minimal parameters defaults zone to Spree::Current.zone","suite":"Spree::Pricing::Context at ./spec/lib/spree/core/pricing/context_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:3\"}}","suiteSourceFile":"core/spec/lib/spree/core/pricing/context_spec.rb"},{"name":"#initialize with minimal parameters defaults user to nil","suite":"Spree::Pricing::Context at ./spec/lib/spree/core/pricing/context_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:4\"}}","suiteSourceFile":"core/spec/lib/spree/core/pricing/context_spec.rb"},{"name":"#initialize with minimal parameters defaults quantity to nil","suite":"Spree::Pricing::Context at ./spec/lib/spree/core/pricing/context_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:5\"}}","suiteSourceFile":"core/spec/lib/spree/core/pricing/context_spec.rb"},{"name":"#initialize with minimal parameters defaults date to current time","suite":"Spree::Pricing::Context at ./spec/lib/spree/core/pricing/context_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:6\"}}","suiteSourceFile":"core/spec/lib/spree/core/pricing/context_spec.rb"},{"name":"#initialize when Spree::Current.store is set uses Spree::Current.store as default","suite":"Spree::Pricing::Context at ./spec/lib/spree/core/pricing/context_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/pricing/context_spec.rb"},{"name":"#initialize when Spree::Current.zone is set uses Spree::Current.zone as default","suite":"Spree::Pricing::Context at ./spec/lib/spree/core/pricing/context_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/pricing/context_spec.rb"},{"name":".from_currency creates a context with variant and currency","suite":"Spree::Pricing::Context at ./spec/lib/spree/core/pricing/context_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/pricing/context_spec.rb"},{"name":".from_currency uses default store","suite":"Spree::Pricing::Context at ./spec/lib/spree/core/pricing/context_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","suiteSourceFile":"core/spec/lib/spree/core/pricing/context_spec.rb"},{"name":".from_order sets variant from parameter","suite":"Spree::Pricing::Context at ./spec/lib/spree/core/pricing/context_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/pricing/context_spec.rb"},{"name":".from_order sets currency from order","suite":"Spree::Pricing::Context at ./spec/lib/spree/core/pricing/context_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","suiteSourceFile":"core/spec/lib/spree/core/pricing/context_spec.rb"},{"name":".from_order sets store from order","suite":"Spree::Pricing::Context at ./spec/lib/spree/core/pricing/context_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3\"}}","suiteSourceFile":"core/spec/lib/spree/core/pricing/context_spec.rb"},{"name":".from_order sets user from order","suite":"Spree::Pricing::Context at ./spec/lib/spree/core/pricing/context_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4\"}}","suiteSourceFile":"core/spec/lib/spree/core/pricing/context_spec.rb"},{"name":".from_order sets order reference","suite":"Spree::Pricing::Context at ./spec/lib/spree/core/pricing/context_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:5\"}}","suiteSourceFile":"core/spec/lib/spree/core/pricing/context_spec.rb"},{"name":".from_order sets quantity from line item","suite":"Spree::Pricing::Context at ./spec/lib/spree/core/pricing/context_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:6\"}}","suiteSourceFile":"core/spec/lib/spree/core/pricing/context_spec.rb"},{"name":".from_order with zone from order tax_zone sets zone from order tax_zone","suite":"Spree::Pricing::Context at ./spec/lib/spree/core/pricing/context_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:7:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/pricing/context_spec.rb"},{"name":".from_order with zone from store checkout_zone sets zone from store checkout_zone","suite":"Spree::Pricing::Context at ./spec/lib/spree/core/pricing/context_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:8:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/pricing/context_spec.rb"},{"name":".from_order with explicit quantity parameter uses the provided quantity","suite":"Spree::Pricing::Context at ./spec/lib/spree/core/pricing/context_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:9:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/pricing/context_spec.rb"},{"name":".from_order when variant is not in order sets quantity to nil","suite":"Spree::Pricing::Context at ./spec/lib/spree/core/pricing/context_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:10:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/pricing/context_spec.rb"},{"name":"#cache_key with all attributes generates a cache key with all components","suite":"Spree::Pricing::Context at ./spec/lib/spree/core/pricing/context_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/pricing/context_spec.rb"},{"name":"#cache_key with minimal attributes generates a cache key with default values from Spree::Current","suite":"Spree::Pricing::Context at ./spec/lib/spree/core/pricing/context_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/pricing/context_spec.rb"},{"name":"#cache_key with some optional attributes includes present optional attributes in correct order","suite":"Spree::Pricing::Context at ./spec/lib/spree/core/pricing/context_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/pricing/context_spec.rb"},{"name":"#add_attribute adds an attribute to a model","suite":"Spree::RansackConfiguration at ./spec/lib/spree/core/ransack_configuration_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/ransack_configuration_spec.rb"},{"name":"#add_attribute adds to existing attributes when called multiple times","suite":"Spree::RansackConfiguration at ./spec/lib/spree/core/ransack_configuration_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/lib/spree/core/ransack_configuration_spec.rb"},{"name":"#add_attribute does not duplicate attributes","suite":"Spree::RansackConfiguration at ./spec/lib/spree/core/ransack_configuration_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/lib/spree/core/ransack_configuration_spec.rb"},{"name":"#add_attribute converts symbol to string","suite":"Spree::RansackConfiguration at ./spec/lib/spree/core/ransack_configuration_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","suiteSourceFile":"core/spec/lib/spree/core/ransack_configuration_spec.rb"},{"name":"#add_association adds an association to a model","suite":"Spree::RansackConfiguration at ./spec/lib/spree/core/ransack_configuration_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/ransack_configuration_spec.rb"},{"name":"#add_association adds to existing associations when called multiple times","suite":"Spree::RansackConfiguration at ./spec/lib/spree/core/ransack_configuration_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","suiteSourceFile":"core/spec/lib/spree/core/ransack_configuration_spec.rb"},{"name":"#add_association does not duplicate associations","suite":"Spree::RansackConfiguration at ./spec/lib/spree/core/ransack_configuration_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3\"}}","suiteSourceFile":"core/spec/lib/spree/core/ransack_configuration_spec.rb"},{"name":"#add_scope adds a scope to a model","suite":"Spree::RansackConfiguration at ./spec/lib/spree/core/ransack_configuration_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/ransack_configuration_spec.rb"},{"name":"#add_scope adds to existing scopes when called multiple times","suite":"Spree::RansackConfiguration at ./spec/lib/spree/core/ransack_configuration_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","suiteSourceFile":"core/spec/lib/spree/core/ransack_configuration_spec.rb"},{"name":"#add_scope does not duplicate scopes","suite":"Spree::RansackConfiguration at ./spec/lib/spree/core/ransack_configuration_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3\"}}","suiteSourceFile":"core/spec/lib/spree/core/ransack_configuration_spec.rb"},{"name":"#custom_attributes_for returns an empty array for models with no custom attributes","suite":"Spree::RansackConfiguration at ./spec/lib/spree/core/ransack_configuration_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/ransack_configuration_spec.rb"},{"name":"#custom_associations_for returns an empty array for models with no custom associations","suite":"Spree::RansackConfiguration at ./spec/lib/spree/core/ransack_configuration_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/ransack_configuration_spec.rb"},{"name":"#custom_scopes_for returns an empty array for models with no custom scopes","suite":"Spree::RansackConfiguration at ./spec/lib/spree/core/ransack_configuration_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/ransack_configuration_spec.rb"},{"name":"#reset! clears all custom configurations","suite":"Spree::RansackConfiguration at ./spec/lib/spree/core/ransack_configuration_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/ransack_configuration_spec.rb"},{"name":"isolation between models keeps configurations separate per model","suite":"Spree::RansackConfiguration at ./spec/lib/spree/core/ransack_configuration_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/ransack_configuration_spec.rb"},{"name":"generate_token generates random token with timestamp","suite":"Spree::Core::TokenGenerator at ./spec/lib/spree/core/token_generator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/token_generator_spec.rb"},{"name":"getter methods provides access to calculators","suite":"Spree environment accessors at ./spec/lib/spree/core_environment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/lib/spree/core_environment_spec.rb"},{"name":"getter methods provides access to validators","suite":"Spree environment accessors at ./spec/lib/spree/core_environment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/lib/spree/core_environment_spec.rb"},{"name":"getter methods provides access to payment_methods","suite":"Spree environment accessors at ./spec/lib/spree/core_environment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/lib/spree/core_environment_spec.rb"},{"name":"getter methods provides access to adjusters","suite":"Spree environment accessors at ./spec/lib/spree/core_environment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","suiteSourceFile":"core/spec/lib/spree/core_environment_spec.rb"},{"name":"getter methods provides access to stock_splitters","suite":"Spree environment accessors at ./spec/lib/spree/core_environment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","suiteSourceFile":"core/spec/lib/spree/core_environment_spec.rb"},{"name":"getter methods provides access to promotions","suite":"Spree environment accessors at ./spec/lib/spree/core_environment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","suiteSourceFile":"core/spec/lib/spree/core_environment_spec.rb"},{"name":"getter methods provides access to line_item_comparison_hooks","suite":"Spree environment accessors at ./spec/lib/spree/core_environment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7\"}}","suiteSourceFile":"core/spec/lib/spree/core_environment_spec.rb"},{"name":"getter methods provides access to data_feed_types","suite":"Spree environment accessors at ./spec/lib/spree/core_environment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8\"}}","suiteSourceFile":"core/spec/lib/spree/core_environment_spec.rb"},{"name":"getter methods provides access to export_types","suite":"Spree environment accessors at ./spec/lib/spree/core_environment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:9\"}}","suiteSourceFile":"core/spec/lib/spree/core_environment_spec.rb"},{"name":"getter methods provides access to import_types","suite":"Spree environment accessors at ./spec/lib/spree/core_environment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:10\"}}","suiteSourceFile":"core/spec/lib/spree/core_environment_spec.rb"},{"name":"getter methods provides access to taxon_rules","suite":"Spree environment accessors at ./spec/lib/spree/core_environment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:11\"}}","suiteSourceFile":"core/spec/lib/spree/core_environment_spec.rb"},{"name":"getter methods provides access to reports","suite":"Spree environment accessors at ./spec/lib/spree/core_environment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:12\"}}","suiteSourceFile":"core/spec/lib/spree/core_environment_spec.rb"},{"name":"getter methods provides access to translatable_resources","suite":"Spree environment accessors at ./spec/lib/spree/core_environment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:13\"}}","suiteSourceFile":"core/spec/lib/spree/core_environment_spec.rb"},{"name":"getter methods provides access to metafields.types","suite":"Spree environment accessors at ./spec/lib/spree/core_environment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:14\"}}","suiteSourceFile":"core/spec/lib/spree/core_environment_spec.rb"},{"name":"getter methods provides access to metafields.enabled_resources","suite":"Spree environment accessors at ./spec/lib/spree/core_environment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:15\"}}","suiteSourceFile":"core/spec/lib/spree/core_environment_spec.rb"},{"name":"getter methods provides access to analytics.events","suite":"Spree environment accessors at ./spec/lib/spree/core_environment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:16\"}}","suiteSourceFile":"core/spec/lib/spree/core_environment_spec.rb"},{"name":"getter methods provides access to analytics.handlers","suite":"Spree environment accessors at ./spec/lib/spree/core_environment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:17\"}}","suiteSourceFile":"core/spec/lib/spree/core_environment_spec.rb"},{"name":"getter methods provides access to integrations","suite":"Spree environment accessors at ./spec/lib/spree/core_environment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:18\"}}","suiteSourceFile":"core/spec/lib/spree/core_environment_spec.rb"},{"name":"setter methods allows setting payment_methods","suite":"Spree environment accessors at ./spec/lib/spree/core_environment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/lib/spree/core_environment_spec.rb"},{"name":"setter methods allows setting stock_splitters","suite":"Spree environment accessors at ./spec/lib/spree/core_environment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","suiteSourceFile":"core/spec/lib/spree/core_environment_spec.rb"},{"name":"setter methods allows setting reports","suite":"Spree environment accessors at ./spec/lib/spree/core_environment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3\"}}","suiteSourceFile":"core/spec/lib/spree/core_environment_spec.rb"},{"name":"nested accessors allows access to calculators.shipping_methods","suite":"Spree environment accessors at ./spec/lib/spree/core_environment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/lib/spree/core_environment_spec.rb"},{"name":"nested accessors allows access to calculators.tax_rates","suite":"Spree environment accessors at ./spec/lib/spree/core_environment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","suiteSourceFile":"core/spec/lib/spree/core_environment_spec.rb"},{"name":"nested accessors allows access to promotions.rules","suite":"Spree environment accessors at ./spec/lib/spree/core_environment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3\"}}","suiteSourceFile":"core/spec/lib/spree/core_environment_spec.rb"},{"name":"nested accessors allows access to promotions.actions","suite":"Spree environment accessors at ./spec/lib/spree/core_environment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4\"}}","suiteSourceFile":"core/spec/lib/spree/core_environment_spec.rb"},{"name":"nested accessors allows access to validators.addresses","suite":"Spree environment accessors at ./spec/lib/spree/core_environment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:5\"}}","suiteSourceFile":"core/spec/lib/spree/core_environment_spec.rb"},{"name":"modifying nested values allows modifying calculators.shipping_methods","suite":"Spree environment accessors at ./spec/lib/spree/core_environment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/lib/spree/core_environment_spec.rb"},{"name":"modifying nested values allows modifying promotions.rules","suite":"Spree environment accessors at ./spec/lib/spree/core_environment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2\"}}","suiteSourceFile":"core/spec/lib/spree/core_environment_spec.rb"},{"name":".user_class when user_class is a Class instance raises an error","suite":"Spree at ./spec/lib/spree/core_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/lib/spree/core_spec.rb"},{"name":".user_class when user_class is a Symbol instance returns the user_class constant","suite":"Spree at ./spec/lib/spree/core_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/lib/spree/core_spec.rb"},{"name":".user_class when user_class is a String instance returns the user_class constant","suite":"Spree at ./spec/lib/spree/core_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","suiteSourceFile":"core/spec/lib/spree/core_spec.rb"},{"name":".user_class when constantize is false returns the user_class as a String","suite":"Spree at ./spec/lib/spree/core_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1\"}}","suiteSourceFile":"core/spec/lib/spree/core_spec.rb"},{"name":".admin_user_class when admin_user_class is nil fallbacks to user_class","suite":"Spree at ./spec/lib/spree/core_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","suiteSourceFile":"core/spec/lib/spree/core_spec.rb"},{"name":".admin_user_class when admin_user_class is a Class instance raises an error","suite":"Spree at ./spec/lib/spree/core_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","suiteSourceFile":"core/spec/lib/spree/core_spec.rb"},{"name":".admin_user_class when admin_user_class is a Symbol instance returns the admin_user_class constant","suite":"Spree at ./spec/lib/spree/core_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:1\"}}","suiteSourceFile":"core/spec/lib/spree/core_spec.rb"},{"name":".admin_user_class when admin_user_class is a String instance returns the admin_user_class constant","suite":"Spree at ./spec/lib/spree/core_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:4:1\"}}","suiteSourceFile":"core/spec/lib/spree/core_spec.rb"},{"name":".admin_user_class when constantize is false returns the admin_user_class as a String","suite":"Spree at ./spec/lib/spree/core_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:5:1\"}}","suiteSourceFile":"core/spec/lib/spree/core_spec.rb"},{"name":".private_storage_service_name when private_storage_service_name is a Symbol instance returns the private_storage_service_name as a symbol","suite":"Spree at ./spec/lib/spree/core_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","suiteSourceFile":"core/spec/lib/spree/core_spec.rb"},{"name":".private_storage_service_name when private_storage_service_name is a String instance returns the private_storage_service_name as a symbol","suite":"Spree at ./spec/lib/spree/core_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","suiteSourceFile":"core/spec/lib/spree/core_spec.rb"},{"name":".private_storage_service_name when private_storage_service_name is set to nil returns the private_storage_service_name as the default service","suite":"Spree at ./spec/lib/spree/core_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3:1\"}}","suiteSourceFile":"core/spec/lib/spree/core_spec.rb"},{"name":".searcher_class when searcher_class is a Class instance raises an error","suite":"Spree at ./spec/lib/spree/core_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1\"}}","suiteSourceFile":"core/spec/lib/spree/core_spec.rb"},{"name":".searcher_class when searcher_class is a Symbol instance returns the searcher_class constant","suite":"Spree at ./spec/lib/spree/core_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1\"}}","suiteSourceFile":"core/spec/lib/spree/core_spec.rb"},{"name":".searcher_class when searcher_class is a String instance returns the searcher_class constant","suite":"Spree at ./spec/lib/spree/core_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3:1\"}}","suiteSourceFile":"core/spec/lib/spree/core_spec.rb"},{"name":".searcher_class when constantize is false returns the searcher_class as a String","suite":"Spree at ./spec/lib/spree/core_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:4:1\"}}","suiteSourceFile":"core/spec/lib/spree/core_spec.rb"},{"name":"#register registers a subscriber for a pattern","suite":"Spree::Events::Registry at ./spec/lib/spree/events/registry_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/lib/spree/events/registry_spec.rb"},{"name":"#register allows multiple subscribers for the same pattern","suite":"Spree::Events::Registry at ./spec/lib/spree/events/registry_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/lib/spree/events/registry_spec.rb"},{"name":"#register stores subscription options","suite":"Spree::Events::Registry at ./spec/lib/spree/events/registry_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/lib/spree/events/registry_spec.rb"},{"name":"#register returns the subscription","suite":"Spree::Events::Registry at ./spec/lib/spree/events/registry_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","suiteSourceFile":"core/spec/lib/spree/events/registry_spec.rb"},{"name":"#unregister removes a specific subscriber","suite":"Spree::Events::Registry at ./spec/lib/spree/events/registry_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/lib/spree/events/registry_spec.rb"},{"name":"#unregister returns false when subscriber not found","suite":"Spree::Events::Registry at ./spec/lib/spree/events/registry_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","suiteSourceFile":"core/spec/lib/spree/events/registry_spec.rb"},{"name":"#unregister keeps other subscribers intact","suite":"Spree::Events::Registry at ./spec/lib/spree/events/registry_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3\"}}","suiteSourceFile":"core/spec/lib/spree/events/registry_spec.rb"},{"name":"#subscriptions_for returns subscriptions for exact match","suite":"Spree::Events::Registry at ./spec/lib/spree/events/registry_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/lib/spree/events/registry_spec.rb"},{"name":"#subscriptions_for returns subscriptions matching wildcard patterns","suite":"Spree::Events::Registry at ./spec/lib/spree/events/registry_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","suiteSourceFile":"core/spec/lib/spree/events/registry_spec.rb"},{"name":"#subscriptions_for returns empty array when no matches","suite":"Spree::Events::Registry at ./spec/lib/spree/events/registry_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3\"}}","suiteSourceFile":"core/spec/lib/spree/events/registry_spec.rb"},{"name":"#subscriptions_for with global wildcard matches all events","suite":"Spree::Events::Registry at ./spec/lib/spree/events/registry_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4:1\"}}","suiteSourceFile":"core/spec/lib/spree/events/registry_spec.rb"},{"name":"#all_subscriptions returns all registered subscriptions","suite":"Spree::Events::Registry at ./spec/lib/spree/events/registry_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/lib/spree/events/registry_spec.rb"},{"name":"#all_subscriptions returns a copy of the subscriptions","suite":"Spree::Events::Registry at ./spec/lib/spree/events/registry_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2\"}}","suiteSourceFile":"core/spec/lib/spree/events/registry_spec.rb"},{"name":"#patterns returns unique patterns","suite":"Spree::Events::Registry at ./spec/lib/spree/events/registry_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","suiteSourceFile":"core/spec/lib/spree/events/registry_spec.rb"},{"name":"#clear! removes all subscriptions","suite":"Spree::Events::Registry at ./spec/lib/spree/events/registry_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","suiteSourceFile":"core/spec/lib/spree/events/registry_spec.rb"},{"name":"#registered? returns true for registered patterns","suite":"Spree::Events::Registry at ./spec/lib/spree/events/registry_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","suiteSourceFile":"core/spec/lib/spree/events/registry_spec.rb"},{"name":"#registered? returns false for unregistered patterns","suite":"Spree::Events::Registry at ./spec/lib/spree/events/registry_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2\"}}","suiteSourceFile":"core/spec/lib/spree/events/registry_spec.rb"},{"name":"thread safety handles concurrent registrations","suite":"Spree::Events::Registry at ./spec/lib/spree/events/registry_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1\"}}","suiteSourceFile":"core/spec/lib/spree/events/registry_spec.rb"},{"name":".publish publishes an event","suite":"Spree::Events at ./spec/lib/spree/events_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/lib/spree/events_spec.rb"},{"name":".publish notifies subscribers synchronously when async: false","suite":"Spree::Events at ./spec/lib/spree/events_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/lib/spree/events_spec.rb"},{"name":".subscribe subscribes with a block","suite":"Spree::Events at ./spec/lib/spree/events_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/lib/spree/events_spec.rb"},{"name":".subscribe subscribes with a class","suite":"Spree::Events at ./spec/lib/spree/events_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","suiteSourceFile":"core/spec/lib/spree/events_spec.rb"},{"name":".subscribe supports pattern matching with wildcards","suite":"Spree::Events at ./spec/lib/spree/events_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3\"}}","suiteSourceFile":"core/spec/lib/spree/events_spec.rb"},{"name":".subscribe supports global wildcard","suite":"Spree::Events at ./spec/lib/spree/events_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:4\"}}","suiteSourceFile":"core/spec/lib/spree/events_spec.rb"},{"name":".subscribe raises error when no subscriber provided","suite":"Spree::Events at ./spec/lib/spree/events_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:5\"}}","suiteSourceFile":"core/spec/lib/spree/events_spec.rb"},{"name":".unsubscribe removes a subscriber","suite":"Spree::Events at ./spec/lib/spree/events_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/lib/spree/events_spec.rb"},{"name":".patterns returns all registered patterns","suite":"Spree::Events at ./spec/lib/spree/events_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/lib/spree/events_spec.rb"},{"name":".subscriptions returns all subscriptions","suite":"Spree::Events at ./spec/lib/spree/events_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","suiteSourceFile":"core/spec/lib/spree/events_spec.rb"},{"name":".disable disables events within the block","suite":"Spree::Events at ./spec/lib/spree/events_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","suiteSourceFile":"core/spec/lib/spree/events_spec.rb"},{"name":".disable restores enabled state after the block","suite":"Spree::Events at ./spec/lib/spree/events_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2\"}}","suiteSourceFile":"core/spec/lib/spree/events_spec.rb"},{"name":".disable handles nested disable blocks","suite":"Spree::Events at ./spec/lib/spree/events_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:3\"}}","suiteSourceFile":"core/spec/lib/spree/events_spec.rb"},{"name":".enabled? returns true by default","suite":"Spree::Events at ./spec/lib/spree/events_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","suiteSourceFile":"core/spec/lib/spree/events_spec.rb"},{"name":".enabled? returns false when disabled","suite":"Spree::Events at ./spec/lib/spree/events_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2\"}}","suiteSourceFile":"core/spec/lib/spree/events_spec.rb"},{"name":".reset! clears all subscriptions","suite":"Spree::Events at ./spec/lib/spree/events_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1\"}}","suiteSourceFile":"core/spec/lib/spree/events_spec.rb"},{"name":"multiple subscribers notifies all matching subscribers","suite":"Spree::Events at ./spec/lib/spree/events_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1\"}}","suiteSourceFile":"core/spec/lib/spree/events_spec.rb"},{"name":"multiple subscribers handles mixed pattern and exact subscribers","suite":"Spree::Events at ./spec/lib/spree/events_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:2\"}}","suiteSourceFile":"core/spec/lib/spree/events_spec.rb"},{"name":".resolve_subscriber returns the subscriber directly in production","suite":"Spree::Events at ./spec/lib/spree/events_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1\"}}","suiteSourceFile":"core/spec/lib/spree/events_spec.rb"},{"name":".resolve_subscriber resolves subscriber by name in development","suite":"Spree::Events at ./spec/lib/spree/events_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:2\"}}","suiteSourceFile":"core/spec/lib/spree/events_spec.rb"},{"name":".resolve_subscriber handles string class names","suite":"Spree::Events at ./spec/lib/spree/events_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:3\"}}","suiteSourceFile":"core/spec/lib/spree/events_spec.rb"},{"name":".resolve_subscriber returns nil for invalid class names","suite":"Spree::Events at ./spec/lib/spree/events_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:4\"}}","suiteSourceFile":"core/spec/lib/spree/events_spec.rb"},{"name":".resolve_subscriber returns nil for anonymous classes","suite":"Spree::Events at ./spec/lib/spree/events_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:5\"}}","suiteSourceFile":"core/spec/lib/spree/events_spec.rb"},{"name":".register_subscribers! registers subscribers from Spree.subscribers","suite":"Spree::Events at ./spec/lib/spree/events_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1\"}}","suiteSourceFile":"core/spec/lib/spree/events_spec.rb"},{"name":".register_subscribers! resolves subscriber classes fresh (for code reload support)","suite":"Spree::Events at ./spec/lib/spree/events_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2\"}}","suiteSourceFile":"core/spec/lib/spree/events_spec.rb"},{"name":".parse with decimal point captures the proper amount for a formatted price","suite":"Spree::LocalizedNumber at ./spec/lib/spree/localized_number_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/lib/spree/localized_number_spec.rb"},{"name":".parse with decimal comma captures the proper amount for a formatted price","suite":"Spree::LocalizedNumber at ./spec/lib/spree/localized_number_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/lib/spree/localized_number_spec.rb"},{"name":".parse with a numeric price uses the price as is","suite":"Spree::LocalizedNumber at ./spec/lib/spree/localized_number_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","suiteSourceFile":"core/spec/lib/spree/localized_number_spec.rb"},{"name":".parse string argument is not modified","suite":"Spree::LocalizedNumber at ./spec/lib/spree/localized_number_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1\"}}","suiteSourceFile":"core/spec/lib/spree/localized_number_spec.rb"},{"name":".parse with empty string returns 0","suite":"Spree::LocalizedNumber at ./spec/lib/spree/localized_number_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5:1\"}}","suiteSourceFile":"core/spec/lib/spree/localized_number_spec.rb"},{"name":"warns about missing migrations","suite":"Spree::Migrations at ./spec/lib/spree/migrations_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","suiteSourceFile":"core/spec/lib/spree/migrations_spec.rb"},{"name":"no missing migrations says nothing","suite":"Spree::Migrations at ./spec/lib/spree/migrations_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/lib/spree/migrations_spec.rb"},{"name":"formats correctly","suite":"Spree::Money at ./spec/lib/spree/money_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","suiteSourceFile":"core/spec/lib/spree/money_spec.rb"},{"name":"can get cents","suite":"Spree::Money at ./spec/lib/spree/money_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2\"}}","suiteSourceFile":"core/spec/lib/spree/money_spec.rb"},{"name":"can get currency","suite":"Spree::Money at ./spec/lib/spree/money_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3\"}}","suiteSourceFile":"core/spec/lib/spree/money_spec.rb"},{"name":"with currency passed in option","suite":"Spree::Money at ./spec/lib/spree/money_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/lib/spree/money_spec.rb"},{"name":"hide cents hides cents suffix","suite":"Spree::Money at ./spec/lib/spree/money_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","suiteSourceFile":"core/spec/lib/spree/money_spec.rb"},{"name":"hide cents shows cents suffix","suite":"Spree::Money at ./spec/lib/spree/money_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2\"}}","suiteSourceFile":"core/spec/lib/spree/money_spec.rb"},{"name":"currency parameter when currency is specified in Canadian Dollars uses the currency param over the global configuration","suite":"Spree::Money at ./spec/lib/spree/money_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1:1\"}}","suiteSourceFile":"core/spec/lib/spree/money_spec.rb"},{"name":"currency parameter when currency is specified in Japanese Yen uses the currency param over the global configuration","suite":"Spree::Money at ./spec/lib/spree/money_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2:1\"}}","suiteSourceFile":"core/spec/lib/spree/money_spec.rb"},{"name":"format passed in option","suite":"Spree::Money at ./spec/lib/spree/money_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","suiteSourceFile":"core/spec/lib/spree/money_spec.rb"},{"name":"sign before symbol defaults to -$10.00","suite":"Spree::Money at ./spec/lib/spree/money_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1\"}}","suiteSourceFile":"core/spec/lib/spree/money_spec.rb"},{"name":"sign before symbol passed in option","suite":"Spree::Money at ./spec/lib/spree/money_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2\"}}","suiteSourceFile":"core/spec/lib/spree/money_spec.rb"},{"name":"JPY formats correctly","suite":"Spree::Money at ./spec/lib/spree/money_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1\"}}","suiteSourceFile":"core/spec/lib/spree/money_spec.rb"},{"name":"DKK formats correctly","suite":"Spree::Money at ./spec/lib/spree/money_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1\"}}","suiteSourceFile":"core/spec/lib/spree/money_spec.rb"},{"name":"EUR formats as plain by default","suite":"Spree::Money at ./spec/lib/spree/money_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1\"}}","suiteSourceFile":"core/spec/lib/spree/money_spec.rb"},{"name":"EUR formats as HTML if asked (nicely) to","suite":"Spree::Money at ./spec/lib/spree/money_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2\"}}","suiteSourceFile":"core/spec/lib/spree/money_spec.rb"},{"name":"EUR formats as HTML with currency","suite":"Spree::Money at ./spec/lib/spree/money_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:3\"}}","suiteSourceFile":"core/spec/lib/spree/money_spec.rb"},{"name":"Money formatting rules #decimal_mark uses decimal mark set in Monetize gem","suite":"Spree::Money at ./spec/lib/spree/money_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:1:1\"}}","suiteSourceFile":"core/spec/lib/spree/money_spec.rb"},{"name":"Money formatting rules #decimal_mark favors decimal mark set in default_formatting_rules","suite":"Spree::Money at ./spec/lib/spree/money_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:1:2\"}}","suiteSourceFile":"core/spec/lib/spree/money_spec.rb"},{"name":"Money formatting rules #decimal_mark favors decimal mark passed in as a parameter on initialization","suite":"Spree::Money at ./spec/lib/spree/money_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:1:3\"}}","suiteSourceFile":"core/spec/lib/spree/money_spec.rb"},{"name":"Money formatting rules #thousands_separator uses thousands separator set in Monetize gem","suite":"Spree::Money at ./spec/lib/spree/money_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:2:1\"}}","suiteSourceFile":"core/spec/lib/spree/money_spec.rb"},{"name":"Money formatting rules #thousands_separator favors decimal mark set in default_formatting_rules","suite":"Spree::Money at ./spec/lib/spree/money_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:2:2\"}}","suiteSourceFile":"core/spec/lib/spree/money_spec.rb"},{"name":"Money formatting rules #thousands_separator favors decimal mark passed in as a parameter on initialization","suite":"Spree::Money at ./spec/lib/spree/money_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:2:3\"}}","suiteSourceFile":"core/spec/lib/spree/money_spec.rb"},{"name":"#amount_in_cents when currency is USD example at ./spec/lib/spree/money_spec.rb:170","suite":"Spree::Money at ./spec/lib/spree/money_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:1:1\"}}","suiteSourceFile":"core/spec/lib/spree/money_spec.rb"},{"name":"#amount_in_cents when currency is JPY example at ./spec/lib/spree/money_spec.rb:170","suite":"Spree::Money at ./spec/lib/spree/money_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:2:1\"}}","suiteSourceFile":"core/spec/lib/spree/money_spec.rb"},{"name":"#amount_in_cents when currency is KRW example at ./spec/lib/spree/money_spec.rb:170","suite":"Spree::Money at ./spec/lib/spree/money_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:3:1\"}}","suiteSourceFile":"core/spec/lib/spree/money_spec.rb"},{"name":"#as_json returns the expected string","suite":"Spree::Money at ./spec/lib/spree/money_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:1\"}}","suiteSourceFile":"core/spec/lib/spree/money_spec.rb"},{"name":"#resolve when no price lists exist returns the base price","suite":"Spree::Pricing::Resolver at ./spec/lib/spree/pricing/resolver_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/lib/spree/pricing/resolver_spec.rb"},{"name":"#resolve when no matching price list exists falls back to base price","suite":"Spree::Pricing::Resolver at ./spec/lib/spree/pricing/resolver_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/lib/spree/pricing/resolver_spec.rb"},{"name":"#resolve with applicable price list returns the price list price","suite":"Spree::Pricing::Resolver at ./spec/lib/spree/pricing/resolver_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","suiteSourceFile":"core/spec/lib/spree/pricing/resolver_spec.rb"},{"name":"#resolve with multiple applicable price lists returns the first position price list price","suite":"Spree::Pricing::Resolver at ./spec/lib/spree/pricing/resolver_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1\"}}","suiteSourceFile":"core/spec/lib/spree/pricing/resolver_spec.rb"},{"name":"#resolve with date range price list returns price list price when within date range","suite":"Spree::Pricing::Resolver at ./spec/lib/spree/pricing/resolver_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5:1\"}}","suiteSourceFile":"core/spec/lib/spree/pricing/resolver_spec.rb"},{"name":"#resolve with date range price list returns base price when outside date range","suite":"Spree::Pricing::Resolver at ./spec/lib/spree/pricing/resolver_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5:2\"}}","suiteSourceFile":"core/spec/lib/spree/pricing/resolver_spec.rb"},{"name":"#resolve with volume-based pricing returns bulk price when quantity threshold met","suite":"Spree::Pricing::Resolver at ./spec/lib/spree/pricing/resolver_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6:1\"}}","suiteSourceFile":"core/spec/lib/spree/pricing/resolver_spec.rb"},{"name":"#resolve with volume-based pricing returns base price when quantity threshold not met","suite":"Spree::Pricing::Resolver at ./spec/lib/spree/pricing/resolver_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6:2\"}}","suiteSourceFile":"core/spec/lib/spree/pricing/resolver_spec.rb"},{"name":"#resolve when no base price exists returns a new unpersisted price object","suite":"Spree::Pricing::Resolver at ./spec/lib/spree/pricing/resolver_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7:1\"}}","suiteSourceFile":"core/spec/lib/spree/pricing/resolver_spec.rb"},{"name":"#resolve with price list from different store does not return price from other store price list","suite":"Spree::Pricing::Resolver at ./spec/lib/spree/pricing/resolver_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8:1\"}}","suiteSourceFile":"core/spec/lib/spree/pricing/resolver_spec.rb"},{"name":"noncallable thing passed to run raises NonCallablePassedToRun","suite":"Spree::ServiceModule at ./spec/lib/spree/service_module_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/lib/spree/service_module_spec.rb"},{"name":"unimplemented method raises MethodNotImplemented","suite":"Spree::ServiceModule at ./spec/lib/spree/service_module_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/lib/spree/service_module_spec.rb"},{"name":"unimplemented method returns message in exception","suite":"Spree::ServiceModule at ./spec/lib/spree/service_module_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","suiteSourceFile":"core/spec/lib/spree/service_module_spec.rb"},{"name":"non wrapped value raises WrongDataPassed","suite":"Spree::ServiceModule at ./spec/lib/spree/service_module_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/lib/spree/service_module_spec.rb"},{"name":"non wrapped value returns message in exception","suite":"Spree::ServiceModule at ./spec/lib/spree/service_module_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","suiteSourceFile":"core/spec/lib/spree/service_module_spec.rb"},{"name":"non wrapped value in last method raises WrongDataPassed","suite":"Spree::ServiceModule at ./spec/lib/spree/service_module_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/lib/spree/service_module_spec.rb"},{"name":"first method failed returns result with success? false","suite":"Spree::ServiceModule at ./spec/lib/spree/service_module_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","suiteSourceFile":"core/spec/lib/spree/service_module_spec.rb"},{"name":"first method failed returns result with failure? true","suite":"Spree::ServiceModule at ./spec/lib/spree/service_module_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2\"}}","suiteSourceFile":"core/spec/lib/spree/service_module_spec.rb"},{"name":"first method failed returns value from first failed method","suite":"Spree::ServiceModule at ./spec/lib/spree/service_module_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3\"}}","suiteSourceFile":"core/spec/lib/spree/service_module_spec.rb"},{"name":"first method failed returns result which is instance of Result","suite":"Spree::ServiceModule at ./spec/lib/spree/service_module_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:4\"}}","suiteSourceFile":"core/spec/lib/spree/service_module_spec.rb"},{"name":"first method failed doesn't call second method","suite":"Spree::ServiceModule at ./spec/lib/spree/service_module_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:5\"}}","suiteSourceFile":"core/spec/lib/spree/service_module_spec.rb"},{"name":"success returns result with success? true","suite":"Spree::ServiceModule at ./spec/lib/spree/service_module_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","suiteSourceFile":"core/spec/lib/spree/service_module_spec.rb"},{"name":"success returns result with failure? false","suite":"Spree::ServiceModule at ./spec/lib/spree/service_module_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2\"}}","suiteSourceFile":"core/spec/lib/spree/service_module_spec.rb"},{"name":"success returns value from last method","suite":"Spree::ServiceModule at ./spec/lib/spree/service_module_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:3\"}}","suiteSourceFile":"core/spec/lib/spree/service_module_spec.rb"},{"name":"success calls second method","suite":"Spree::ServiceModule at ./spec/lib/spree/service_module_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:4\"}}","suiteSourceFile":"core/spec/lib/spree/service_module_spec.rb"},{"name":"success passes input from call to first run method","suite":"Spree::ServiceModule at ./spec/lib/spree/service_module_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:5\"}}","suiteSourceFile":"core/spec/lib/spree/service_module_spec.rb"},{"name":"success passes empty hash if input was not provided","suite":"Spree::ServiceModule at ./spec/lib/spree/service_module_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:6\"}}","suiteSourceFile":"core/spec/lib/spree/service_module_spec.rb"},{"name":"not compatible params passed as result raises exception","suite":"Spree::ServiceModule at ./spec/lib/spree/service_module_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","suiteSourceFile":"core/spec/lib/spree/service_module_spec.rb"},{"name":"draft, make_active_at in the past -> active","suite":"core:activate_products at ./spec/lib/tasks/core_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2\"}}","suiteSourceFile":"core/spec/lib/tasks/core_spec.rb"},{"name":"draft, make_active_at in the future -> draft","suite":"core:activate_products at ./spec/lib/tasks/core_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3\"}}","suiteSourceFile":"core/spec/lib/tasks/core_spec.rb"},{"name":"archived, make_active_at in the past -> archived","suite":"core:activate_products at ./spec/lib/tasks/core_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4\"}}","suiteSourceFile":"core/spec/lib/tasks/core_spec.rb"},{"name":"archived, make_active_at in the future -> archived","suite":"core:activate_products at ./spec/lib/tasks/core_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5\"}}","suiteSourceFile":"core/spec/lib/tasks/core_spec.rb"},{"name":"#prerequisites example at ./spec/lib/tasks/core_spec.rb:9","suite":"core:activate_products at ./spec/lib/tasks/core_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/lib/tasks/core_spec.rb"},{"name":"migrates newsletter subscribers","suite":"core:migrate_newsletter_subscribers at ./spec/lib/tasks/core_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:1\"}}","suiteSourceFile":"core/spec/lib/tasks/core_spec.rb"},{"name":"draft, discontinue_on in the past -> archived","suite":"core:archive_products at ./spec/lib/tasks/core_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"3:2\"}}","suiteSourceFile":"core/spec/lib/tasks/core_spec.rb"},{"name":"draft, discontinue_on in the future -> draft","suite":"core:archive_products at ./spec/lib/tasks/core_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"3:3\"}}","suiteSourceFile":"core/spec/lib/tasks/core_spec.rb"},{"name":"active, discontinue_on in the past -> archived","suite":"core:archive_products at ./spec/lib/tasks/core_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"3:4\"}}","suiteSourceFile":"core/spec/lib/tasks/core_spec.rb"},{"name":"active, discontinue_on in the future -> active","suite":"core:archive_products at ./spec/lib/tasks/core_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"3:5\"}}","suiteSourceFile":"core/spec/lib/tasks/core_spec.rb"},{"name":"#prerequisites example at ./spec/lib/tasks/core_spec.rb:70","suite":"core:archive_products at ./spec/lib/tasks/core_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"3:1:1\"}}","suiteSourceFile":"core/spec/lib/tasks/core_spec.rb"},{"name":"#prerequisites example at ./spec/lib/tasks/exchanges_spec.rb:7","suite":"exchanges:charge_unreturned_items at ./spec/lib/tasks/exchanges_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/lib/tasks/exchanges_spec.rb"},{"name":"there are no unreturned items example at ./spec/lib/tasks/exchanges_spec.rb:11","suite":"exchanges:charge_unreturned_items at ./spec/lib/tasks/exchanges_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/lib/tasks/exchanges_spec.rb"},{"name":"there are unreturned items fewer than the config allowed days have passed does not create a new order","suite":"exchanges:charge_unreturned_items at ./spec/lib/tasks/exchanges_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","suiteSourceFile":"core/spec/lib/tasks/exchanges_spec.rb"},{"name":"there are unreturned items more than the config allowed days have passed creates a new completed order","suite":"exchanges:charge_unreturned_items at ./spec/lib/tasks/exchanges_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","suiteSourceFile":"core/spec/lib/tasks/exchanges_spec.rb"},{"name":"there are unreturned items more than the config allowed days have passed moves the shipment for the unreturned items to the new order","suite":"exchanges:charge_unreturned_items at ./spec/lib/tasks/exchanges_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:2\"}}","suiteSourceFile":"core/spec/lib/tasks/exchanges_spec.rb"},{"name":"there are unreturned items more than the config allowed days have passed creates line items on the order for the unreturned items","suite":"exchanges:charge_unreturned_items at ./spec/lib/tasks/exchanges_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:3\"}}","suiteSourceFile":"core/spec/lib/tasks/exchanges_spec.rb"},{"name":"there are unreturned items more than the config allowed days have passed associates the exchanges inventory units with the new line items","suite":"exchanges:charge_unreturned_items at ./spec/lib/tasks/exchanges_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:4\"}}","suiteSourceFile":"core/spec/lib/tasks/exchanges_spec.rb"},{"name":"there are unreturned items more than the config allowed days have passed uses the credit card from the previous order","suite":"exchanges:charge_unreturned_items at ./spec/lib/tasks/exchanges_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:5\"}}","suiteSourceFile":"core/spec/lib/tasks/exchanges_spec.rb"},{"name":"there are unreturned items more than the config allowed days have passed authorizes the order for the full amount of the unreturned items including taxes","suite":"exchanges:charge_unreturned_items at ./spec/lib/tasks/exchanges_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:6\"}}","suiteSourceFile":"core/spec/lib/tasks/exchanges_spec.rb"},{"name":"there are unreturned items more than the config allowed days have passed does not attempt to create a new order for the item more than once","suite":"exchanges:charge_unreturned_items at ./spec/lib/tasks/exchanges_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:7\"}}","suiteSourceFile":"core/spec/lib/tasks/exchanges_spec.rb"},{"name":"there are unreturned items more than the config allowed days have passed associates the store of the original order with the exchange order","suite":"exchanges:charge_unreturned_items at ./spec/lib/tasks/exchanges_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:8\"}}","suiteSourceFile":"core/spec/lib/tasks/exchanges_spec.rb"},{"name":"there are unreturned items more than the config allowed days have passed there is no card from the previous order attempts to use the user's default card","suite":"exchanges:charge_unreturned_items at ./spec/lib/tasks/exchanges_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:9:1\"}}","suiteSourceFile":"core/spec/lib/tasks/exchanges_spec.rb"},{"name":"there are unreturned items more than the config allowed days have passed it is unable to authorize the credit card raises an error with the order","suite":"exchanges:charge_unreturned_items at ./spec/lib/tasks/exchanges_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:10:1\"}}","suiteSourceFile":"core/spec/lib/tasks/exchanges_spec.rb"},{"name":"there are unreturned items more than the config allowed days have passed the exchange inventory unit is not shipped does not create a new order","suite":"exchanges:charge_unreturned_items at ./spec/lib/tasks/exchanges_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:11:1\"}}","suiteSourceFile":"core/spec/lib/tasks/exchanges_spec.rb"},{"name":"there are unreturned items more than the config allowed days have passed the exchange inventory unit has been returned does not create a new order","suite":"exchanges:charge_unreturned_items at ./spec/lib/tasks/exchanges_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:12:1\"}}","suiteSourceFile":"core/spec/lib/tasks/exchanges_spec.rb"},{"name":"#export_done renders the subject","suite":"Spree::ExportMailer at ./spec/mailers/spree/export_mailer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/mailers/spree/export_mailer_spec.rb"},{"name":"#export_done sends to the correct recipient","suite":"Spree::ExportMailer at ./spec/mailers/spree/export_mailer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/mailers/spree/export_mailer_spec.rb"},{"name":"#export_done includes export attachment filename","suite":"Spree::ExportMailer at ./spec/mailers/spree/export_mailer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/mailers/spree/export_mailer_spec.rb"},{"name":"#export_done includes download link in the body","suite":"Spree::ExportMailer at ./spec/mailers/spree/export_mailer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","suiteSourceFile":"core/spec/mailers/spree/export_mailer_spec.rb"},{"name":"#invitation_email renders the subject","suite":"Spree::InvitationMailer at ./spec/mailers/spree/invitation_mailer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/mailers/spree/invitation_mailer_spec.rb"},{"name":"#invitation_email sends to the correct recipient","suite":"Spree::InvitationMailer at ./spec/mailers/spree/invitation_mailer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/mailers/spree/invitation_mailer_spec.rb"},{"name":"#invitation_email sends from the store mail from address","suite":"Spree::InvitationMailer at ./spec/mailers/spree/invitation_mailer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/mailers/spree/invitation_mailer_spec.rb"},{"name":"#invitation_email sets reply-to as the store mail from address","suite":"Spree::InvitationMailer at ./spec/mailers/spree/invitation_mailer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","suiteSourceFile":"core/spec/mailers/spree/invitation_mailer_spec.rb"},{"name":"#invitation_email includes the invitation link in the body","suite":"Spree::InvitationMailer at ./spec/mailers/spree/invitation_mailer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","suiteSourceFile":"core/spec/mailers/spree/invitation_mailer_spec.rb"},{"name":"#invitation_accepted renders the subject","suite":"Spree::InvitationMailer at ./spec/mailers/spree/invitation_mailer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/mailers/spree/invitation_mailer_spec.rb"},{"name":"#invitation_accepted includes the invitee name in the body","suite":"Spree::InvitationMailer at ./spec/mailers/spree/invitation_mailer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","suiteSourceFile":"core/spec/mailers/spree/invitation_mailer_spec.rb"},{"name":"#invitation_accepted sends to the correct recipient","suite":"Spree::InvitationMailer at ./spec/mailers/spree/invitation_mailer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3\"}}","suiteSourceFile":"core/spec/mailers/spree/invitation_mailer_spec.rb"},{"name":"#invitation_accepted sends from the store mail from address","suite":"Spree::InvitationMailer at ./spec/mailers/spree/invitation_mailer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:4\"}}","suiteSourceFile":"core/spec/mailers/spree/invitation_mailer_spec.rb"},{"name":"#invitation_accepted sets reply-to as the store mail from address","suite":"Spree::InvitationMailer at ./spec/mailers/spree/invitation_mailer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:5\"}}","suiteSourceFile":"core/spec/mailers/spree/invitation_mailer_spec.rb"},{"name":"#report_done renders the subject","suite":"Spree::ReportMailer at ./spec/mailers/spree/report_mailer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/mailers/spree/report_mailer_spec.rb"},{"name":"#report_done sends to the correct recipient","suite":"Spree::ReportMailer at ./spec/mailers/spree/report_mailer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/mailers/spree/report_mailer_spec.rb"},{"name":"#report_done sends from the store mail from address","suite":"Spree::ReportMailer at ./spec/mailers/spree/report_mailer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/mailers/spree/report_mailer_spec.rb"},{"name":"#report_done sets reply-to as the store mail from address","suite":"Spree::ReportMailer at ./spec/mailers/spree/report_mailer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","suiteSourceFile":"core/spec/mailers/spree/report_mailer_spec.rb"},{"name":"#report_done includes download link in the body","suite":"Spree::ReportMailer at ./spec/mailers/spree/report_mailer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","suiteSourceFile":"core/spec/mailers/spree/report_mailer_spec.rb"},{"name":"included behavior creates the image_alt method","suite":"Spree::HasImageAltText at ./spec/models/concerns/spree/has_image_alt_text_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/concerns/spree/has_image_alt_text_spec.rb"},{"name":"included behavior returns preference value when present","suite":"Spree::HasImageAltText at ./spec/models/concerns/spree/has_image_alt_text_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/models/concerns/spree/has_image_alt_text_spec.rb"},{"name":"included behavior falls back when preference is whitespace-only","suite":"Spree::HasImageAltText at ./spec/models/concerns/spree/has_image_alt_text_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/models/concerns/spree/has_image_alt_text_spec.rb"},{"name":"included behavior returns filename-based alt when preference is blank but asset has filename","suite":"Spree::HasImageAltText at ./spec/models/concerns/spree/has_image_alt_text_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","suiteSourceFile":"core/spec/models/concerns/spree/has_image_alt_text_spec.rb"},{"name":"included behavior returns \"Image\" as fallback when no preference and no asset","suite":"Spree::HasImageAltText at ./spec/models/concerns/spree/has_image_alt_text_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","suiteSourceFile":"core/spec/models/concerns/spree/has_image_alt_text_spec.rb"},{"name":"included behavior when asset has no filename returns \"Image\" fallback","suite":"Spree::HasImageAltText at ./spec/models/concerns/spree/has_image_alt_text_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6:1\"}}","suiteSourceFile":"core/spec/models/concerns/spree/has_image_alt_text_spec.rb"},{"name":"included behavior filename processing correctly converts various filename formats","suite":"Spree::HasImageAltText at ./spec/models/concerns/spree/has_image_alt_text_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7:1\"}}","suiteSourceFile":"core/spec/models/concerns/spree/has_image_alt_text_spec.rb"},{"name":"#generate_url when gravity is not set to centre attachment.variant should receive the unchanged value of gravity","suite":"Spree::ImageMethods at ./spec/models/concerns/spree/image_methods_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/models/concerns/spree/image_methods_spec.rb"},{"name":"#generate_url when gravity is set to centre attachment.variant should receive \"gravity: center\" when image processing variant is nil","suite":"Spree::ImageMethods at ./spec/models/concerns/spree/image_methods_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/models/concerns/spree/image_methods_spec.rb"},{"name":"#generate_url when gravity is set to centre should return center when image processing variant is mini magick","suite":"Spree::ImageMethods at ./spec/models/concerns/spree/image_methods_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2\"}}","suiteSourceFile":"core/spec/models/concerns/spree/image_methods_spec.rb"},{"name":"#generate_url when gravity is set to centre should return centre when image processing variant is VIPS","suite":"Spree::ImageMethods at ./spec/models/concerns/spree/image_methods_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:3\"}}","suiteSourceFile":"core/spec/models/concerns/spree/image_methods_spec.rb"},{"name":"associations has many metafields","suite":"Spree::Metafields at ./spec/models/concerns/spree/metafields_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/concerns/spree/metafields_spec.rb"},{"name":"associations has many public_metafields","suite":"Spree::Metafields at ./spec/models/concerns/spree/metafields_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/models/concerns/spree/metafields_spec.rb"},{"name":"associations has many private_metafields","suite":"Spree::Metafields at ./spec/models/concerns/spree/metafields_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/models/concerns/spree/metafields_spec.rb"},{"name":".with_metafield_key returns products with the given metafield key","suite":"Spree::Metafields at ./spec/models/concerns/spree/metafields_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/concerns/spree/metafields_spec.rb"},{"name":".with_metafield_key does not return products without the given metafield key","suite":"Spree::Metafields at ./spec/models/concerns/spree/metafields_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","suiteSourceFile":"core/spec/models/concerns/spree/metafields_spec.rb"},{"name":".with_metafield_key_value returns products with the given metafield key and value","suite":"Spree::Metafields at ./spec/models/concerns/spree/metafields_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/models/concerns/spree/metafields_spec.rb"},{"name":".with_metafield_key_value does not return products with the key but different value","suite":"Spree::Metafields at ./spec/models/concerns/spree/metafields_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","suiteSourceFile":"core/spec/models/concerns/spree/metafields_spec.rb"},{"name":"#set_metafield and #get_metafield creates and retrieves a metafield by key_with_namespace","suite":"Spree::Metafields at ./spec/models/concerns/spree/metafields_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/models/concerns/spree/metafields_spec.rb"},{"name":"#set_metafield and #get_metafield updates the value if the metafield already exists","suite":"Spree::Metafields at ./spec/models/concerns/spree/metafields_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2\"}}","suiteSourceFile":"core/spec/models/concerns/spree/metafields_spec.rb"},{"name":"#has_metafield? returns true if metafield exists for string key_with_namespace","suite":"Spree::Metafields at ./spec/models/concerns/spree/metafields_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","suiteSourceFile":"core/spec/models/concerns/spree/metafields_spec.rb"},{"name":"#has_metafield? returns false if metafield does not exist for string key_with_namespace","suite":"Spree::Metafields at ./spec/models/concerns/spree/metafields_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2\"}}","suiteSourceFile":"core/spec/models/concerns/spree/metafields_spec.rb"},{"name":"#has_metafield? returns true if metafield exists for MetafieldDefinition","suite":"Spree::Metafields at ./spec/models/concerns/spree/metafields_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3\"}}","suiteSourceFile":"core/spec/models/concerns/spree/metafields_spec.rb"},{"name":"#has_metafield? returns false if metafield does not exist for MetafieldDefinition","suite":"Spree::Metafields at ./spec/models/concerns/spree/metafields_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:4\"}}","suiteSourceFile":"core/spec/models/concerns/spree/metafields_spec.rb"},{"name":"#has_metafield? raises ArgumentError for invalid key_with_namespace","suite":"Spree::Metafields at ./spec/models/concerns/spree/metafields_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:5\"}}","suiteSourceFile":"core/spec/models/concerns/spree/metafields_spec.rb"},{"name":"accepts_nested_attributes_for :metafields creates metafield via nested attributes","suite":"Spree::Metafields at ./spec/models/concerns/spree/metafields_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","suiteSourceFile":"core/spec/models/concerns/spree/metafields_spec.rb"},{"name":"accepts_nested_attributes_for :metafields rejects metafield if metafield_definition_id is blank","suite":"Spree::Metafields at ./spec/models/concerns/spree/metafields_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2\"}}","suiteSourceFile":"core/spec/models/concerns/spree/metafields_spec.rb"},{"name":"accepts_nested_attributes_for :metafields rejects metafield if id and value are blank","suite":"Spree::Metafields at ./spec/models/concerns/spree/metafields_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:3\"}}","suiteSourceFile":"core/spec/models/concerns/spree/metafields_spec.rb"},{"name":"accepts_nested_attributes_for :metafields auto-destroy metafields with empty values destroys existing metafield when value is set to empty string","suite":"Spree::Metafields at ./spec/models/concerns/spree/metafields_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:4:1\"}}","suiteSourceFile":"core/spec/models/concerns/spree/metafields_spec.rb"},{"name":"accepts_nested_attributes_for :metafields auto-destroy metafields with empty values destroys existing metafield when value is set to nil","suite":"Spree::Metafields at ./spec/models/concerns/spree/metafields_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:4:2\"}}","suiteSourceFile":"core/spec/models/concerns/spree/metafields_spec.rb"},{"name":"accepts_nested_attributes_for :metafields auto-destroy metafields with empty values updates existing metafield when value is not empty","suite":"Spree::Metafields at ./spec/models/concerns/spree/metafields_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:4:3\"}}","suiteSourceFile":"core/spec/models/concerns/spree/metafields_spec.rb"},{"name":"accepts_nested_attributes_for :metafields auto-destroy metafields with empty values handles multiple metafields correctly","suite":"Spree::Metafields at ./spec/models/concerns/spree/metafields_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:4:4\"}}","suiteSourceFile":"core/spec/models/concerns/spree/metafields_spec.rb"},{"name":"#publish_event publishes an event with the model payload","suite":"Spree::Publishable at ./spec/models/concerns/spree/publishable_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/concerns/spree/publishable_spec.rb"},{"name":"#publish_event allows custom payload","suite":"Spree::Publishable at ./spec/models/concerns/spree/publishable_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/models/concerns/spree/publishable_spec.rb"},{"name":"#publish_event does not publish when events are disabled","suite":"Spree::Publishable at ./spec/models/concerns/spree/publishable_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/models/concerns/spree/publishable_spec.rb"},{"name":"#event_payload with a serializer defined returns the serialized payload","suite":"Spree::Publishable at ./spec/models/concerns/spree/publishable_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","suiteSourceFile":"core/spec/models/concerns/spree/publishable_spec.rb"},{"name":"#event_payload without a serializer defined raises MissingSerializerError with helpful message","suite":"Spree::Publishable at ./spec/models/concerns/spree/publishable_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","suiteSourceFile":"core/spec/models/concerns/spree/publishable_spec.rb"},{"name":"#event_payload without a serializer defined includes example code in the error message","suite":"Spree::Publishable at ./spec/models/concerns/spree/publishable_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:2\"}}","suiteSourceFile":"core/spec/models/concerns/spree/publishable_spec.rb"},{"name":"#event_payload with anonymous class returns nil for event_serializer_class","suite":"Spree::Publishable at ./spec/models/concerns/spree/publishable_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:1\"}}","suiteSourceFile":"core/spec/models/concerns/spree/publishable_spec.rb"},{"name":"#event_prefix returns the model name element","suite":"Spree::Publishable at ./spec/models/concerns/spree/publishable_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/models/concerns/spree/publishable_spec.rb"},{"name":".publishes_lifecycle_events enables lifecycle events","suite":"Spree::Publishable at ./spec/models/concerns/spree/publishable_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/models/concerns/spree/publishable_spec.rb"},{"name":".publishes_lifecycle_events with only option only registers specified callbacks","suite":"Spree::Publishable at ./spec/models/concerns/spree/publishable_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3:1\"}}","suiteSourceFile":"core/spec/models/concerns/spree/publishable_spec.rb"},{"name":".publishes_lifecycle_events with except option excludes specified callbacks","suite":"Spree::Publishable at ./spec/models/concerns/spree/publishable_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:4:1\"}}","suiteSourceFile":"core/spec/models/concerns/spree/publishable_spec.rb"},{"name":".publishes_lifecycle_events with skip_lifecycle_events disables event publishing for the model","suite":"Spree::Publishable at ./spec/models/concerns/spree/publishable_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:5:1\"}}","suiteSourceFile":"core/spec/models/concerns/spree/publishable_spec.rb"},{"name":".event_prefix derives from model name","suite":"Spree::Publishable at ./spec/models/concerns/spree/publishable_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","suiteSourceFile":"core/spec/models/concerns/spree/publishable_spec.rb"},{"name":".event_prefix can be customized","suite":"Spree::Publishable at ./spec/models/concerns/spree/publishable_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2\"}}","suiteSourceFile":"core/spec/models/concerns/spree/publishable_spec.rb"},{"name":"register_ability adds the ability to the list of abilties","suite":"Spree::Ability at ./spec/models/spree/ability_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/ability_spec.rb"},{"name":"register_ability applies the registered abilities permissions","suite":"Spree::Ability at ./spec/models/spree/ability_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/ability_spec.rb"},{"name":"#abilities_to_register adds the ability to the list of abilities","suite":"Spree::Ability at ./spec/models/spree/ability_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/ability_spec.rb"},{"name":"#abilities_to_register applies the registered abilities permissions","suite":"Spree::Ability at ./spec/models/spree/ability_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","suiteSourceFile":"core/spec/models/spree/ability_spec.rb"},{"name":"for general resource with admin user behaves like access granted should allow show","suite":"Spree::Ability at ./spec/models/spree/ability_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/ability_spec.rb"},{"name":"for general resource with admin user behaves like access granted should allow create","suite":"Spree::Ability at ./spec/models/spree/ability_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/ability_spec.rb"},{"name":"for general resource with admin user behaves like access granted should allow update","suite":"Spree::Ability at ./spec/models/spree/ability_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1:3\"}}","suiteSourceFile":"core/spec/models/spree/ability_spec.rb"},{"name":"for general resource with admin user behaves like index allowed should allow index","suite":"Spree::Ability at ./spec/models/spree/ability_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/ability_spec.rb"},{"name":"for general resource with customer behaves like access denied should not allow read","suite":"Spree::Ability at ./spec/models/spree/ability_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/ability_spec.rb"},{"name":"for general resource with customer behaves like access denied should not allow create","suite":"Spree::Ability at ./spec/models/spree/ability_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1:2\"}}","suiteSourceFile":"core/spec/models/spree/ability_spec.rb"},{"name":"for general resource with customer behaves like access denied should not allow update","suite":"Spree::Ability at ./spec/models/spree/ability_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1:3\"}}","suiteSourceFile":"core/spec/models/spree/ability_spec.rb"},{"name":"for general resource with customer behaves like no index allowed should not allow index","suite":"Spree::Ability at ./spec/models/spree/ability_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/ability_spec.rb"},{"name":"for admin protected resources with admin user admin user role is able to admin","suite":"Spree::Ability at ./spec/models/spree/ability_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/ability_spec.rb"},{"name":"for admin protected resources with fakedispatch user is able to admin on the order and shipment pages","suite":"Spree::Ability at ./spec/models/spree/ability_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1\"}}","suiteSourceFile":"core/spec/models/spree/ability_spec.rb"},{"name":"for admin protected resources with customer is not able to admin","suite":"Spree::Ability at ./spec/models/spree/ability_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3:1\"}}","suiteSourceFile":"core/spec/models/spree/ability_spec.rb"},{"name":"as Guest User for Country requested by any user behaves like read only should not allow create","suite":"Spree::Ability at ./spec/models/spree/ability_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/ability_spec.rb"},{"name":"as Guest User for Country requested by any user behaves like read only should not allow update","suite":"Spree::Ability at ./spec/models/spree/ability_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/ability_spec.rb"},{"name":"as Guest User for Country requested by any user behaves like read only should allow index","suite":"Spree::Ability at ./spec/models/spree/ability_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:1:1:3\"}}","suiteSourceFile":"core/spec/models/spree/ability_spec.rb"},{"name":"as Guest User for OptionType requested by any user behaves like read only should not allow create","suite":"Spree::Ability at ./spec/models/spree/ability_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/ability_spec.rb"},{"name":"as Guest User for OptionType requested by any user behaves like read only should not allow update","suite":"Spree::Ability at ./spec/models/spree/ability_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/ability_spec.rb"},{"name":"as Guest User for OptionType requested by any user behaves like read only should allow index","suite":"Spree::Ability at ./spec/models/spree/ability_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1:1:3\"}}","suiteSourceFile":"core/spec/models/spree/ability_spec.rb"},{"name":"as Guest User for OptionValue requested by any user behaves like read only should not allow create","suite":"Spree::Ability at ./spec/models/spree/ability_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/ability_spec.rb"},{"name":"as Guest User for OptionValue requested by any user behaves like read only should not allow update","suite":"Spree::Ability at ./spec/models/spree/ability_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3:1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/ability_spec.rb"},{"name":"as Guest User for OptionValue requested by any user behaves like read only should allow index","suite":"Spree::Ability at ./spec/models/spree/ability_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3:1:1:3\"}}","suiteSourceFile":"core/spec/models/spree/ability_spec.rb"},{"name":"as Guest User for Order requested by same user behaves like access granted should allow show","suite":"Spree::Ability at ./spec/models/spree/ability_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:4:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/ability_spec.rb"},{"name":"as Guest User for Order requested by same user behaves like access granted should allow create","suite":"Spree::Ability at ./spec/models/spree/ability_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:4:1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/ability_spec.rb"},{"name":"as Guest User for Order requested by same user behaves like access granted should allow update","suite":"Spree::Ability at ./spec/models/spree/ability_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:4:1:1:3\"}}","suiteSourceFile":"core/spec/models/spree/ability_spec.rb"},{"name":"as Guest User for Order requested by same user behaves like no index allowed should not allow index","suite":"Spree::Ability at ./spec/models/spree/ability_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:4:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/ability_spec.rb"},{"name":"as Guest User for Order requested by other user behaves like create only should allow create","suite":"Spree::Ability at ./spec/models/spree/ability_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:4:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/ability_spec.rb"},{"name":"as Guest User for Order requested by other user behaves like create only should not allow read","suite":"Spree::Ability at ./spec/models/spree/ability_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:4:2:1:2\"}}","suiteSourceFile":"core/spec/models/spree/ability_spec.rb"},{"name":"as Guest User for Order requested by other user behaves like create only should not allow update","suite":"Spree::Ability at ./spec/models/spree/ability_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:4:2:1:3\"}}","suiteSourceFile":"core/spec/models/spree/ability_spec.rb"},{"name":"as Guest User for Order requested with proper token behaves like access granted should allow show","suite":"Spree::Ability at ./spec/models/spree/ability_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:4:3:1:1\"}}","suiteSourceFile":"core/spec/models/spree/ability_spec.rb"},{"name":"as Guest User for Order requested with proper token behaves like access granted should allow create","suite":"Spree::Ability at ./spec/models/spree/ability_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:4:3:1:2\"}}","suiteSourceFile":"core/spec/models/spree/ability_spec.rb"},{"name":"as Guest User for Order requested with proper token behaves like access granted should allow update","suite":"Spree::Ability at ./spec/models/spree/ability_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:4:3:1:3\"}}","suiteSourceFile":"core/spec/models/spree/ability_spec.rb"},{"name":"as Guest User for Order requested with proper token behaves like no index allowed should not allow index","suite":"Spree::Ability at ./spec/models/spree/ability_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:4:3:2:1\"}}","suiteSourceFile":"core/spec/models/spree/ability_spec.rb"},{"name":"as Guest User for Order requested with improper token behaves like create only should allow create","suite":"Spree::Ability at ./spec/models/spree/ability_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:4:4:1:1\"}}","suiteSourceFile":"core/spec/models/spree/ability_spec.rb"},{"name":"as Guest User for Order requested with improper token behaves like create only should not allow read","suite":"Spree::Ability at ./spec/models/spree/ability_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:4:4:1:2\"}}","suiteSourceFile":"core/spec/models/spree/ability_spec.rb"},{"name":"as Guest User for Order requested with improper token behaves like create only should not allow update","suite":"Spree::Ability at ./spec/models/spree/ability_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:4:4:1:3\"}}","suiteSourceFile":"core/spec/models/spree/ability_spec.rb"},{"name":"as Guest User for Product requested by any user behaves like read only should not allow create","suite":"Spree::Ability at ./spec/models/spree/ability_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:5:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/ability_spec.rb"},{"name":"as Guest User for Product requested by any user behaves like read only should not allow update","suite":"Spree::Ability at ./spec/models/spree/ability_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:5:1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/ability_spec.rb"},{"name":"as Guest User for Product requested by any user behaves like read only should allow index","suite":"Spree::Ability at ./spec/models/spree/ability_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:5:1:1:3\"}}","suiteSourceFile":"core/spec/models/spree/ability_spec.rb"},{"name":"as Guest User for ProductProperty requested by any user behaves like read only should not allow create","suite":"Spree::Ability at ./spec/models/spree/ability_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:6:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/ability_spec.rb"},{"name":"as Guest User for ProductProperty requested by any user behaves like read only should not allow update","suite":"Spree::Ability at ./spec/models/spree/ability_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:6:1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/ability_spec.rb"},{"name":"as Guest User for ProductProperty requested by any user behaves like read only should allow index","suite":"Spree::Ability at ./spec/models/spree/ability_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:6:1:1:3\"}}","suiteSourceFile":"core/spec/models/spree/ability_spec.rb"},{"name":"as Guest User for Property requested by any user behaves like read only should not allow create","suite":"Spree::Ability at ./spec/models/spree/ability_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:7:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/ability_spec.rb"},{"name":"as Guest User for Property requested by any user behaves like read only should not allow update","suite":"Spree::Ability at ./spec/models/spree/ability_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:7:1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/ability_spec.rb"},{"name":"as Guest User for Property requested by any user behaves like read only should allow index","suite":"Spree::Ability at ./spec/models/spree/ability_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:7:1:1:3\"}}","suiteSourceFile":"core/spec/models/spree/ability_spec.rb"},{"name":"as Guest User for State requested by any user behaves like read only should not allow create","suite":"Spree::Ability at ./spec/models/spree/ability_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:8:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/ability_spec.rb"},{"name":"as Guest User for State requested by any user behaves like read only should not allow update","suite":"Spree::Ability at ./spec/models/spree/ability_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:8:1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/ability_spec.rb"},{"name":"as Guest User for State requested by any user behaves like read only should allow index","suite":"Spree::Ability at ./spec/models/spree/ability_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:8:1:1:3\"}}","suiteSourceFile":"core/spec/models/spree/ability_spec.rb"},{"name":"as Guest User for Taxons requested by any user behaves like read only should not allow create","suite":"Spree::Ability at ./spec/models/spree/ability_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:9:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/ability_spec.rb"},{"name":"as Guest User for Taxons requested by any user behaves like read only should not allow update","suite":"Spree::Ability at ./spec/models/spree/ability_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:9:1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/ability_spec.rb"},{"name":"as Guest User for Taxons requested by any user behaves like read only should allow index","suite":"Spree::Ability at ./spec/models/spree/ability_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:9:1:1:3\"}}","suiteSourceFile":"core/spec/models/spree/ability_spec.rb"},{"name":"as Guest User for Taxonomy requested by any user behaves like read only should not allow create","suite":"Spree::Ability at ./spec/models/spree/ability_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:10:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/ability_spec.rb"},{"name":"as Guest User for Taxonomy requested by any user behaves like read only should not allow update","suite":"Spree::Ability at ./spec/models/spree/ability_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:10:1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/ability_spec.rb"},{"name":"as Guest User for Taxonomy requested by any user behaves like read only should allow index","suite":"Spree::Ability at ./spec/models/spree/ability_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:10:1:1:3\"}}","suiteSourceFile":"core/spec/models/spree/ability_spec.rb"},{"name":"as Guest User for User requested by same user behaves like access granted should allow show","suite":"Spree::Ability at ./spec/models/spree/ability_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:11:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/ability_spec.rb"},{"name":"as Guest User for User requested by same user behaves like access granted should allow create","suite":"Spree::Ability at ./spec/models/spree/ability_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:11:1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/ability_spec.rb"},{"name":"as Guest User for User requested by same user behaves like access granted should allow update","suite":"Spree::Ability at ./spec/models/spree/ability_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:11:1:1:3\"}}","suiteSourceFile":"core/spec/models/spree/ability_spec.rb"},{"name":"as Guest User for User requested by same user behaves like no index allowed should not allow index","suite":"Spree::Ability at ./spec/models/spree/ability_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:11:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/ability_spec.rb"},{"name":"as Guest User for User requested by other user behaves like create only should allow create","suite":"Spree::Ability at ./spec/models/spree/ability_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:11:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/ability_spec.rb"},{"name":"as Guest User for User requested by other user behaves like create only should not allow read","suite":"Spree::Ability at ./spec/models/spree/ability_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:11:2:1:2\"}}","suiteSourceFile":"core/spec/models/spree/ability_spec.rb"},{"name":"as Guest User for User requested by other user behaves like create only should not allow update","suite":"Spree::Ability at ./spec/models/spree/ability_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:11:2:1:3\"}}","suiteSourceFile":"core/spec/models/spree/ability_spec.rb"},{"name":"as Guest User for Variant requested by any user behaves like read only should not allow create","suite":"Spree::Ability at ./spec/models/spree/ability_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:12:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/ability_spec.rb"},{"name":"as Guest User for Variant requested by any user behaves like read only should not allow update","suite":"Spree::Ability at ./spec/models/spree/ability_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:12:1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/ability_spec.rb"},{"name":"as Guest User for Variant requested by any user behaves like read only should allow index","suite":"Spree::Ability at ./spec/models/spree/ability_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:12:1:1:3\"}}","suiteSourceFile":"core/spec/models/spree/ability_spec.rb"},{"name":"as Guest User for Zone requested by any user behaves like read only should not allow create","suite":"Spree::Ability at ./spec/models/spree/ability_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:13:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/ability_spec.rb"},{"name":"as Guest User for Zone requested by any user behaves like read only should not allow update","suite":"Spree::Ability at ./spec/models/spree/ability_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:13:1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/ability_spec.rb"},{"name":"as Guest User for Zone requested by any user behaves like read only should allow index","suite":"Spree::Ability at ./spec/models/spree/ability_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:13:1:1:3\"}}","suiteSourceFile":"core/spec/models/spree/ability_spec.rb"},{"name":"as Guest User for Address (IDOR vulnerability prevention) with non-persisted guest user cannot read guest addresses with nil user_id","suite":"Spree::Ability at ./spec/models/spree/ability_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:14:1:1\"}}","suiteSourceFile":"core/spec/models/spree/ability_spec.rb"},{"name":"as Guest User for Address (IDOR vulnerability prevention) with non-persisted guest user cannot edit guest addresses with nil user_id","suite":"Spree::Ability at ./spec/models/spree/ability_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:14:1:2\"}}","suiteSourceFile":"core/spec/models/spree/ability_spec.rb"},{"name":"as Guest User for Address (IDOR vulnerability prevention) with non-persisted guest user cannot update guest addresses with nil user_id","suite":"Spree::Ability at ./spec/models/spree/ability_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:14:1:3\"}}","suiteSourceFile":"core/spec/models/spree/ability_spec.rb"},{"name":"as Guest User for Address (IDOR vulnerability prevention) with non-persisted guest user cannot destroy guest addresses with nil user_id","suite":"Spree::Ability at ./spec/models/spree/ability_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:14:1:4\"}}","suiteSourceFile":"core/spec/models/spree/ability_spec.rb"},{"name":"as Guest User for Address (IDOR vulnerability prevention) with non-persisted guest user cannot manage any address","suite":"Spree::Ability at ./spec/models/spree/ability_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:14:1:5\"}}","suiteSourceFile":"core/spec/models/spree/ability_spec.rb"},{"name":"as Guest User for Address (IDOR vulnerability prevention) with persisted user can manage own address","suite":"Spree::Ability at ./spec/models/spree/ability_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:14:2:1\"}}","suiteSourceFile":"core/spec/models/spree/ability_spec.rb"},{"name":"as Guest User for Address (IDOR vulnerability prevention) with persisted user cannot manage guest addresses","suite":"Spree::Ability at ./spec/models/spree/ability_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:14:2:2\"}}","suiteSourceFile":"core/spec/models/spree/ability_spec.rb"},{"name":"as Guest User for Address (IDOR vulnerability prevention) with persisted user cannot manage other user addresses","suite":"Spree::Ability at ./spec/models/spree/ability_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:14:2:3\"}}","suiteSourceFile":"core/spec/models/spree/ability_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:4","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:5","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:7","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:8","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:10","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:11","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"behaves like metadata reads data as symbolized keys","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"behaves like metadata reads data as not symbolized keys","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"behaves like metadata can query records by metadata properties","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:10\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"before_validation :remove_emoji_and_normalize normalizes the address and removes emojis","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"after_commit :async_geocode geocodes the address in the background","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"after_commit :async_geocode when geocoding data didn't change skips geocoding","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"default values with user sets user_id and first/last name from user","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"clone creates a copy of the address with the exception of the id, label, user_id, updated_at and created_at attributes","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"delegated method Country #country_name return proper country_iso_name","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"delegated method Country #country_iso_name return proper country_iso_name","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"delegated method Country #country_iso return proper country_iso_name","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"delegated method Country #country_iso3 return proper country_iso_name","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"aliased attributes first_name","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"aliased attributes last_name","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"validation state_name is not nil and country does not have any states","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"validation errors when state_name is nil","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"validation full state name is in state_name and country does contain that state","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:3\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"validation state abbr is in state_name and country does contain that state","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:4\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"validation state is entered but country does not contain that state","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:5\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"validation both state and state_name are entered but country does not contain the state","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:6\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"validation both state and state_name are entered and country does contain the state","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:7\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"validation address_requires_state preference is false","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:8\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"validation does not require phone","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:9\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"validation requires zipcode","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:11\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"validation requires firstname","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:12\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"validation requires lastname","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:13\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"validation when phone is required validates presence of the phone","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:10:1\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"validation zipcode validation validates the zipcode","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:14:1\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"validation zipcode validation accepts a zip code with surrounding white space","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:14:2\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"validation zipcode validation accepts an unformatted zip code","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:14:3\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"validation zipcode validation does not validate is for quick checkout","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:14:4:1\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"validation zipcode validation does not validate does not have a country","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:14:4:2\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"validation zipcode validation does not validate country does not requires zipcode","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:14:4:3\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"validation zipcode validation does not validate does not have an iso","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:14:4:4\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"validation zipcode validation does not validate does not have a zipcode","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:14:4:5\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"validation zipcode validation does not validate zipcode is nil","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:14:4:6\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"validation zipcode validation does not validate does not have a supported country iso","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:14:4:7\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"validation phone not required shows no errors when phone is blank","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:15:1\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"validation zipcode not required shows no errors when phone is blank","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:16:1\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"after create when user is assigned and it has default name should assign address name to the user","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1:1\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"#full_name both first and last names are present example at ./spec/models/spree/address_spec.rb:366","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1:1\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"#state_text state is blank example at ./spec/models/spree/address_spec.rb:374","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1:1\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"#state_text both name and abbr is present example at ./spec/models/spree/address_spec.rb:381","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2:1\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"#state_text only name is present example at ./spec/models/spree/address_spec.rb:388","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:3:1\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"#state_name_text state_name is blank example at ./spec/models/spree/address_spec.rb:397","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:1:1\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"#state_name_text state is blank example at ./spec/models/spree/address_spec.rb:403","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:2:1\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"#state_name_text state and state_name are present example at ./spec/models/spree/address_spec.rb:410","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:3:1\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"defines require_phone? helper method example at ./spec/models/spree/address_spec.rb:417","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:1\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"#clear_state example at ./spec/models/spree/address_spec.rb:425","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:1\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"#clear_state example at ./spec/models/spree/address_spec.rb:426","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:2\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"#clear_state_name example at ./spec/models/spree/address_spec.rb:434","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:1\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"#clear_state_name example at ./spec/models/spree/address_spec.rb:435","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:2\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"#clear_invalid_state_entities state not present and state_name both not present example at ./spec/models/spree/address_spec.rb:454","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:1:1\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"#clear_invalid_state_entities state not present and state_name both not present example at ./spec/models/spree/address_spec.rb:455","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:1:2\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"#clear_invalid_state_entities state_name not present and state present state belongs to a different country than to which address is associated example at ./spec/models/spree/address_spec.rb:467","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"#clear_invalid_state_entities state_name not present and state present state belongs to a different country than to which address is associated example at ./spec/models/spree/address_spec.rb:468","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:2:1:2\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"#clear_invalid_state_entities state_name not present and state present state belongs to the same country associated with address example at ./spec/models/spree/address_spec.rb:474","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"#clear_invalid_state_entities state_name not present and state present state belongs to the same country associated with address example at ./spec/models/spree/address_spec.rb:475","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:2:2:2\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"#clear_invalid_state_entities state not present and state_name present when country has no states and state is required example at ./spec/models/spree/address_spec.rb:491","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:3:1:1\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"#clear_invalid_state_entities state not present and state_name present when country has no states and state is required example at ./spec/models/spree/address_spec.rb:492","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:3:1:2\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"#clear_invalid_state_entities state not present and state_name present when country has states example at ./spec/models/spree/address_spec.rb:501","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:3:2:1\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"#clear_invalid_state_entities state not present and state_name present when country has states example at ./spec/models/spree/address_spec.rb:502","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:3:2:2\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"#clear_invalid_state_entities state not present and state_name present when country has no states and state is not required example at ./spec/models/spree/address_spec.rb:512","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:3:3:1\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"#clear_invalid_state_entities state not present and state_name present when country has no states and state is not required example at ./spec/models/spree/address_spec.rb:513","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:3:3:2\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"#== same addresses example at ./spec/models/spree/address_spec.rb:523","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:17:1:1\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"#== different addresses example at ./spec/models/spree/address_spec.rb:529","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:17:2:1\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"editable & destroy has required attributes","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:1\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"editable & destroy is editable","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:2\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"editable & destroy can be deleted","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:3\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"editable & destroy isn't editable when there is an associated order","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:4\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"editable & destroy can't be deleted when there is an associated order","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:5\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"editable & destroy can be deleted when there is an incomplete associated order","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:6\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"editable & destroy is destroyed without saving used","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:7\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"editable & destroy is destroyed deleted timestamp","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:8\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"editable & destroy when saving user raises error does not set deleted_at attribute for address","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:9:1\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"editable & destroy #assign_new_default_address_to_user when address is deleted is deleted","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:10:1:1\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"editable & destroy #assign_new_default_address_to_user when address is deleted behaves like default address when 2 addresses are available assigns last available address as default to bill and ship address","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:10:1:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"editable & destroy #assign_new_default_address_to_user when address is deleted behaves like default address when the only address left is invalid does not raise errors and sets addresses to nil","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:10:1:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"editable & destroy #assign_new_default_address_to_user when address is deleted behaves like default address when the only address left is soft-deleted does not raise errors and sets addresses to nil","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:10:1:2:3:1\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"editable & destroy #assign_new_default_address_to_user when address is deleted behaves like default address when deleted address was not assigned to the user does not touch user","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:10:1:2:4:1\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"editable & destroy #assign_new_default_address_to_user when address is deleted behaves like default address when deleted address was not default does not change user bill address","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:10:1:2:5:1\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"editable & destroy #assign_new_default_address_to_user when address is deleted behaves like default address when deleted address was not default does not change user ship address","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:10:1:2:5:2\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"editable & destroy #assign_new_default_address_to_user when address is soft deleted is soft deleted","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:10:2:1\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"editable & destroy #assign_new_default_address_to_user when address is soft deleted behaves like default address when 2 addresses are available assigns last available address as default to bill and ship address","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:10:2:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"editable & destroy #assign_new_default_address_to_user when address is soft deleted behaves like default address when the only address left is invalid does not raise errors and sets addresses to nil","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:10:2:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"editable & destroy #assign_new_default_address_to_user when address is soft deleted behaves like default address when the only address left is soft-deleted does not raise errors and sets addresses to nil","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:10:2:2:3:1\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"editable & destroy #assign_new_default_address_to_user when address is soft deleted behaves like default address when deleted address was not assigned to the user does not touch user","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:10:2:2:4:1\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"editable & destroy #assign_new_default_address_to_user when address is soft deleted behaves like default address when deleted address was not default does not change user bill address","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:10:2:2:5:1\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"editable & destroy #assign_new_default_address_to_user when address is soft deleted behaves like default address when deleted address was not default does not change user ship address","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:10:2:2:5:2\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"#to_s is displayed as string","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:1\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"#to_s address contains HTML properly escapes HTML","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:2:1\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"address validators runs through all configured validators during validation","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:20:1\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"require_phone? when quick_checkout is true returns false","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:21:1:1\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"require_phone? when quick_checkout is false and Spree::Config[:address_requires_phone] is true returns true","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:21:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"require_phone? when quick_checkout is false and Spree::Config[:address_requires_phone] is false returns false","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:21:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"raises missing update method","suite":"Spree::Adjustable::Adjuster::Base at ./spec/models/spree/adjustable/adjuster/base_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","suiteSourceFile":"core/spec/models/spree/adjustable/adjuster/base_spec.rb"},{"name":"best promotion is always applied uses only the most valuable promotion","suite":"Spree::Adjustable::Adjuster::Promotion at ./spec/models/spree/adjustable/adjuster/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/adjustable/adjuster/promotion_spec.rb"},{"name":"best promotion is always applied chooses the most recent promotion adjustment when amounts are equal","suite":"Spree::Adjustable::Adjuster::Promotion at ./spec/models/spree/adjustable/adjuster/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/models/spree/adjustable/adjuster/promotion_spec.rb"},{"name":"best promotion is always applied only leaves one adjustment even if 2 have the same amount","suite":"Spree::Adjustable::Adjuster::Promotion at ./spec/models/spree/adjustable/adjuster/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","suiteSourceFile":"core/spec/models/spree/adjustable/adjuster/promotion_spec.rb"},{"name":"best promotion is always applied competing promos do not update promo_total","suite":"Spree::Adjustable::Adjuster::Promotion at ./spec/models/spree/adjustable/adjuster/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/adjustable/adjuster/promotion_spec.rb"},{"name":"best promotion is always applied when previously ineligible promotions become available picks the best order-level promo according to current eligibility","suite":"Spree::Adjustable::Adjuster::Promotion at ./spec/models/spree/adjustable/adjuster/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/adjustable/adjuster/promotion_spec.rb"},{"name":"best promotion is always applied when previously ineligible promotions become available picks the best order-level promo according to current eligibility","suite":"Spree::Adjustable::Adjuster::Promotion at ./spec/models/spree/adjustable/adjuster/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:2\"}}","suiteSourceFile":"core/spec/models/spree/adjustable/adjuster/promotion_spec.rb"},{"name":"best promotion is always applied when previously ineligible promotions become available picks the best line-item-level promo according to current eligibility","suite":"Spree::Adjustable::Adjuster::Promotion at ./spec/models/spree/adjustable/adjuster/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:3\"}}","suiteSourceFile":"core/spec/models/spree/adjustable/adjuster/promotion_spec.rb"},{"name":"best promotion is always applied when previously ineligible promotions become available picks the best line-item-level promo according to current eligibility","suite":"Spree::Adjustable::Adjuster::Promotion at ./spec/models/spree/adjustable/adjuster/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:4\"}}","suiteSourceFile":"core/spec/models/spree/adjustable/adjuster/promotion_spec.rb"},{"name":"best promotion is always applied multiple adjustments and the best one is not eligible still makes the previous best eligible adjustment valid","suite":"Spree::Adjustable::Adjuster::Promotion at ./spec/models/spree/adjustable/adjuster/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5:1\"}}","suiteSourceFile":"core/spec/models/spree/adjustable/adjuster/promotion_spec.rb"},{"name":"taxes with promotions tax included in price tax has no bearing on final price","suite":"Spree::Adjustable::Adjuster::Tax at ./spec/models/spree/adjustable/adjuster/tax_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/adjustable/adjuster/tax_spec.rb"},{"name":"taxes with promotions tax included in price tax linked to order","suite":"Spree::Adjustable::Adjuster::Tax at ./spec/models/spree/adjustable/adjuster/tax_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/adjustable/adjuster/tax_spec.rb"},{"name":"taxes with promotions tax excluded from price tax applies to line item","suite":"Spree::Adjustable::Adjuster::Tax at ./spec/models/spree/adjustable/adjuster/tax_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/adjustable/adjuster/tax_spec.rb"},{"name":"taxes with promotions tax excluded from price tax linked to order","suite":"Spree::Adjustable::Adjuster::Tax at ./spec/models/spree/adjustable/adjuster/tax_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2\"}}","suiteSourceFile":"core/spec/models/spree/adjustable/adjuster/tax_spec.rb"},{"name":"#update persisted object updates all linked adjusters","suite":"Spree::Adjustable::AdjustmentsUpdater at ./spec/models/spree/adjustable/adjustments_updater_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/adjustable/adjustments_updater_spec.rb"},{"name":"#update persisted object when there is no tax adjuster updates all linked adjusters without tax","suite":"Spree::Adjustable::AdjustmentsUpdater at ./spec/models/spree/adjustable/adjustments_updater_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/adjustable/adjustments_updater_spec.rb"},{"name":"#update non-persisted object does nothing","suite":"Spree::Adjustable::AdjustmentsUpdater at ./spec/models/spree/adjustable/adjustments_updater_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/adjustable/adjustments_updater_spec.rb"},{"name":"#update nil does not raise an error","suite":"Spree::Adjustable::AdjustmentsUpdater at ./spec/models/spree/adjustable/adjustments_updater_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/adjustable/adjustments_updater_spec.rb"},{"name":"#amount= is expected to equal to localized number","suite":"Spree::Adjustment at ./spec/models/spree/adjustment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/adjustment_spec.rb"},{"name":"scopes .for_complete_order example at ./spec/models/spree/adjustment_spec.rb:30","suite":"Spree::Adjustment at ./spec/models/spree/adjustment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/adjustment_spec.rb"},{"name":"scopes .for_complete_order example at ./spec/models/spree/adjustment_spec.rb:31","suite":"Spree::Adjustment at ./spec/models/spree/adjustment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:2\"}}","suiteSourceFile":"core/spec/models/spree/adjustment_spec.rb"},{"name":"scopes .for_incomplete_order example at ./spec/models/spree/adjustment_spec.rb:42","suite":"Spree::Adjustment at ./spec/models/spree/adjustment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/adjustment_spec.rb"},{"name":"scopes .for_incomplete_order example at ./spec/models/spree/adjustment_spec.rb:43","suite":"Spree::Adjustment at ./spec/models/spree/adjustment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:2\"}}","suiteSourceFile":"core/spec/models/spree/adjustment_spec.rb"},{"name":"#create & #destroy calls #update_adjustable_adjustment_total","suite":"Spree::Adjustment at ./spec/models/spree/adjustment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/adjustment_spec.rb"},{"name":"#save touches the adjustable","suite":"Spree::Adjustment at ./spec/models/spree/adjustment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/adjustment_spec.rb"},{"name":"non_tax scope select non-tax adjustments","suite":"Spree::Adjustment at ./spec/models/spree/adjustment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","suiteSourceFile":"core/spec/models/spree/adjustment_spec.rb"},{"name":"competing_promos scope no custom source_types have been added to competing_promos selects promotion adjustments by default","suite":"Spree::Adjustment at ./spec/models/spree/adjustment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1:1\"}}","suiteSourceFile":"core/spec/models/spree/adjustment_spec.rb"},{"name":"competing_promos scope a custom source_type has been added to competing_promos selects adjustments with registered source_types","suite":"Spree::Adjustment at ./spec/models/spree/adjustment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2:1\"}}","suiteSourceFile":"core/spec/models/spree/adjustment_spec.rb"},{"name":"adjustment state #closed? is true when adjustment state is closed","suite":"Spree::Adjustment at ./spec/models/spree/adjustment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1:1\"}}","suiteSourceFile":"core/spec/models/spree/adjustment_spec.rb"},{"name":"adjustment state #closed? is false when adjustment state is open","suite":"Spree::Adjustment at ./spec/models/spree/adjustment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1:2\"}}","suiteSourceFile":"core/spec/models/spree/adjustment_spec.rb"},{"name":"#currency returns the order currency","suite":"Spree::Adjustment at ./spec/models/spree/adjustment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1\"}}","suiteSourceFile":"core/spec/models/spree/adjustment_spec.rb"},{"name":"#display_amount shows the amount","suite":"Spree::Adjustment at ./spec/models/spree/adjustment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1\"}}","suiteSourceFile":"core/spec/models/spree/adjustment_spec.rb"},{"name":"#display_amount with currency set to JPY when adjustable is set to an order displays in JPY","suite":"Spree::Adjustment at ./spec/models/spree/adjustment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/adjustment_spec.rb"},{"name":"#display_amount with currency set to JPY when adjustable is nil displays in the default currency","suite":"Spree::Adjustment at ./spec/models/spree/adjustment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/adjustment_spec.rb"},{"name":"#update! when adjustment is closed does not update the adjustment","suite":"Spree::Adjustment at ./spec/models/spree/adjustment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1:1\"}}","suiteSourceFile":"core/spec/models/spree/adjustment_spec.rb"},{"name":"#update! when adjustment is open updates the amount","suite":"Spree::Adjustment at ./spec/models/spree/adjustment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:2:1\"}}","suiteSourceFile":"core/spec/models/spree/adjustment_spec.rb"},{"name":"#update! when adjustment is open it is a promotion adjustment the promotion is eligible sets the adjustment eligible to true","suite":"Spree::Adjustment at ./spec/models/spree/adjustment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:2:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/adjustment_spec.rb"},{"name":"#update! when adjustment is open it is a promotion adjustment the promotion is not eligible sets the adjustment eligible to false","suite":"Spree::Adjustment at ./spec/models/spree/adjustment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:2:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/adjustment_spec.rb"},{"name":"#update! when adjustment is open when amount and eligible are the same does not update the adjustment","suite":"Spree::Adjustment at ./spec/models/spree/adjustment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:2:3:1\"}}","suiteSourceFile":"core/spec/models/spree/adjustment_spec.rb"},{"name":"#cached_source returns the source","suite":"Spree::Adjustment at ./spec/models/spree/adjustment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1\"}}","suiteSourceFile":"core/spec/models/spree/adjustment_spec.rb"},{"name":"#cached_source uses Rails.cache.fetch to cache the source","suite":"Spree::Adjustment at ./spec/models/spree/adjustment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2\"}}","suiteSourceFile":"core/spec/models/spree/adjustment_spec.rb"},{"name":"#cached_source returns nil when source_type is blank","suite":"Spree::Adjustment at ./spec/models/spree/adjustment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:3\"}}","suiteSourceFile":"core/spec/models/spree/adjustment_spec.rb"},{"name":"#cached_source returns nil when source_id is blank","suite":"Spree::Adjustment at ./spec/models/spree/adjustment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:4\"}}","suiteSourceFile":"core/spec/models/spree/adjustment_spec.rb"},{"name":"#source_cache_key returns a cache key based on source type and id","suite":"Spree::Adjustment at ./spec/models/spree/adjustment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:1\"}}","suiteSourceFile":"core/spec/models/spree/adjustment_spec.rb"},{"name":"#can_be_deleted? when store has other admin users example at ./spec/models/spree/admin_user_spec.rb:14","suite":"Spree::LegacyUser at ./spec/models/spree/admin_user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/admin_user_spec.rb"},{"name":"#can_be_deleted? when store has no other admin users example at ./spec/models/spree/admin_user_spec.rb:18","suite":"Spree::LegacyUser at ./spec/models/spree/admin_user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/admin_user_spec.rb"},{"name":"#can_be_deleted? when the user does not have admin role example at ./spec/models/spree/admin_user_spec.rb:24","suite":"Spree::LegacyUser at ./spec/models/spree/admin_user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/admin_user_spec.rb"},{"name":"Callbacks cleans up admin user resources nullifies admin user resources","suite":"Spree::LegacyUser at ./spec/models/spree/admin_user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/admin_user_spec.rb"},{"name":"#destroy (regression tests) admin user invited other other users accept invitation does not remove other user's role","suite":"Spree::LegacyUser at ./spec/models/spree/admin_user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/admin_user_spec.rb"},{"name":"backwards compatibility returns the default value as string","suite":"Spree::Core::Dependencies at ./spec/models/spree/app_dependencies_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/app_dependencies_spec.rb"},{"name":"backwards compatibility allows to overwrite the value with a class","suite":"Spree::Core::Dependencies at ./spec/models/spree/app_dependencies_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/app_dependencies_spec.rb"},{"name":"backwards compatibility allows to overwrite the value with a string","suite":"Spree::Core::Dependencies at ./spec/models/spree/app_dependencies_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/models/spree/app_dependencies_spec.rb"},{"name":"backwards compatibility works with constantize for string values","suite":"Spree::Core::Dependencies at ./spec/models/spree/app_dependencies_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","suiteSourceFile":"core/spec/models/spree/app_dependencies_spec.rb"},{"name":"#_class returns the constantized class for string values","suite":"Spree::Core::Dependencies at ./spec/models/spree/app_dependencies_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/app_dependencies_spec.rb"},{"name":"#_class returns the class directly when set as class","suite":"Spree::Core::Dependencies at ./spec/models/spree/app_dependencies_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","suiteSourceFile":"core/spec/models/spree/app_dependencies_spec.rb"},{"name":"#_class memoizes the resolved class","suite":"Spree::Core::Dependencies at ./spec/models/spree/app_dependencies_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3\"}}","suiteSourceFile":"core/spec/models/spree/app_dependencies_spec.rb"},{"name":"#_class clears memoization when value changes","suite":"Spree::Core::Dependencies at ./spec/models/spree/app_dependencies_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:4\"}}","suiteSourceFile":"core/spec/models/spree/app_dependencies_spec.rb"},{"name":"#overrides returns empty hash when no overrides","suite":"Spree::Core::Dependencies at ./spec/models/spree/app_dependencies_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/app_dependencies_spec.rb"},{"name":"#overrides tracks overridden dependencies","suite":"Spree::Core::Dependencies at ./spec/models/spree/app_dependencies_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","suiteSourceFile":"core/spec/models/spree/app_dependencies_spec.rb"},{"name":"#overrides includes override metadata","suite":"Spree::Core::Dependencies at ./spec/models/spree/app_dependencies_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3\"}}","suiteSourceFile":"core/spec/models/spree/app_dependencies_spec.rb"},{"name":"#overridden? returns false for non-overridden dependencies","suite":"Spree::Core::Dependencies at ./spec/models/spree/app_dependencies_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/app_dependencies_spec.rb"},{"name":"#overridden? returns true for overridden dependencies","suite":"Spree::Core::Dependencies at ./spec/models/spree/app_dependencies_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2\"}}","suiteSourceFile":"core/spec/models/spree/app_dependencies_spec.rb"},{"name":"#overridden? works with string argument","suite":"Spree::Core::Dependencies at ./spec/models/spree/app_dependencies_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3\"}}","suiteSourceFile":"core/spec/models/spree/app_dependencies_spec.rb"},{"name":"#override_info returns nil for non-overridden dependencies","suite":"Spree::Core::Dependencies at ./spec/models/spree/app_dependencies_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","suiteSourceFile":"core/spec/models/spree/app_dependencies_spec.rb"},{"name":"#override_info returns override info for overridden dependencies","suite":"Spree::Core::Dependencies at ./spec/models/spree/app_dependencies_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2\"}}","suiteSourceFile":"core/spec/models/spree/app_dependencies_spec.rb"},{"name":"#current_values returns all dependencies with metadata","suite":"Spree::Core::Dependencies at ./spec/models/spree/app_dependencies_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","suiteSourceFile":"core/spec/models/spree/app_dependencies_spec.rb"},{"name":"#current_values marks non-overridden dependencies correctly","suite":"Spree::Core::Dependencies at ./spec/models/spree/app_dependencies_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2\"}}","suiteSourceFile":"core/spec/models/spree/app_dependencies_spec.rb"},{"name":"#current_values marks overridden dependencies correctly","suite":"Spree::Core::Dependencies at ./spec/models/spree/app_dependencies_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:3\"}}","suiteSourceFile":"core/spec/models/spree/app_dependencies_spec.rb"},{"name":"#validate! raises Spree::DependencyError for invalid dependencies","suite":"Spree::Core::Dependencies at ./spec/models/spree/app_dependencies_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","suiteSourceFile":"core/spec/models/spree/app_dependencies_spec.rb"},{"name":"#validate! includes dependency names in error message","suite":"Spree::Core::Dependencies at ./spec/models/spree/app_dependencies_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2\"}}","suiteSourceFile":"core/spec/models/spree/app_dependencies_spec.rb"},{"name":"Spree. returns the resolved class","suite":"Spree module dependency accessors at ./spec/models/spree/app_dependencies_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/app_dependencies_spec.rb"},{"name":"Spree. responds to dependency methods","suite":"Spree module dependency accessors at ./spec/models/spree/app_dependencies_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:1:2\"}}","suiteSourceFile":"core/spec/models/spree/app_dependencies_spec.rb"},{"name":"Spree. does not respond to non-dependency methods","suite":"Spree module dependency accessors at ./spec/models/spree/app_dependencies_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:1:3\"}}","suiteSourceFile":"core/spec/models/spree/app_dependencies_spec.rb"},{"name":"Spree.= sets the dependency via Spree module","suite":"Spree module dependency accessors at ./spec/models/spree/app_dependencies_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/app_dependencies_spec.rb"},{"name":"Spree.= returns the new class via Spree module","suite":"Spree module dependency accessors at ./spec/models/spree/app_dependencies_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:2:2\"}}","suiteSourceFile":"core/spec/models/spree/app_dependencies_spec.rb"},{"name":"Spree.= tracks override source correctly (not internal routing code)","suite":"Spree module dependency accessors at ./spec/models/spree/app_dependencies_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:2:3\"}}","suiteSourceFile":"core/spec/models/spree/app_dependencies_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:4","suite":"Spree::Asset at ./spec/models/spree/asset_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/asset_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:5","suite":"Spree::Asset at ./spec/models/spree/asset_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/asset_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:7","suite":"Spree::Asset at ./spec/models/spree/asset_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/models/spree/asset_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:8","suite":"Spree::Asset at ./spec/models/spree/asset_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","suiteSourceFile":"core/spec/models/spree/asset_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:10","suite":"Spree::Asset at ./spec/models/spree/asset_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","suiteSourceFile":"core/spec/models/spree/asset_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:11","suite":"Spree::Asset at ./spec/models/spree/asset_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","suiteSourceFile":"core/spec/models/spree/asset_spec.rb"},{"name":"behaves like metadata reads data as symbolized keys","suite":"Spree::Asset at ./spec/models/spree/asset_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7\"}}","suiteSourceFile":"core/spec/models/spree/asset_spec.rb"},{"name":"behaves like metadata reads data as not symbolized keys","suite":"Spree::Asset at ./spec/models/spree/asset_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8\"}}","suiteSourceFile":"core/spec/models/spree/asset_spec.rb"},{"name":"behaves like metadata can query records by metadata properties","suite":"Spree::Asset at ./spec/models/spree/asset_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:10\"}}","suiteSourceFile":"core/spec/models/spree/asset_spec.rb"},{"name":"behaves like lifecycle events lifecycle events asset.created publishes created event when record is created","suite":"Spree::Asset at ./spec/models/spree/asset_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/asset_spec.rb"},{"name":"behaves like lifecycle events lifecycle events asset.updated publishes updated event when record is updated","suite":"Spree::Asset at ./spec/models/spree/asset_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/asset_spec.rb"},{"name":"behaves like lifecycle events lifecycle events asset.deleted publishes deleted event when record is deleted","suite":"Spree::Asset at ./spec/models/spree/asset_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/asset_spec.rb"},{"name":"named variants defines preprocessed variants based on config","suite":"Spree::Asset at ./spec/models/spree/asset_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/asset_spec.rb"},{"name":"named variants defines :mini variant with correct options","suite":"Spree::Asset at ./spec/models/spree/asset_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","suiteSourceFile":"core/spec/models/spree/asset_spec.rb"},{"name":"named variants defines :small variant with correct options","suite":"Spree::Asset at ./spec/models/spree/asset_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3\"}}","suiteSourceFile":"core/spec/models/spree/asset_spec.rb"},{"name":"named variants defines :medium variant with correct options","suite":"Spree::Asset at ./spec/models/spree/asset_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4\"}}","suiteSourceFile":"core/spec/models/spree/asset_spec.rb"},{"name":"named variants defines :large variant with correct options","suite":"Spree::Asset at ./spec/models/spree/asset_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:5\"}}","suiteSourceFile":"core/spec/models/spree/asset_spec.rb"},{"name":"named variants defines :xlarge variant with correct options","suite":"Spree::Asset at ./spec/models/spree/asset_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:6\"}}","suiteSourceFile":"core/spec/models/spree/asset_spec.rb"},{"name":"named variants defines :og_image variant with correct options","suite":"Spree::Asset at ./spec/models/spree/asset_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:7\"}}","suiteSourceFile":"core/spec/models/spree/asset_spec.rb"},{"name":"#product returns the product for the asset","suite":"Spree::Asset at ./spec/models/spree/asset_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/asset_spec.rb"},{"name":"delegated methods delegates :key to attachment","suite":"Spree::Asset at ./spec/models/spree/asset_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","suiteSourceFile":"core/spec/models/spree/asset_spec.rb"},{"name":"delegated methods delegates :attached? to attachment","suite":"Spree::Asset at ./spec/models/spree/asset_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2\"}}","suiteSourceFile":"core/spec/models/spree/asset_spec.rb"},{"name":"delegated methods delegates :variant to attachment","suite":"Spree::Asset at ./spec/models/spree/asset_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3\"}}","suiteSourceFile":"core/spec/models/spree/asset_spec.rb"},{"name":"delegated methods delegates :variable? to attachment","suite":"Spree::Asset at ./spec/models/spree/asset_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:4\"}}","suiteSourceFile":"core/spec/models/spree/asset_spec.rb"},{"name":"delegated methods delegates :blob to attachment","suite":"Spree::Asset at ./spec/models/spree/asset_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:5\"}}","suiteSourceFile":"core/spec/models/spree/asset_spec.rb"},{"name":"delegated methods delegates :filename to attachment","suite":"Spree::Asset at ./spec/models/spree/asset_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:6\"}}","suiteSourceFile":"core/spec/models/spree/asset_spec.rb"},{"name":".with_session_uploaded_assets_uuid returns assets with the given uuid","suite":"Spree::Asset at ./spec/models/spree/asset_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","suiteSourceFile":"core/spec/models/spree/asset_spec.rb"},{"name":"external URL .with_external_url returns assets with the given external URL","suite":"Spree::Asset at ./spec/models/spree/asset_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1:1\"}}","suiteSourceFile":"core/spec/models/spree/asset_spec.rb"},{"name":"external URL .with_external_url returns no assets if the external URL is blank","suite":"Spree::Asset at ./spec/models/spree/asset_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1:2\"}}","suiteSourceFile":"core/spec/models/spree/asset_spec.rb"},{"name":"external URL #external_url returns the external URL","suite":"Spree::Asset at ./spec/models/spree/asset_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2:1\"}}","suiteSourceFile":"core/spec/models/spree/asset_spec.rb"},{"name":"external URL #external_url returns nil if the external URL is blank","suite":"Spree::Asset at ./spec/models/spree/asset_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2:2\"}}","suiteSourceFile":"core/spec/models/spree/asset_spec.rb"},{"name":"external URL #external_url= sets the external URL","suite":"Spree::Asset at ./spec/models/spree/asset_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:3:1\"}}","suiteSourceFile":"core/spec/models/spree/asset_spec.rb"},{"name":"#client raises NotImplementedError","suite":"Spree::BaseAnalyticsEventHandler at ./spec/models/spree/base_analytics_event_handler_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/base_analytics_event_handler_spec.rb"},{"name":"#initialize sets user, session and request","suite":"Spree::BaseAnalyticsEventHandler at ./spec/models/spree/base_analytics_event_handler_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/base_analytics_event_handler_spec.rb"},{"name":"#handle_event raises NotImplementedError","suite":"Spree::BaseAnalyticsEventHandler at ./spec/models/spree/base_analytics_event_handler_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/base_analytics_event_handler_spec.rb"},{"name":"#event_human_name returns the label for supported events","suite":"Spree::BaseAnalyticsEventHandler at ./spec/models/spree/base_analytics_event_handler_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/base_analytics_event_handler_spec.rb"},{"name":"#event_human_name returns nil for unsupported events","suite":"Spree::BaseAnalyticsEventHandler at ./spec/models/spree/base_analytics_event_handler_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2\"}}","suiteSourceFile":"core/spec/models/spree/base_analytics_event_handler_spec.rb"},{"name":"#identity_hash when user is present returns hash with user_id, visitor_id and session_id","suite":"Spree::BaseAnalyticsEventHandler at ./spec/models/spree/base_analytics_event_handler_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:1\"}}","suiteSourceFile":"core/spec/models/spree/base_analytics_event_handler_spec.rb"},{"name":"#identity_hash when user is not present returns hash with nil user_id, visitor_id and session_id","suite":"Spree::BaseAnalyticsEventHandler at ./spec/models/spree/base_analytics_event_handler_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1\"}}","suiteSourceFile":"core/spec/models/spree/base_analytics_event_handler_spec.rb"},{"name":"AR overrides does not override Rails 5 default belongs_to_required_by_default","suite":"Spree::Base at ./spec/models/spree/base_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/base_spec.rb"},{"name":"AR overrides does not disable non-spree, Rails 5 models to validate their associated belongs_to model","suite":"Spree::Base at ./spec/models/spree/base_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/base_spec.rb"},{"name":".json_api_type example at ./spec/models/spree/base_spec.rb:50","suite":"Spree::Base at ./spec/models/spree/base_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/base_spec.rb"},{"name":".json_api_type example at ./spec/models/spree/base_spec.rb:51","suite":"Spree::Base at ./spec/models/spree/base_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","suiteSourceFile":"core/spec/models/spree/base_spec.rb"},{"name":".json_api_columns skips sensitive data","suite":"Spree::Base at ./spec/models/spree/base_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/base_spec.rb"},{"name":".json_api_columns example at ./spec/models/spree/base_spec.rb:60","suite":"Spree::Base at ./spec/models/spree/base_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","suiteSourceFile":"core/spec/models/spree/base_spec.rb"},{"name":".json_api_columns example at ./spec/models/spree/base_spec.rb:61","suite":"Spree::Base at ./spec/models/spree/base_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3\"}}","suiteSourceFile":"core/spec/models/spree/base_spec.rb"},{"name":".json_api_permitted_attributes example at ./spec/models/spree/base_spec.rb:65","suite":"Spree::Base at ./spec/models/spree/base_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/base_spec.rb"},{"name":"#compute when given an order when no line items match the tax category is 0","suite":"Spree::Calculator::DefaultTax at ./spec/models/spree/calculator/default_tax_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/calculator/default_tax_spec.rb"},{"name":"#compute when given an order when one item matches the tax category is equal to the item total * rate","suite":"Spree::Calculator::DefaultTax at ./spec/models/spree/calculator/default_tax_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/calculator/default_tax_spec.rb"},{"name":"#compute when given an order when one item matches the tax category correctly rounds to within two decimal places example at ./spec/models/spree/calculator/default_tax_spec.rb:50","suite":"Spree::Calculator::DefaultTax at ./spec/models/spree/calculator/default_tax_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/calculator/default_tax_spec.rb"},{"name":"#compute when given an order when more than one item matches the tax category is equal to the sum of the item totals * rate","suite":"Spree::Calculator::DefaultTax at ./spec/models/spree/calculator/default_tax_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/calculator/default_tax_spec.rb"},{"name":"#compute when given an order when tax is included in price will return the deducted amount from the totals","suite":"Spree::Calculator::DefaultTax at ./spec/models/spree/calculator/default_tax_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/calculator/default_tax_spec.rb"},{"name":"#compute when tax is included in price when the variant matches the tax category is equal to the item's full price * rate","suite":"Spree::Calculator::DefaultTax at ./spec/models/spree/calculator/default_tax_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1:2\"}}","suiteSourceFile":"core/spec/models/spree/calculator/default_tax_spec.rb"},{"name":"#compute when tax is included in price when the variant matches the tax category when line item is discounted is equal to the item's discounted total * rate","suite":"Spree::Calculator::DefaultTax at ./spec/models/spree/calculator/default_tax_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/calculator/default_tax_spec.rb"},{"name":"#compute when tax is not included in price when the line item is discounted is equal to the item's pre-tax total * rate","suite":"Spree::Calculator::DefaultTax at ./spec/models/spree/calculator/default_tax_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1:1\"}}","suiteSourceFile":"core/spec/models/spree/calculator/default_tax_spec.rb"},{"name":"#compute when tax is not included in price when the variant matches the tax category is equal to the item pre-tax total * rate","suite":"Spree::Calculator::DefaultTax at ./spec/models/spree/calculator/default_tax_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:2:1\"}}","suiteSourceFile":"core/spec/models/spree/calculator/default_tax_spec.rb"},{"name":"#compute when given a shipment is 5% of 15","suite":"Spree::Calculator::DefaultTax at ./spec/models/spree/calculator/default_tax_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/calculator/default_tax_spec.rb"},{"name":"#compute when given a shipment takes discounts into consideration","suite":"Spree::Calculator::DefaultTax at ./spec/models/spree/calculator/default_tax_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:2\"}}","suiteSourceFile":"core/spec/models/spree/calculator/default_tax_spec.rb"},{"name":"when given a line_item #compute_line_item computes the line item right","suite":"Spree::Calculator::DefaultTax at ./spec/models/spree/calculator/default_tax_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/calculator/default_tax_spec.rb"},{"name":"when given a line_item #compute_line_item with a 40$ promo computes the line item right","suite":"Spree::Calculator::DefaultTax at ./spec/models/spree/calculator/default_tax_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/calculator/default_tax_spec.rb"},{"name":"compute rounds result correctly","suite":"Spree::Calculator::FlatPercentItemTotal at ./spec/models/spree/calculator/flat_percent_item_total_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/calculator/flat_percent_item_total_spec.rb"},{"name":"compute returns object.amount if computed amount is greater","suite":"Spree::Calculator::FlatPercentItemTotal at ./spec/models/spree/calculator/flat_percent_item_total_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/calculator/flat_percent_item_total_spec.rb"},{"name":"#compute example at ./spec/models/spree/calculator/flat_rate_spec.rb:10","suite":"Spree::Calculator::FlatRate at ./spec/models/spree/calculator/flat_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/calculator/flat_rate_spec.rb"},{"name":"#compute behaves like computing amount correctly computes the amount as the rate when currency matches the line_item's currency","suite":"Spree::Calculator::FlatRate at ./spec/models/spree/calculator/flat_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/calculator/flat_rate_spec.rb"},{"name":"#compute behaves like computing amount correctly computes the amount as 0 when currency does not match the line_item's currency","suite":"Spree::Calculator::FlatRate at ./spec/models/spree/calculator/flat_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2\"}}","suiteSourceFile":"core/spec/models/spree/calculator/flat_rate_spec.rb"},{"name":"#compute behaves like computing amount correctly computes the amount as 0 when currency is blank","suite":"Spree::Calculator::FlatRate at ./spec/models/spree/calculator/flat_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:3\"}}","suiteSourceFile":"core/spec/models/spree/calculator/flat_rate_spec.rb"},{"name":"#compute behaves like computing amount correctly computes the amount as the rate when the currencies use different casing","suite":"Spree::Calculator::FlatRate at ./spec/models/spree/calculator/flat_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:4\"}}","suiteSourceFile":"core/spec/models/spree/calculator/flat_rate_spec.rb"},{"name":"#compute behaves like computing amount correctly computes the amount as 0 when there is no object","suite":"Spree::Calculator::FlatRate at ./spec/models/spree/calculator/flat_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:5\"}}","suiteSourceFile":"core/spec/models/spree/calculator/flat_rate_spec.rb"},{"name":"#compute when apply_only_on_full_priced_items is true when line item has compare at price returns 0","suite":"Spree::Calculator::FlatRate at ./spec/models/spree/calculator/flat_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1:1\"}}","suiteSourceFile":"core/spec/models/spree/calculator/flat_rate_spec.rb"},{"name":"#compute when apply_only_on_full_priced_items is true when line item does not have compare at price behaves like computing amount correctly computes the amount as the rate when currency matches the line_item's currency","suite":"Spree::Calculator::FlatRate at ./spec/models/spree/calculator/flat_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/calculator/flat_rate_spec.rb"},{"name":"#compute when apply_only_on_full_priced_items is true when line item does not have compare at price behaves like computing amount correctly computes the amount as 0 when currency does not match the line_item's currency","suite":"Spree::Calculator::FlatRate at ./spec/models/spree/calculator/flat_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:2:1:2\"}}","suiteSourceFile":"core/spec/models/spree/calculator/flat_rate_spec.rb"},{"name":"#compute when apply_only_on_full_priced_items is true when line item does not have compare at price behaves like computing amount correctly computes the amount as 0 when currency is blank","suite":"Spree::Calculator::FlatRate at ./spec/models/spree/calculator/flat_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:2:1:3\"}}","suiteSourceFile":"core/spec/models/spree/calculator/flat_rate_spec.rb"},{"name":"#compute when apply_only_on_full_priced_items is true when line item does not have compare at price behaves like computing amount correctly computes the amount as the rate when the currencies use different casing","suite":"Spree::Calculator::FlatRate at ./spec/models/spree/calculator/flat_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:2:1:4\"}}","suiteSourceFile":"core/spec/models/spree/calculator/flat_rate_spec.rb"},{"name":"#compute when apply_only_on_full_priced_items is true when line item does not have compare at price behaves like computing amount correctly computes the amount as 0 when there is no object","suite":"Spree::Calculator::FlatRate at ./spec/models/spree/calculator/flat_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:2:1:5\"}}","suiteSourceFile":"core/spec/models/spree/calculator/flat_rate_spec.rb"},{"name":"#compute example at ./spec/models/spree/calculator/flexi_rate_spec.rb:10","suite":"Spree::Calculator::FlexiRate at ./spec/models/spree/calculator/flexi_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/calculator/flexi_rate_spec.rb"},{"name":"#compute when apply_only_on_full_priced_items is true returns 0","suite":"Spree::Calculator::FlexiRate at ./spec/models/spree/calculator/flexi_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/calculator/flexi_rate_spec.rb"},{"name":"#compute when apply_only_on_full_priced_items is true behaves like computes amount correctly computes amount correctly when all fees are 0","suite":"Spree::Calculator::FlexiRate at ./spec/models/spree/calculator/flexi_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/calculator/flexi_rate_spec.rb"},{"name":"#compute when apply_only_on_full_priced_items is true behaves like computes amount correctly computes amount correctly when first_item has a value","suite":"Spree::Calculator::FlexiRate at ./spec/models/spree/calculator/flexi_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:2\"}}","suiteSourceFile":"core/spec/models/spree/calculator/flexi_rate_spec.rb"},{"name":"#compute when apply_only_on_full_priced_items is true behaves like computes amount correctly computes amount correctly when additional_items has a value","suite":"Spree::Calculator::FlexiRate at ./spec/models/spree/calculator/flexi_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:3\"}}","suiteSourceFile":"core/spec/models/spree/calculator/flexi_rate_spec.rb"},{"name":"#compute when apply_only_on_full_priced_items is true behaves like computes amount correctly computes amount correctly when additional_items and first_item have values","suite":"Spree::Calculator::FlexiRate at ./spec/models/spree/calculator/flexi_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:4\"}}","suiteSourceFile":"core/spec/models/spree/calculator/flexi_rate_spec.rb"},{"name":"#compute when apply_only_on_full_priced_items is true behaves like computes amount correctly computes amount correctly when additional_items and first_item have values AND max items has value","suite":"Spree::Calculator::FlexiRate at ./spec/models/spree/calculator/flexi_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:5\"}}","suiteSourceFile":"core/spec/models/spree/calculator/flexi_rate_spec.rb"},{"name":"#compute when apply_only_on_full_priced_items is true behaves like computes amount correctly allows creation of new object with all the attributes","suite":"Spree::Calculator::FlexiRate at ./spec/models/spree/calculator/flexi_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:6\"}}","suiteSourceFile":"core/spec/models/spree/calculator/flexi_rate_spec.rb"},{"name":"#compute example at ./spec/models/spree/calculator/percent_on_line_item_spec.rb:10","suite":"Spree::Calculator::PercentOnLineItem at ./spec/models/spree/calculator/percent_on_line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/calculator/percent_on_line_item_spec.rb"},{"name":"#compute behaves like computing amount correctly rounds result correctly","suite":"Spree::Calculator::PercentOnLineItem at ./spec/models/spree/calculator/percent_on_line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/calculator/percent_on_line_item_spec.rb"},{"name":"#compute behaves like computing amount correctly returns object.amount if computed amount is greater","suite":"Spree::Calculator::PercentOnLineItem at ./spec/models/spree/calculator/percent_on_line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2\"}}","suiteSourceFile":"core/spec/models/spree/calculator/percent_on_line_item_spec.rb"},{"name":"#compute when apply_only_on_full_priced_items preference is true when line item has a compare at price returns 0","suite":"Spree::Calculator::PercentOnLineItem at ./spec/models/spree/calculator/percent_on_line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1:1\"}}","suiteSourceFile":"core/spec/models/spree/calculator/percent_on_line_item_spec.rb"},{"name":"#compute when apply_only_on_full_priced_items preference is true when line item does not have a compare at price behaves like computing amount correctly rounds result correctly","suite":"Spree::Calculator::PercentOnLineItem at ./spec/models/spree/calculator/percent_on_line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/calculator/percent_on_line_item_spec.rb"},{"name":"#compute when apply_only_on_full_priced_items preference is true when line item does not have a compare at price behaves like computing amount correctly returns object.amount if computed amount is greater","suite":"Spree::Calculator::PercentOnLineItem at ./spec/models/spree/calculator/percent_on_line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:2:1:2\"}}","suiteSourceFile":"core/spec/models/spree/calculator/percent_on_line_item_spec.rb"},{"name":"computes with an order object","suite":"Spree::Calculator::PriceSack at ./spec/models/spree/calculator/price_sack_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","suiteSourceFile":"core/spec/models/spree/calculator/price_sack_spec.rb"},{"name":"computes with a shipment object","suite":"Spree::Calculator::PriceSack at ./spec/models/spree/calculator/price_sack_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2\"}}","suiteSourceFile":"core/spec/models/spree/calculator/price_sack_spec.rb"},{"name":"computes the correct amount","suite":"Spree::Calculator::PriceSack at ./spec/models/spree/calculator/price_sack_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3\"}}","suiteSourceFile":"core/spec/models/spree/calculator/price_sack_spec.rb"},{"name":"not an exchange no promotions or taxes example at ./spec/models/spree/calculator/refunds/default_refund_amount_spec.rb:19","suite":"Spree::Calculator::Returns::DefaultRefundAmount at ./spec/models/spree/calculator/refunds/default_refund_amount_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/calculator/refunds/default_refund_amount_spec.rb"},{"name":"not an exchange order adjustments example at ./spec/models/spree/calculator/refunds/default_refund_amount_spec.rb:30","suite":"Spree::Calculator::Returns::DefaultRefundAmount at ./spec/models/spree/calculator/refunds/default_refund_amount_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/calculator/refunds/default_refund_amount_spec.rb"},{"name":"not an exchange shipping adjustments example at ./spec/models/spree/calculator/refunds/default_refund_amount_spec.rb:38","suite":"Spree::Calculator::Returns::DefaultRefundAmount at ./spec/models/spree/calculator/refunds/default_refund_amount_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/calculator/refunds/default_refund_amount_spec.rb"},{"name":"an exchange example at ./spec/models/spree/calculator/refunds/default_refund_amount_spec.rb:45","suite":"Spree::Calculator::Returns::DefaultRefundAmount at ./spec/models/spree/calculator/refunds/default_refund_amount_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/calculator/refunds/default_refund_amount_spec.rb"},{"name":"has a description for the class","suite":"Spree::Calculator::Shipping::DigitalDelivery at ./spec/models/spree/calculator/shipping/digital_delivery_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","suiteSourceFile":"core/spec/models/spree/calculator/shipping/digital_delivery_spec.rb"},{"name":"#compute_package ignores the passed in object","suite":"Spree::Calculator::Shipping::DigitalDelivery at ./spec/models/spree/calculator/shipping/digital_delivery_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/calculator/shipping/digital_delivery_spec.rb"},{"name":"#compute_package alwayses return the preferred_amount","suite":"Spree::Calculator::Shipping::DigitalDelivery at ./spec/models/spree/calculator/shipping/digital_delivery_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","suiteSourceFile":"core/spec/models/spree/calculator/shipping/digital_delivery_spec.rb"},{"name":"#available? returns true for a digital order","suite":"Spree::Calculator::Shipping::DigitalDelivery at ./spec/models/spree/calculator/shipping/digital_delivery_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/calculator/shipping/digital_delivery_spec.rb"},{"name":"#available? returns false for a mixed order","suite":"Spree::Calculator::Shipping::DigitalDelivery at ./spec/models/spree/calculator/shipping/digital_delivery_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","suiteSourceFile":"core/spec/models/spree/calculator/shipping/digital_delivery_spec.rb"},{"name":"#available? returns false for an exclusively non-digital order","suite":"Spree::Calculator::Shipping::DigitalDelivery at ./spec/models/spree/calculator/shipping/digital_delivery_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3\"}}","suiteSourceFile":"core/spec/models/spree/calculator/shipping/digital_delivery_spec.rb"},{"name":"rounds result correctly","suite":"Spree::Calculator::Shipping::FlatPercentItemTotal at ./spec/models/spree/calculator/shipping/flat_percent_item_total_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","suiteSourceFile":"core/spec/models/spree/calculator/shipping/flat_percent_item_total_spec.rb"},{"name":"without any constraints returns the amount","suite":"Spree::Calculator::Shipping::FlatRate at ./spec/models/spree/calculator/shipping/flat_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/calculator/shipping/flat_rate_spec.rb"},{"name":"with weight constraints returns amount based on the contents item total","suite":"Spree::Calculator::Shipping::FlatRate at ./spec/models/spree/calculator/shipping/flat_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/calculator/shipping/flat_rate_spec.rb"},{"name":"with price constraints returns amount based on the contents weight","suite":"Spree::Calculator::Shipping::FlatRate at ./spec/models/spree/calculator/shipping/flat_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/calculator/shipping/flat_rate_spec.rb"},{"name":"with both weight and price constraints returns amount based on the contents weight and price","suite":"Spree::Calculator::Shipping::FlatRate at ./spec/models/spree/calculator/shipping/flat_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/calculator/shipping/flat_rate_spec.rb"},{"name":"compute computes amount correctly when all fees are 0","suite":"Spree::Calculator::Shipping::FlexiRate at ./spec/models/spree/calculator/shipping/flexi_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/calculator/shipping/flexi_rate_spec.rb"},{"name":"compute computes amount correctly when first_item has a value","suite":"Spree::Calculator::Shipping::FlexiRate at ./spec/models/spree/calculator/shipping/flexi_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/calculator/shipping/flexi_rate_spec.rb"},{"name":"compute computes amount correctly when additional_items has a value","suite":"Spree::Calculator::Shipping::FlexiRate at ./spec/models/spree/calculator/shipping/flexi_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/models/spree/calculator/shipping/flexi_rate_spec.rb"},{"name":"compute computes amount correctly when additional_items and first_item have values","suite":"Spree::Calculator::Shipping::FlexiRate at ./spec/models/spree/calculator/shipping/flexi_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","suiteSourceFile":"core/spec/models/spree/calculator/shipping/flexi_rate_spec.rb"},{"name":"compute computes amount correctly when additional_items and first_item have values AND max items has value","suite":"Spree::Calculator::Shipping::FlexiRate at ./spec/models/spree/calculator/shipping/flexi_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","suiteSourceFile":"core/spec/models/spree/calculator/shipping/flexi_rate_spec.rb"},{"name":"compute allows creation of new object with all the attributes","suite":"Spree::Calculator::Shipping::FlexiRate at ./spec/models/spree/calculator/shipping/flexi_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","suiteSourceFile":"core/spec/models/spree/calculator/shipping/flexi_rate_spec.rb"},{"name":"correctly calculates per item shipping","suite":"Spree::Calculator::Shipping::PerItem at ./spec/models/spree/calculator/shipping/per_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","suiteSourceFile":"core/spec/models/spree/calculator/shipping/per_item_spec.rb"},{"name":"computes the correct amount","suite":"Spree::Calculator::Shipping::PriceSack at ./spec/models/spree/calculator/shipping/price_sack_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","suiteSourceFile":"core/spec/models/spree/calculator/shipping/price_sack_spec.rb"},{"name":"#valid? when tiers is not a hash example at ./spec/models/spree/calculator/tiered_flat_rate_spec.rb:12","suite":"Spree::Calculator::TieredFlatRate at ./spec/models/spree/calculator/tiered_flat_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/calculator/tiered_flat_rate_spec.rb"},{"name":"#valid? when tiers is a hash and one of the keys is not a positive number example at ./spec/models/spree/calculator/tiered_flat_rate_spec.rb:19","suite":"Spree::Calculator::TieredFlatRate at ./spec/models/spree/calculator/tiered_flat_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/calculator/tiered_flat_rate_spec.rb"},{"name":"#compute when amount falls within the first tier example at ./spec/models/spree/calculator/tiered_flat_rate_spec.rb:40","suite":"Spree::Calculator::TieredFlatRate at ./spec/models/spree/calculator/tiered_flat_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/calculator/tiered_flat_rate_spec.rb"},{"name":"#compute when amount falls within the second tier example at ./spec/models/spree/calculator/tiered_flat_rate_spec.rb:46","suite":"Spree::Calculator::TieredFlatRate at ./spec/models/spree/calculator/tiered_flat_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/calculator/tiered_flat_rate_spec.rb"},{"name":"#valid? when base percent is less than zero example at ./spec/models/spree/calculator/tiered_percent_spec.rb:12","suite":"Spree::Calculator::TieredPercent at ./spec/models/spree/calculator/tiered_percent_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/calculator/tiered_percent_spec.rb"},{"name":"#valid? when base percent is greater than 100 example at ./spec/models/spree/calculator/tiered_percent_spec.rb:18","suite":"Spree::Calculator::TieredPercent at ./spec/models/spree/calculator/tiered_percent_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/calculator/tiered_percent_spec.rb"},{"name":"#valid? when tiers is not a hash example at ./spec/models/spree/calculator/tiered_percent_spec.rb:24","suite":"Spree::Calculator::TieredPercent at ./spec/models/spree/calculator/tiered_percent_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/calculator/tiered_percent_spec.rb"},{"name":"#valid? when tiers is a hash and one of the keys is not a positive number example at ./spec/models/spree/calculator/tiered_percent_spec.rb:31","suite":"Spree::Calculator::TieredPercent at ./spec/models/spree/calculator/tiered_percent_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1:1\"}}","suiteSourceFile":"core/spec/models/spree/calculator/tiered_percent_spec.rb"},{"name":"#valid? when tiers is a hash and one of the values is not a percent example at ./spec/models/spree/calculator/tiered_percent_spec.rb:37","suite":"Spree::Calculator::TieredPercent at ./spec/models/spree/calculator/tiered_percent_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:2:1\"}}","suiteSourceFile":"core/spec/models/spree/calculator/tiered_percent_spec.rb"},{"name":"#compute when amount falls within the first tier example at ./spec/models/spree/calculator/tiered_percent_spec.rb:58","suite":"Spree::Calculator::TieredPercent at ./spec/models/spree/calculator/tiered_percent_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/calculator/tiered_percent_spec.rb"},{"name":"#compute when amount falls within the second tier example at ./spec/models/spree/calculator/tiered_percent_spec.rb:64","suite":"Spree::Calculator::TieredPercent at ./spec/models/spree/calculator/tiered_percent_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/calculator/tiered_percent_spec.rb"},{"name":"with computable and compute methods stubbed out with a Spree::LineItem calls compute_line_item","suite":"Spree::Calculator at ./spec/models/spree/calculator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/calculator_spec.rb"},{"name":"with computable and compute methods stubbed out with a Spree::Order calls compute_order","suite":"Spree::Calculator at ./spec/models/spree/calculator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/calculator_spec.rb"},{"name":"with computable and compute methods stubbed out with a Spree::Shipment calls compute_shipment","suite":"Spree::Calculator at ./spec/models/spree/calculator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/calculator_spec.rb"},{"name":"with computable and compute methods stubbed out with a arbitrary object calls the correct compute","suite":"Spree::Calculator at ./spec/models/spree/calculator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/calculator_spec.rb"},{"name":"with computable with no stubbing with a Spree::LineItem raises NotImplementedError","suite":"Spree::Calculator at ./spec/models/spree/calculator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/calculator_spec.rb"},{"name":"with computable with no stubbing with a Spree::Order raises NotImplementedError","suite":"Spree::Calculator at ./spec/models/spree/calculator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/calculator_spec.rb"},{"name":"with computable with no stubbing with a Spree::Shipment raises NotImplementedError","suite":"Spree::Calculator at ./spec/models/spree/calculator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:3:1\"}}","suiteSourceFile":"core/spec/models/spree/calculator_spec.rb"},{"name":"with computable with no stubbing with a arbitrary object raises NotImplementedError","suite":"Spree::Calculator at ./spec/models/spree/calculator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:4:1\"}}","suiteSourceFile":"core/spec/models/spree/calculator_spec.rb"},{"name":"cannot link the same taxon to the same product more than once","suite":"Spree::Classification at ./spec/models/spree/classification_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","suiteSourceFile":"core/spec/models/spree/classification_spec.rb"},{"name":"has a valid fixtures","suite":"Spree::Classification at ./spec/models/spree/classification_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2\"}}","suiteSourceFile":"core/spec/models/spree/classification_spec.rb"},{"name":"removing product from taxon resets positions","suite":"Spree::Classification at ./spec/models/spree/classification_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/classification_spec.rb"},{"name":"replacing taxon's products resets positions","suite":"Spree::Classification at ./spec/models/spree/classification_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/classification_spec.rb"},{"name":"removing taxon from product resets positions","suite":"Spree::Classification at ./spec/models/spree/classification_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","suiteSourceFile":"core/spec/models/spree/classification_spec.rb"},{"name":"replacing product's taxons resets positions","suite":"Spree::Classification at ./spec/models/spree/classification_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","suiteSourceFile":"core/spec/models/spree/classification_spec.rb"},{"name":"destroying classification resets positions","suite":"Spree::Classification at ./spec/models/spree/classification_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","suiteSourceFile":"core/spec/models/spree/classification_spec.rb"},{"name":"counter cache classification_count on taxon increments when a classification is created","suite":"Spree::Classification at ./spec/models/spree/classification_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1:1\"}}","suiteSourceFile":"core/spec/models/spree/classification_spec.rb"},{"name":"counter cache classification_count on taxon decrements when a classification is destroyed","suite":"Spree::Classification at ./spec/models/spree/classification_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1:2\"}}","suiteSourceFile":"core/spec/models/spree/classification_spec.rb"},{"name":"counter cache classification_count on taxon correctly counts multiple classifications","suite":"Spree::Classification at ./spec/models/spree/classification_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1:3\"}}","suiteSourceFile":"core/spec/models/spree/classification_spec.rb"},{"name":"counter cache classification_count on product increments when a classification is created","suite":"Spree::Classification at ./spec/models/spree/classification_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2:1\"}}","suiteSourceFile":"core/spec/models/spree/classification_spec.rb"},{"name":"counter cache classification_count on product decrements when a classification is destroyed","suite":"Spree::Classification at ./spec/models/spree/classification_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2:2\"}}","suiteSourceFile":"core/spec/models/spree/classification_spec.rb"},{"name":"counter cache classification_count on product correctly counts multiple classifications","suite":"Spree::Classification at ./spec/models/spree/classification_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2:3\"}}","suiteSourceFile":"core/spec/models/spree/classification_spec.rb"},{"name":".grouped_taxon_ids_for_products returns the correct taxon ids","suite":"Spree::Classification at ./spec/models/spree/classification_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1\"}}","suiteSourceFile":"core/spec/models/spree/classification_spec.rb"},{"name":".grouped_taxon_ids_for_products when empty taxon groups returns an empty array","suite":"Spree::Classification at ./spec/models/spree/classification_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:2:1\"}}","suiteSourceFile":"core/spec/models/spree/classification_spec.rb"},{"name":".grouped_taxon_ids_for_products when empty product ids returns an empty array","suite":"Spree::Classification at ./spec/models/spree/classification_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:3:1\"}}","suiteSourceFile":"core/spec/models/spree/classification_spec.rb"},{"name":".money_methods currency is not defined generates a display_method that builds a Spree::Money without options","suite":"Spree::DisplayMoney at ./spec/models/spree/concerns/display_money_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/concerns/display_money_spec.rb"},{"name":".money_methods currency is not defined wrapped method accepts `:currency` keyword argument defined method passes the received keyword argument to the wrapped method","suite":"Spree::DisplayMoney at ./spec/models/spree/concerns/display_money_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/concerns/display_money_spec.rb"},{"name":".money_methods currency is not defined wrapped method accepts `currency` argument defined method passes the received keyword argument to the wrapped method","suite":"Spree::DisplayMoney at ./spec/models/spree/concerns/display_money_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/concerns/display_money_spec.rb"},{"name":".money_methods currency is defined generates a display_* method that builds a Spree::Money with currency","suite":"Spree::DisplayMoney at ./spec/models/spree/concerns/display_money_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/concerns/display_money_spec.rb"},{"name":".money_methods with multiple + options generates a display_* method that builds a Spree::Money with the specified options","suite":"Spree::DisplayMoney at ./spec/models/spree/concerns/display_money_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/concerns/display_money_spec.rb"},{"name":".ransackable_attributes returns default and whitelisted attributes","suite":"Spree::RansackableAttributes at ./spec/models/spree/concerns/ransackable_attributes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/concerns/ransackable_attributes_spec.rb"},{"name":".ransackable_attributes merges custom attributes from Spree.ransack","suite":"Spree::RansackableAttributes at ./spec/models/spree/concerns/ransackable_attributes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/concerns/ransackable_attributes_spec.rb"},{"name":".ransackable_attributes does not duplicate attributes","suite":"Spree::RansackableAttributes at ./spec/models/spree/concerns/ransackable_attributes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/models/spree/concerns/ransackable_attributes_spec.rb"},{"name":".ransackable_associations returns whitelisted associations","suite":"Spree::RansackableAttributes at ./spec/models/spree/concerns/ransackable_attributes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/concerns/ransackable_attributes_spec.rb"},{"name":".ransackable_associations merges custom associations from Spree.ransack","suite":"Spree::RansackableAttributes at ./spec/models/spree/concerns/ransackable_attributes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","suiteSourceFile":"core/spec/models/spree/concerns/ransackable_attributes_spec.rb"},{"name":".ransackable_associations does not duplicate associations","suite":"Spree::RansackableAttributes at ./spec/models/spree/concerns/ransackable_attributes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3\"}}","suiteSourceFile":"core/spec/models/spree/concerns/ransackable_attributes_spec.rb"},{"name":".ransackable_scopes returns whitelisted scopes","suite":"Spree::RansackableAttributes at ./spec/models/spree/concerns/ransackable_attributes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/concerns/ransackable_attributes_spec.rb"},{"name":".ransackable_scopes merges custom scopes from Spree.ransack","suite":"Spree::RansackableAttributes at ./spec/models/spree/concerns/ransackable_attributes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","suiteSourceFile":"core/spec/models/spree/concerns/ransackable_attributes_spec.rb"},{"name":".ransackable_scopes does not duplicate scopes","suite":"Spree::RansackableAttributes at ./spec/models/spree/concerns/ransackable_attributes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3\"}}","suiteSourceFile":"core/spec/models/spree/concerns/ransackable_attributes_spec.rb"},{"name":"instance methods #add_user adds a user to the resource with the default role","suite":"Spree::UserManagement at ./spec/models/spree/concerns/user_management_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/concerns/user_management_spec.rb"},{"name":"instance methods #add_user adds a user to the resource with a specified role","suite":"Spree::UserManagement at ./spec/models/spree/concerns/user_management_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/concerns/user_management_spec.rb"},{"name":"instance methods #remove_user removes a user from the resource","suite":"Spree::UserManagement at ./spec/models/spree/concerns/user_management_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/concerns/user_management_spec.rb"},{"name":"instance methods #default_user_role returns the default admin role","suite":"Spree::UserManagement at ./spec/models/spree/concerns/user_management_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/concerns/user_management_spec.rb"},{"name":"associations has many role_users","suite":"Spree::UserManagement at ./spec/models/spree/concerns/user_management_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/concerns/user_management_spec.rb"},{"name":"associations has many users through role_users","suite":"Spree::UserManagement at ./spec/models/spree/concerns/user_management_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","suiteSourceFile":"core/spec/models/spree/concerns/user_management_spec.rb"},{"name":"associations has many invitations","suite":"Spree::UserManagement at ./spec/models/spree/concerns/user_management_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3\"}}","suiteSourceFile":"core/spec/models/spree/concerns/user_management_spec.rb"},{"name":"#last_incomplete_spree_order with an incomplete order example at ./spec/models/spree/concerns/user_methods_spec.rb:20","suite":"Spree::UserMethods at ./spec/models/spree/concerns/user_methods_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/concerns/user_methods_spec.rb"},{"name":"#last_incomplete_spree_order with incomplete canceled order example at ./spec/models/spree/concerns/user_methods_spec.rb:26","suite":"Spree::UserMethods at ./spec/models/spree/concerns/user_methods_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/concerns/user_methods_spec.rb"},{"name":"#last_incomplete_spree_order without an incomplete order example at ./spec/models/spree/concerns/user_methods_spec.rb:30","suite":"Spree::UserMethods at ./spec/models/spree/concerns/user_methods_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/concerns/user_methods_spec.rb"},{"name":"#check_completed_orders rstrict t delete dependent destroyed does not destroy dependent destroy items","suite":"Spree::UserMethods at ./spec/models/spree/concerns/user_methods_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/concerns/user_methods_spec.rb"},{"name":"#check_completed_orders allow to destroy dependent destroy does not destroy dependent destroy items","suite":"Spree::UserMethods at ./spec/models/spree/concerns/user_methods_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/concerns/user_methods_spec.rb"},{"name":"#payment_sources includes only not expired credit cards with payment profile that belong to subject user","suite":"Spree::UserMethods at ./spec/models/spree/concerns/user_methods_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/concerns/user_methods_spec.rb"},{"name":"#payment_sources does not include credit cards that belong to other user","suite":"Spree::UserMethods at ./spec/models/spree/concerns/user_methods_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","suiteSourceFile":"core/spec/models/spree/concerns/user_methods_spec.rb"},{"name":"#payment_sources does not include credit cards without payment profile","suite":"Spree::UserMethods at ./spec/models/spree/concerns/user_methods_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3\"}}","suiteSourceFile":"core/spec/models/spree/concerns/user_methods_spec.rb"},{"name":"#payment_sources does not include outdated credit cards","suite":"Spree::UserMethods at ./spec/models/spree/concerns/user_methods_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4\"}}","suiteSourceFile":"core/spec/models/spree/concerns/user_methods_spec.rb"},{"name":"#payment_sources does not include credit cards with inactive payment method","suite":"Spree::UserMethods at ./spec/models/spree/concerns/user_methods_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:5\"}}","suiteSourceFile":"core/spec/models/spree/concerns/user_methods_spec.rb"},{"name":"#scramble_email_and_names scramble email and names","suite":"Spree::UserMethods at ./spec/models/spree/concerns/user_methods_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/concerns/user_methods_spec.rb"},{"name":"#invited_by returns the user who invited the current user","suite":"Spree::UserMethods at ./spec/models/spree/concerns/user_methods_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","suiteSourceFile":"core/spec/models/spree/concerns/user_methods_spec.rb"},{"name":".multi_search returns users based on an email","suite":"Spree::UserMethods at ./spec/models/spree/concerns/user_methods_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","suiteSourceFile":"core/spec/models/spree/concerns/user_methods_spec.rb"},{"name":".multi_search returns users based on the first name","suite":"Spree::UserMethods at ./spec/models/spree/concerns/user_methods_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2\"}}","suiteSourceFile":"core/spec/models/spree/concerns/user_methods_spec.rb"},{"name":"#can_be_deleted? when user has a role on current store returns true if another user also has a role on the store","suite":"Spree::UserMethods at ./spec/models/spree/concerns/user_methods_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1:1\"}}","suiteSourceFile":"core/spec/models/spree/concerns/user_methods_spec.rb"},{"name":"#can_be_deleted? when user has a role on current store returns false if user is the last with a role on the store","suite":"Spree::UserMethods at ./spec/models/spree/concerns/user_methods_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1:2\"}}","suiteSourceFile":"core/spec/models/spree/concerns/user_methods_spec.rb"},{"name":"#can_be_deleted? when user has no role on current store returns true if user has no completed orders","suite":"Spree::UserMethods at ./spec/models/spree/concerns/user_methods_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2:1\"}}","suiteSourceFile":"core/spec/models/spree/concerns/user_methods_spec.rb"},{"name":"#can_be_deleted? when user has no role on current store returns false if user has completed orders","suite":"Spree::UserMethods at ./spec/models/spree/concerns/user_methods_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2:2\"}}","suiteSourceFile":"core/spec/models/spree/concerns/user_methods_spec.rb"},{"name":"#add_role adds a role to the user","suite":"Spree::UserRoles at ./spec/models/spree/concerns/user_roles_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/concerns/user_roles_spec.rb"},{"name":"#add_role when a resource parameter is provided adds a role to the user for the resource","suite":"Spree::UserRoles at ./spec/models/spree/concerns/user_roles_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/concerns/user_roles_spec.rb"},{"name":"#remove_role removes a role from the user","suite":"Spree::UserRoles at ./spec/models/spree/concerns/user_roles_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/concerns/user_roles_spec.rb"},{"name":"#remove_role when a resource parameter is provided removes a role from the user for the resource","suite":"Spree::UserRoles at ./spec/models/spree/concerns/user_roles_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/concerns/user_roles_spec.rb"},{"name":"#has_spree_role? with a role example at ./spec/models/spree/concerns/user_roles_spec.rb:56","suite":"Spree::UserRoles at ./spec/models/spree/concerns/user_roles_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","suiteSourceFile":"core/spec/models/spree/concerns/user_roles_spec.rb"},{"name":"#has_spree_role? without a role example at ./spec/models/spree/concerns/user_roles_spec.rb:60","suite":"Spree::UserRoles at ./spec/models/spree/concerns/user_roles_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","suiteSourceFile":"core/spec/models/spree/concerns/user_roles_spec.rb"},{"name":"#has_spree_role? when a resource parameter is provided when the user has the role for the resource returns true","suite":"Spree::UserRoles at ./spec/models/spree/concerns/user_roles_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3:1:1\"}}","suiteSourceFile":"core/spec/models/spree/concerns/user_roles_spec.rb"},{"name":"#has_spree_role? when a resource parameter is provided when the user does not have the role for the resource returns false","suite":"Spree::UserRoles at ./spec/models/spree/concerns/user_roles_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3:2:1\"}}","suiteSourceFile":"core/spec/models/spree/concerns/user_roles_spec.rb"},{"name":"#spree_admin? example at ./spec/models/spree/concerns/user_roles_spec.rb:83","suite":"Spree::UserRoles at ./spec/models/spree/concerns/user_roles_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/concerns/user_roles_spec.rb"},{"name":"#spree_admin? when a resource parameter is provided checks against the resource","suite":"Spree::UserRoles at ./spec/models/spree/concerns/user_roles_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1\"}}","suiteSourceFile":"core/spec/models/spree/concerns/user_roles_spec.rb"},{"name":".spree_admin_created? returns true when admin exists","suite":"Spree::UserRoles at ./spec/models/spree/concerns/user_roles_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","suiteSourceFile":"core/spec/models/spree/concerns/user_roles_spec.rb"},{"name":".spree_admin_created? returns false when admin does not exist","suite":"Spree::UserRoles at ./spec/models/spree/concerns/user_roles_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2\"}}","suiteSourceFile":"core/spec/models/spree/concerns/user_roles_spec.rb"},{"name":"#gross_amount with no default zone set does not call TaxRate.included_tax_amount_for","suite":"Spree::VatPriceCalculation at ./spec/models/spree/concerns/vat_price_calculation_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/concerns/vat_price_calculation_spec.rb"},{"name":"#gross_amount with no zone given does not call TaxRate.included_tax_amount_for","suite":"Spree::VatPriceCalculation at ./spec/models/spree/concerns/vat_price_calculation_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/concerns/vat_price_calculation_spec.rb"},{"name":"#gross_amount with a default zone set and zone equal to the default zone does not call 'TaxRate.included_tax_amount_for'","suite":"Spree::VatPriceCalculation at ./spec/models/spree/concerns/vat_price_calculation_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1:1\"}}","suiteSourceFile":"core/spec/models/spree/concerns/vat_price_calculation_spec.rb"},{"name":"#gross_amount with a default zone set and zone not equal to default zone calls TaxRate.included_tax_amount_for two times","suite":"Spree::VatPriceCalculation at ./spec/models/spree/concerns/vat_price_calculation_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:2:1\"}}","suiteSourceFile":"core/spec/models/spree/concerns/vat_price_calculation_spec.rb"},{"name":"validates uniqueness","suite":"Spree::Country at ./spec/models/spree/country_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","suiteSourceFile":"core/spec/models/spree/country_spec.rb"},{"name":".by_iso will return Country by iso","suite":"Spree::Country at ./spec/models/spree/country_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/country_spec.rb"},{"name":".by_iso will return Country by iso3","suite":"Spree::Country at ./spec/models/spree/country_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","suiteSourceFile":"core/spec/models/spree/country_spec.rb"},{"name":".by_iso will return nil with wrong iso or iso3","suite":"Spree::Country at ./spec/models/spree/country_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3\"}}","suiteSourceFile":"core/spec/models/spree/country_spec.rb"},{"name":".by_iso will return Country by lower iso","suite":"Spree::Country at ./spec/models/spree/country_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:4\"}}","suiteSourceFile":"core/spec/models/spree/country_spec.rb"},{"name":"#default? no arguments returns true for store default country","suite":"Spree::Country at ./spec/models/spree/country_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","suiteSourceFile":"core/spec/models/spree/country_spec.rb"},{"name":"#default? no arguments returns false for other countries","suite":"Spree::Country at ./spec/models/spree/country_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:2\"}}","suiteSourceFile":"core/spec/models/spree/country_spec.rb"},{"name":"#default? other store passed returns true for store default country","suite":"Spree::Country at ./spec/models/spree/country_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","suiteSourceFile":"core/spec/models/spree/country_spec.rb"},{"name":"#default? other store passed returns false for other countries","suite":"Spree::Country at ./spec/models/spree/country_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:2\"}}","suiteSourceFile":"core/spec/models/spree/country_spec.rb"},{"name":"validations code validates presence","suite":"Spree::CouponCode at ./spec/models/spree/coupon_code_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/coupon_code_spec.rb"},{"name":"validations code validates uniqueness","suite":"Spree::CouponCode at ./spec/models/spree/coupon_code_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/coupon_code_spec.rb"},{"name":"responds to track_data","suite":"Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2\"}}","suiteSourceFile":"core/spec/models/spree/credit_card_spec.rb"},{"name":"ensures only one credit card per user is default at a time","suite":"Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16\"}}","suiteSourceFile":"core/spec/models/spree/credit_card_spec.rb"},{"name":"allows default credit cards for different users","suite":"Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:17\"}}","suiteSourceFile":"core/spec/models/spree/credit_card_spec.rb"},{"name":"allows this card to save even if the previously default card has expired","suite":"Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18\"}}","suiteSourceFile":"core/spec/models/spree/credit_card_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:4","suite":"Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/credit_card_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:5","suite":"Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/credit_card_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:7","suite":"Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/models/spree/credit_card_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:8","suite":"Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","suiteSourceFile":"core/spec/models/spree/credit_card_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:10","suite":"Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","suiteSourceFile":"core/spec/models/spree/credit_card_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:11","suite":"Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","suiteSourceFile":"core/spec/models/spree/credit_card_spec.rb"},{"name":"behaves like metadata reads data as symbolized keys","suite":"Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7\"}}","suiteSourceFile":"core/spec/models/spree/credit_card_spec.rb"},{"name":"behaves like metadata reads data as not symbolized keys","suite":"Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8\"}}","suiteSourceFile":"core/spec/models/spree/credit_card_spec.rb"},{"name":"behaves like metadata can query records by metadata properties","suite":"Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:10\"}}","suiteSourceFile":"core/spec/models/spree/credit_card_spec.rb"},{"name":"#can_capture? when payment is pending behaves like can be captured can be captured","suite":"Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/credit_card_spec.rb"},{"name":"#can_capture? when payment is checkout behaves like can be captured can be captured","suite":"Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/credit_card_spec.rb"},{"name":"#can_capture? when payment is invalid cannot be captured","suite":"Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3:1\"}}","suiteSourceFile":"core/spec/models/spree/credit_card_spec.rb"},{"name":"#can_void? when payment is not voided is true","suite":"Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1\"}}","suiteSourceFile":"core/spec/models/spree/credit_card_spec.rb"},{"name":"#can_void? when payment is voided is false","suite":"Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1\"}}","suiteSourceFile":"core/spec/models/spree/credit_card_spec.rb"},{"name":"#can_credit? when payment is not completed behaves like can not credit can not credit","suite":"Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/credit_card_spec.rb"},{"name":"#can_credit? when payment is completed when credit_allowed is zero behaves like can not credit can not credit","suite":"Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/credit_card_spec.rb"},{"name":"#can_credit? when payment is completed when credit_allowed bigger than zero can credit","suite":"Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/credit_card_spec.rb"},{"name":"#valid? validates presence of number","suite":"Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","suiteSourceFile":"core/spec/models/spree/credit_card_spec.rb"},{"name":"#valid? validates presence of security code","suite":"Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2\"}}","suiteSourceFile":"core/spec/models/spree/credit_card_spec.rb"},{"name":"#valid? validates name presence","suite":"Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:3\"}}","suiteSourceFile":"core/spec/models/spree/credit_card_spec.rb"},{"name":"#valid? only validates on create","suite":"Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:4\"}}","suiteSourceFile":"core/spec/models/spree/credit_card_spec.rb"},{"name":"#valid? encrypted data is present does not validate presence of number or cvv","suite":"Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:5:1\"}}","suiteSourceFile":"core/spec/models/spree/credit_card_spec.rb"},{"name":"#valid? imported is true does not validate presence of number or cvv","suite":"Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:6:1\"}}","suiteSourceFile":"core/spec/models/spree/credit_card_spec.rb"},{"name":"#save does not actually store the number","suite":"Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","suiteSourceFile":"core/spec/models/spree/credit_card_spec.rb"},{"name":"#save does not actually store the security code","suite":"Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2\"}}","suiteSourceFile":"core/spec/models/spree/credit_card_spec.rb"},{"name":"#number= strips non-numeric characters from card input","suite":"Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1\"}}","suiteSourceFile":"core/spec/models/spree/credit_card_spec.rb"},{"name":"#number= does not raise an exception on non-string input","suite":"Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2\"}}","suiteSourceFile":"core/spec/models/spree/credit_card_spec.rb"},{"name":"#verification_value= accepts a valid 3-digit value","suite":"Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1\"}}","suiteSourceFile":"core/spec/models/spree/credit_card_spec.rb"},{"name":"#verification_value= accepts a valid 4-digit value","suite":"Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:2\"}}","suiteSourceFile":"core/spec/models/spree/credit_card_spec.rb"},{"name":"#verification_value= stringifies an integer","suite":"Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:3\"}}","suiteSourceFile":"core/spec/models/spree/credit_card_spec.rb"},{"name":"#verification_value= strips any whitespace","suite":"Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:4\"}}","suiteSourceFile":"core/spec/models/spree/credit_card_spec.rb"},{"name":"#expiry= can set with a 2-digit month and year","suite":"Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1\"}}","suiteSourceFile":"core/spec/models/spree/credit_card_spec.rb"},{"name":"#expiry= can set with a 2-digit month and 4-digit year","suite":"Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:2\"}}","suiteSourceFile":"core/spec/models/spree/credit_card_spec.rb"},{"name":"#expiry= can set with a 2-digit month and 4-digit year without whitespace","suite":"Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:3\"}}","suiteSourceFile":"core/spec/models/spree/credit_card_spec.rb"},{"name":"#expiry= can set with a 2-digit month and 4-digit year without whitespace and slash","suite":"Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:4\"}}","suiteSourceFile":"core/spec/models/spree/credit_card_spec.rb"},{"name":"#expiry= can set with a 2-digit month and 2-digit year without whitespace and slash","suite":"Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:5\"}}","suiteSourceFile":"core/spec/models/spree/credit_card_spec.rb"},{"name":"#expiry= does not blow up when passed an empty string","suite":"Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:6\"}}","suiteSourceFile":"core/spec/models/spree/credit_card_spec.rb"},{"name":"#expiry= does not blow up when passed one number","suite":"Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:7\"}}","suiteSourceFile":"core/spec/models/spree/credit_card_spec.rb"},{"name":"#cc_type= converts between the different types","suite":"Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1\"}}","suiteSourceFile":"core/spec/models/spree/credit_card_spec.rb"},{"name":"#cc_type= assigns the type based on card number in the event of js failure","suite":"Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2\"}}","suiteSourceFile":"core/spec/models/spree/credit_card_spec.rb"},{"name":"Associations is able to access its payments","suite":"Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:1\"}}","suiteSourceFile":"core/spec/models/spree/credit_card_spec.rb"},{"name":"#first_name extracts the first name","suite":"Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:1\"}}","suiteSourceFile":"core/spec/models/spree/credit_card_spec.rb"},{"name":"#last_name extracts the last name","suite":"Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:1\"}}","suiteSourceFile":"core/spec/models/spree/credit_card_spec.rb"},{"name":"#to_active_merchant converts to an ActiveMerchant::Billing::CreditCard object","suite":"Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:1\"}}","suiteSourceFile":"core/spec/models/spree/credit_card_spec.rb"},{"name":"Scopes #not_expired includes only not expired credit cards","suite":"Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:1:1\"}}","suiteSourceFile":"core/spec/models/spree/credit_card_spec.rb"},{"name":"Scopes #not_expired does not include outdated credit cards","suite":"Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:1:2\"}}","suiteSourceFile":"core/spec/models/spree/credit_card_spec.rb"},{"name":"Scopes #capturable includes only capturable credit cards","suite":"Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:2:1\"}}","suiteSourceFile":"core/spec/models/spree/credit_card_spec.rb"},{"name":"Scopes #capturable does not include credit cards without profile or payment id","suite":"Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:2:2\"}}","suiteSourceFile":"core/spec/models/spree/credit_card_spec.rb"},{"name":"#display_brand when the cc_type does not exist example at ./spec/models/spree/credit_card_spec.rb:431","suite":"Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:20:1:1\"}}","suiteSourceFile":"core/spec/models/spree/credit_card_spec.rb"},{"name":"#display_brand when the cc_type exist example at ./spec/models/spree/credit_card_spec.rb:437","suite":"Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:20:2:1\"}}","suiteSourceFile":"core/spec/models/spree/credit_card_spec.rb"},{"name":"#wallet_type when the wallet_type does not exist example at ./spec/models/spree/credit_card_spec.rb:446","suite":"Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:21:1:1\"}}","suiteSourceFile":"core/spec/models/spree/credit_card_spec.rb"},{"name":"#wallet_type when the wallet_type exists example at ./spec/models/spree/credit_card_spec.rb:452","suite":"Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:21:2:1\"}}","suiteSourceFile":"core/spec/models/spree/credit_card_spec.rb"},{"name":"#store when store is set returns the set store","suite":"Spree::Current at ./spec/models/spree/current_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/current_spec.rb"},{"name":"#store when store is not set returns the default store","suite":"Spree::Current at ./spec/models/spree/current_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/current_spec.rb"},{"name":"#currency when currency is set returns the set currency","suite":"Spree::Current at ./spec/models/spree/current_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/current_spec.rb"},{"name":"#currency when currency is not set returns the default currency from the store","suite":"Spree::Current at ./spec/models/spree/current_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/current_spec.rb"},{"name":"#zone when zone is set returns the set zone","suite":"Spree::Current at ./spec/models/spree/current_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","suiteSourceFile":"core/spec/models/spree/current_spec.rb"},{"name":"#zone when zone is not set returns the default tax zone","suite":"Spree::Current at ./spec/models/spree/current_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","suiteSourceFile":"core/spec/models/spree/current_spec.rb"},{"name":"#zone when zone is not set and no default tax zone exists when store has a checkout_zone returns the store checkout_zone","suite":"Spree::Current at ./spec/models/spree/current_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3:1:1\"}}","suiteSourceFile":"core/spec/models/spree/current_spec.rb"},{"name":"#zone when zone is not set and no default tax zone exists when store has no checkout_zone returns nil","suite":"Spree::Current at ./spec/models/spree/current_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3:2:1\"}}","suiteSourceFile":"core/spec/models/spree/current_spec.rb"},{"name":"#global_pricing_context returns a Spree::Pricing::Context","suite":"Spree::Current at ./spec/models/spree/current_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/current_spec.rb"},{"name":"#global_pricing_context uses the current store","suite":"Spree::Current at ./spec/models/spree/current_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2\"}}","suiteSourceFile":"core/spec/models/spree/current_spec.rb"},{"name":"#global_pricing_context uses the current currency","suite":"Spree::Current at ./spec/models/spree/current_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3\"}}","suiteSourceFile":"core/spec/models/spree/current_spec.rb"},{"name":"#global_pricing_context uses the current zone","suite":"Spree::Current at ./spec/models/spree/current_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:4\"}}","suiteSourceFile":"core/spec/models/spree/current_spec.rb"},{"name":"#global_pricing_context memoizes the context","suite":"Spree::Current at ./spec/models/spree/current_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:5\"}}","suiteSourceFile":"core/spec/models/spree/current_spec.rb"},{"name":"#price_lists returns price lists for the current store","suite":"Spree::Current at ./spec/models/spree/current_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","suiteSourceFile":"core/spec/models/spree/current_spec.rb"},{"name":"#price_lists includes active price lists","suite":"Spree::Current at ./spec/models/spree/current_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2\"}}","suiteSourceFile":"core/spec/models/spree/current_spec.rb"},{"name":"#price_lists includes scheduled price lists within date range","suite":"Spree::Current at ./spec/models/spree/current_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3\"}}","suiteSourceFile":"core/spec/models/spree/current_spec.rb"},{"name":"#price_lists excludes inactive price lists","suite":"Spree::Current at ./spec/models/spree/current_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:4\"}}","suiteSourceFile":"core/spec/models/spree/current_spec.rb"},{"name":"#price_lists returns price lists ordered by position","suite":"Spree::Current at ./spec/models/spree/current_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:5\"}}","suiteSourceFile":"core/spec/models/spree/current_spec.rb"},{"name":"#price_lists memoizes the price lists","suite":"Spree::Current at ./spec/models/spree/current_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:6\"}}","suiteSourceFile":"core/spec/models/spree/current_spec.rb"},{"name":".reset resets all attributes","suite":"Spree::Current at ./spec/models/spree/current_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","suiteSourceFile":"core/spec/models/spree/current_spec.rb"},{"name":".reset clears memoized price_lists","suite":"Spree::Current at ./spec/models/spree/current_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2\"}}","suiteSourceFile":"core/spec/models/spree/current_spec.rb"},{"name":".reset clears memoized global_pricing_context","suite":"Spree::Current at ./spec/models/spree/current_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:3\"}}","suiteSourceFile":"core/spec/models/spree/current_spec.rb"},{"name":"Validations #sanitize_url removes https:// and http:// from the url","suite":"Spree::CustomDomain at ./spec/models/spree/custom_domain_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/custom_domain_spec.rb"},{"name":"Validations #url_is_valid is valid with valid url","suite":"Spree::CustomDomain at ./spec/models/spree/custom_domain_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/custom_domain_spec.rb"},{"name":"Validations #url_is_valid is valid with composed tlds","suite":"Spree::CustomDomain at ./spec/models/spree/custom_domain_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2\"}}","suiteSourceFile":"core/spec/models/spree/custom_domain_spec.rb"},{"name":"Validations #url_is_valid is invalid with wrong number of parts","suite":"Spree::CustomDomain at ./spec/models/spree/custom_domain_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:3\"}}","suiteSourceFile":"core/spec/models/spree/custom_domain_spec.rb"},{"name":"Callbacks touch store touches the store when the custom domain is created","suite":"Spree::CustomDomain at ./spec/models/spree/custom_domain_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/custom_domain_spec.rb"},{"name":"associations example at ./spec/models/spree/customer_group_spec.rb:8","suite":"Spree::CustomerGroup at ./spec/models/spree/customer_group_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/customer_group_spec.rb"},{"name":"associations example at ./spec/models/spree/customer_group_spec.rb:9","suite":"Spree::CustomerGroup at ./spec/models/spree/customer_group_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/customer_group_spec.rb"},{"name":"associations example at ./spec/models/spree/customer_group_spec.rb:10","suite":"Spree::CustomerGroup at ./spec/models/spree/customer_group_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/models/spree/customer_group_spec.rb"},{"name":"validations example at ./spec/models/spree/customer_group_spec.rb:14","suite":"Spree::CustomerGroup at ./spec/models/spree/customer_group_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/customer_group_spec.rb"},{"name":"validations example at ./spec/models/spree/customer_group_spec.rb:15","suite":"Spree::CustomerGroup at ./spec/models/spree/customer_group_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","suiteSourceFile":"core/spec/models/spree/customer_group_spec.rb"},{"name":"validations uniqueness validates uniqueness of name within store scope","suite":"Spree::CustomerGroup at ./spec/models/spree/customer_group_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:1\"}}","suiteSourceFile":"core/spec/models/spree/customer_group_spec.rb"},{"name":"validations uniqueness allows same name in different store","suite":"Spree::CustomerGroup at ./spec/models/spree/customer_group_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:2\"}}","suiteSourceFile":"core/spec/models/spree/customer_group_spec.rb"},{"name":"scopes .for_store returns groups for the specified store","suite":"Spree::CustomerGroup at ./spec/models/spree/customer_group_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","suiteSourceFile":"core/spec/models/spree/customer_group_spec.rb"},{"name":"#users_count returns the number of users in the group","suite":"Spree::CustomerGroup at ./spec/models/spree/customer_group_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/customer_group_spec.rb"},{"name":"soft delete supports soft deletion","suite":"Spree::CustomerGroup at ./spec/models/spree/customer_group_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","suiteSourceFile":"core/spec/models/spree/customer_group_spec.rb"},{"name":"#add_customers adds customers to the group","suite":"Spree::CustomerGroup at ./spec/models/spree/customer_group_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","suiteSourceFile":"core/spec/models/spree/customer_group_spec.rb"},{"name":"#add_customers returns the count of added customers","suite":"Spree::CustomerGroup at ./spec/models/spree/customer_group_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2\"}}","suiteSourceFile":"core/spec/models/spree/customer_group_spec.rb"},{"name":"#add_customers skips users already in the group","suite":"Spree::CustomerGroup at ./spec/models/spree/customer_group_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:3\"}}","suiteSourceFile":"core/spec/models/spree/customer_group_spec.rb"},{"name":"#add_customers returns 0 when no users are added","suite":"Spree::CustomerGroup at ./spec/models/spree/customer_group_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:4\"}}","suiteSourceFile":"core/spec/models/spree/customer_group_spec.rb"},{"name":"#add_customers handles empty array","suite":"Spree::CustomerGroup at ./spec/models/spree/customer_group_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:5\"}}","suiteSourceFile":"core/spec/models/spree/customer_group_spec.rb"},{"name":"#add_customers handles nil","suite":"Spree::CustomerGroup at ./spec/models/spree/customer_group_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:6\"}}","suiteSourceFile":"core/spec/models/spree/customer_group_spec.rb"},{"name":"#add_customers touches the added users","suite":"Spree::CustomerGroup at ./spec/models/spree/customer_group_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:7\"}}","suiteSourceFile":"core/spec/models/spree/customer_group_spec.rb"},{"name":"#add_customers does not touch users that were already in the group","suite":"Spree::CustomerGroup at ./spec/models/spree/customer_group_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:8\"}}","suiteSourceFile":"core/spec/models/spree/customer_group_spec.rb"},{"name":"#remove_customers removes customers from the group","suite":"Spree::CustomerGroup at ./spec/models/spree/customer_group_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","suiteSourceFile":"core/spec/models/spree/customer_group_spec.rb"},{"name":"#remove_customers returns the count of removed customers","suite":"Spree::CustomerGroup at ./spec/models/spree/customer_group_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2\"}}","suiteSourceFile":"core/spec/models/spree/customer_group_spec.rb"},{"name":"#remove_customers returns 0 when users are not in the group","suite":"Spree::CustomerGroup at ./spec/models/spree/customer_group_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:3\"}}","suiteSourceFile":"core/spec/models/spree/customer_group_spec.rb"},{"name":"#remove_customers handles empty array","suite":"Spree::CustomerGroup at ./spec/models/spree/customer_group_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:4\"}}","suiteSourceFile":"core/spec/models/spree/customer_group_spec.rb"},{"name":"#remove_customers handles nil","suite":"Spree::CustomerGroup at ./spec/models/spree/customer_group_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:5\"}}","suiteSourceFile":"core/spec/models/spree/customer_group_spec.rb"},{"name":"#remove_customers touches the removed users","suite":"Spree::CustomerGroup at ./spec/models/spree/customer_group_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:6\"}}","suiteSourceFile":"core/spec/models/spree/customer_group_spec.rb"},{"name":"#remove_customers does not touch users that were not in the group","suite":"Spree::CustomerGroup at ./spec/models/spree/customer_group_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:7\"}}","suiteSourceFile":"core/spec/models/spree/customer_group_spec.rb"},{"name":"associations example at ./spec/models/spree/customer_group_user_spec.rb:8","suite":"Spree::CustomerGroupUser at ./spec/models/spree/customer_group_user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/customer_group_user_spec.rb"},{"name":"associations example at ./spec/models/spree/customer_group_user_spec.rb:9","suite":"Spree::CustomerGroupUser at ./spec/models/spree/customer_group_user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/customer_group_user_spec.rb"},{"name":"validations example at ./spec/models/spree/customer_group_user_spec.rb:13","suite":"Spree::CustomerGroupUser at ./spec/models/spree/customer_group_user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/customer_group_user_spec.rb"},{"name":"validations example at ./spec/models/spree/customer_group_user_spec.rb:14","suite":"Spree::CustomerGroupUser at ./spec/models/spree/customer_group_user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","suiteSourceFile":"core/spec/models/spree/customer_group_user_spec.rb"},{"name":"validations uniqueness validates uniqueness of customer_group_id within user scope","suite":"Spree::CustomerGroupUser at ./spec/models/spree/customer_group_user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:1\"}}","suiteSourceFile":"core/spec/models/spree/customer_group_user_spec.rb"},{"name":"validations uniqueness allows same user in different groups","suite":"Spree::CustomerGroupUser at ./spec/models/spree/customer_group_user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:2\"}}","suiteSourceFile":"core/spec/models/spree/customer_group_user_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:4","suite":"Spree::CustomerReturn at ./spec/models/spree/customer_return_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/customer_return_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:5","suite":"Spree::CustomerReturn at ./spec/models/spree/customer_return_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/customer_return_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:7","suite":"Spree::CustomerReturn at ./spec/models/spree/customer_return_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/models/spree/customer_return_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:8","suite":"Spree::CustomerReturn at ./spec/models/spree/customer_return_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","suiteSourceFile":"core/spec/models/spree/customer_return_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:10","suite":"Spree::CustomerReturn at ./spec/models/spree/customer_return_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","suiteSourceFile":"core/spec/models/spree/customer_return_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:11","suite":"Spree::CustomerReturn at ./spec/models/spree/customer_return_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","suiteSourceFile":"core/spec/models/spree/customer_return_spec.rb"},{"name":"behaves like metadata reads data as symbolized keys","suite":"Spree::CustomerReturn at ./spec/models/spree/customer_return_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7\"}}","suiteSourceFile":"core/spec/models/spree/customer_return_spec.rb"},{"name":"behaves like metadata reads data as not symbolized keys","suite":"Spree::CustomerReturn at ./spec/models/spree/customer_return_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8\"}}","suiteSourceFile":"core/spec/models/spree/customer_return_spec.rb"},{"name":"behaves like metadata can query records by metadata properties","suite":"Spree::CustomerReturn at ./spec/models/spree/customer_return_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:10\"}}","suiteSourceFile":"core/spec/models/spree/customer_return_spec.rb"},{"name":"lifecycle events customer_return.created publishes created event when record is created","suite":"Spree::CustomerReturn at ./spec/models/spree/customer_return_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/customer_return_spec.rb"},{"name":"lifecycle events customer_return.updated publishes updated event when record is updated","suite":"Spree::CustomerReturn at ./spec/models/spree/customer_return_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/customer_return_spec.rb"},{"name":"lifecycle events customer_return.deleted publishes deleted event when record is destroyed","suite":"Spree::CustomerReturn at ./spec/models/spree/customer_return_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:1\"}}","suiteSourceFile":"core/spec/models/spree/customer_return_spec.rb"},{"name":".validation #must_have_return_authorization return item does not belong to return authorization is not valid","suite":"Spree::CustomerReturn at ./spec/models/spree/customer_return_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/customer_return_spec.rb"},{"name":".validation #must_have_return_authorization return item does not belong to return authorization adds an error message","suite":"Spree::CustomerReturn at ./spec/models/spree/customer_return_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/customer_return_spec.rb"},{"name":".validation #must_have_return_authorization return item belongs to return authorization is valid","suite":"Spree::CustomerReturn at ./spec/models/spree/customer_return_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/customer_return_spec.rb"},{"name":".validation #return_items_belong_to_same_order return items are part of different orders is not valid","suite":"Spree::CustomerReturn at ./spec/models/spree/customer_return_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/customer_return_spec.rb"},{"name":".validation #return_items_belong_to_same_order return items are part of different orders adds an error message","suite":"Spree::CustomerReturn at ./spec/models/spree/customer_return_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1:2\"}}","suiteSourceFile":"core/spec/models/spree/customer_return_spec.rb"},{"name":".validation #return_items_belong_to_same_order return items are part of the same order is valid","suite":"Spree::CustomerReturn at ./spec/models/spree/customer_return_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/customer_return_spec.rb"},{"name":"whitelisted_ransackable_attributes example at ./spec/models/spree/customer_return_spec.rb:120","suite":"Spree::CustomerReturn at ./spec/models/spree/customer_return_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/customer_return_spec.rb"},{"name":"#display_pre_tax_total example at ./spec/models/spree/customer_return_spec.rb:133","suite":"Spree::CustomerReturn at ./spec/models/spree/customer_return_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","suiteSourceFile":"core/spec/models/spree/customer_return_spec.rb"},{"name":"#pre_tax_total returns the sum of the return item's pre_tax_amount","suite":"Spree::CustomerReturn at ./spec/models/spree/customer_return_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","suiteSourceFile":"core/spec/models/spree/customer_return_spec.rb"},{"name":"#display_pre_tax_total returns a Spree::Money","suite":"Spree::CustomerReturn at ./spec/models/spree/customer_return_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","suiteSourceFile":"core/spec/models/spree/customer_return_spec.rb"},{"name":"#currency example at ./spec/models/spree/customer_return_spec.rb:170","suite":"Spree::CustomerReturn at ./spec/models/spree/customer_return_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1\"}}","suiteSourceFile":"core/spec/models/spree/customer_return_spec.rb"},{"name":"#order returns the order associated with the return item's inventory unit","suite":"Spree::CustomerReturn at ./spec/models/spree/customer_return_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1\"}}","suiteSourceFile":"core/spec/models/spree/customer_return_spec.rb"},{"name":"#order return item without inventory unit returns nil","suite":"Spree::CustomerReturn at ./spec/models/spree/customer_return_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:2:1\"}}","suiteSourceFile":"core/spec/models/spree/customer_return_spec.rb"},{"name":"#order_id return item is not associated yet is nil","suite":"Spree::CustomerReturn at ./spec/models/spree/customer_return_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1:1\"}}","suiteSourceFile":"core/spec/models/spree/customer_return_spec.rb"},{"name":"#order_id has an associated return item is the return item's inventory unit's order id","suite":"Spree::CustomerReturn at ./spec/models/spree/customer_return_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:2:1\"}}","suiteSourceFile":"core/spec/models/spree/customer_return_spec.rb"},{"name":".after_save to the initial stock location marks all inventory units are returned","suite":"Spree::CustomerReturn at ./spec/models/spree/customer_return_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1:1\"}}","suiteSourceFile":"core/spec/models/spree/customer_return_spec.rb"},{"name":".after_save to the initial stock location updates the stock item counts in the stock location","suite":"Spree::CustomerReturn at ./spec/models/spree/customer_return_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1:2\"}}","suiteSourceFile":"core/spec/models/spree/customer_return_spec.rb"},{"name":".after_save to the initial stock location with Config.track_inventory_levels == false does not update the stock item counts in the stock location","suite":"Spree::CustomerReturn at ./spec/models/spree/customer_return_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/customer_return_spec.rb"},{"name":".after_save to a different stock location updates the stock item counts in new stock location","suite":"Spree::CustomerReturn at ./spec/models/spree/customer_return_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2:1\"}}","suiteSourceFile":"core/spec/models/spree/customer_return_spec.rb"},{"name":".after_save to a different stock location does not raise an error when no stock item exists in the stock location","suite":"Spree::CustomerReturn at ./spec/models/spree/customer_return_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2:2\"}}","suiteSourceFile":"core/spec/models/spree/customer_return_spec.rb"},{"name":".after_save to a different stock location does not update the stock item counts in the original stock location","suite":"Spree::CustomerReturn at ./spec/models/spree/customer_return_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2:3\"}}","suiteSourceFile":"core/spec/models/spree/customer_return_spec.rb"},{"name":"#fully_reimbursed? when some return items are undecided example at ./spec/models/spree/customer_return_spec.rb:283","suite":"Spree::CustomerReturn at ./spec/models/spree/customer_return_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:1:1\"}}","suiteSourceFile":"core/spec/models/spree/customer_return_spec.rb"},{"name":"#fully_reimbursed? when all return items are decided when all return items are rejected example at ./spec/models/spree/customer_return_spec.rb:290","suite":"Spree::CustomerReturn at ./spec/models/spree/customer_return_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/customer_return_spec.rb"},{"name":"#fully_reimbursed? when all return items are decided when all return items are accepted when some return items have no reimbursement example at ./spec/models/spree/customer_return_spec.rb:297","suite":"Spree::CustomerReturn at ./spec/models/spree/customer_return_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:2:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/customer_return_spec.rb"},{"name":"#fully_reimbursed? when all return items are decided when all return items are accepted when all return items have a reimbursement when some reimbursements are not reimbursed example at ./spec/models/spree/customer_return_spec.rb:304","suite":"Spree::CustomerReturn at ./spec/models/spree/customer_return_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:2:2:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/customer_return_spec.rb"},{"name":"#fully_reimbursed? when all return items are decided when all return items are accepted when all return items have a reimbursement when all reimbursements are reimbursed example at ./spec/models/spree/customer_return_spec.rb:310","suite":"Spree::CustomerReturn at ./spec/models/spree/customer_return_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:2:2:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/customer_return_spec.rb"},{"name":"#create when slug is not provided generates slug automatically","suite":"Spree::DataFeed::Google at ./spec/models/spree/data_feed/google_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/data_feed/google_spec.rb"},{"name":"#create when slug is provided uses the slug provided","suite":"Spree::DataFeed::Google at ./spec/models/spree/data_feed/google_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/data_feed/google_spec.rb"},{"name":"#formatted_url returns full url to the data feed","suite":"Spree::DataFeed::Google at ./spec/models/spree/data_feed/google_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/data_feed/google_spec.rb"},{"name":".label returns a descriptive label","suite":"Spree::DataFeed::Google at ./spec/models/spree/data_feed/google_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/data_feed/google_spec.rb"},{"name":"validates presence of digital and line_item","suite":"Spree::DigitalLink at ./spec/models/spree/digital_link_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2\"}}","suiteSourceFile":"core/spec/models/spree/digital_link_spec.rb"},{"name":"validates presence of line_item","suite":"Spree::DigitalLink at ./spec/models/spree/digital_link_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3\"}}","suiteSourceFile":"core/spec/models/spree/digital_link_spec.rb"},{"name":"validates presence of digital","suite":"Spree::DigitalLink at ./spec/models/spree/digital_link_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4\"}}","suiteSourceFile":"core/spec/models/spree/digital_link_spec.rb"},{"name":"behaves like lifecycle events lifecycle events digital_link.created publishes created event when record is created","suite":"Spree::DigitalLink at ./spec/models/spree/digital_link_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/digital_link_spec.rb"},{"name":"behaves like lifecycle events lifecycle events digital_link.updated publishes updated event when record is updated","suite":"Spree::DigitalLink at ./spec/models/spree/digital_link_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/digital_link_spec.rb"},{"name":"behaves like lifecycle events lifecycle events digital_link.deleted publishes deleted event when record is deleted","suite":"Spree::DigitalLink at ./spec/models/spree/digital_link_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/digital_link_spec.rb"},{"name":"validates access_counter validates access_counter numericality","suite":"Spree::DigitalLink at ./spec/models/spree/digital_link_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","suiteSourceFile":"core/spec/models/spree/digital_link_spec.rb"},{"name":"validates access_counter validates access_counter 0 or greater","suite":"Spree::DigitalLink at ./spec/models/spree/digital_link_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2\"}}","suiteSourceFile":"core/spec/models/spree/digital_link_spec.rb"},{"name":"validates access_counter validates access_counter 0 is valid","suite":"Spree::DigitalLink at ./spec/models/spree/digital_link_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3\"}}","suiteSourceFile":"core/spec/models/spree/digital_link_spec.rb"},{"name":"#reset! resets access_counter","suite":"Spree::DigitalLink at ./spec/models/spree/digital_link_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","suiteSourceFile":"core/spec/models/spree/digital_link_spec.rb"},{"name":"#reset! resets created_at timestamp","suite":"Spree::DigitalLink at ./spec/models/spree/digital_link_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2\"}}","suiteSourceFile":"core/spec/models/spree/digital_link_spec.rb"},{"name":"#expired? out of date example at ./spec/models/spree/digital_link_spec.rb:70","suite":"Spree::DigitalLink at ./spec/models/spree/digital_link_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1:1\"}}","suiteSourceFile":"core/spec/models/spree/digital_link_spec.rb"},{"name":"#expired? out of date but the store does not track date of expire example at ./spec/models/spree/digital_link_spec.rb:82","suite":"Spree::DigitalLink at ./spec/models/spree/digital_link_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2:1\"}}","suiteSourceFile":"core/spec/models/spree/digital_link_spec.rb"},{"name":"#expired? still in date example at ./spec/models/spree/digital_link_spec.rb:88","suite":"Spree::DigitalLink at ./spec/models/spree/digital_link_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:3:1\"}}","suiteSourceFile":"core/spec/models/spree/digital_link_spec.rb"},{"name":"#access_limit_exceeded? count exceeded example at ./spec/models/spree/digital_link_spec.rb:102","suite":"Spree::DigitalLink at ./spec/models/spree/digital_link_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1:1\"}}","suiteSourceFile":"core/spec/models/spree/digital_link_spec.rb"},{"name":"#access_limit_exceeded? count exceeded but the store does not limit digital download count example at ./spec/models/spree/digital_link_spec.rb:114","suite":"Spree::DigitalLink at ./spec/models/spree/digital_link_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2:1\"}}","suiteSourceFile":"core/spec/models/spree/digital_link_spec.rb"},{"name":"#access_limit_exceeded? still in count range example at ./spec/models/spree/digital_link_spec.rb:120","suite":"Spree::DigitalLink at ./spec/models/spree/digital_link_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:3:1\"}}","suiteSourceFile":"core/spec/models/spree/digital_link_spec.rb"},{"name":"#authorizable? count exceeded example at ./spec/models/spree/digital_link_spec.rb:134","suite":"Spree::DigitalLink at ./spec/models/spree/digital_link_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1:1\"}}","suiteSourceFile":"core/spec/models/spree/digital_link_spec.rb"},{"name":"#authorizable? count exceeded but the store does not limit digital download count example at ./spec/models/spree/digital_link_spec.rb:146","suite":"Spree::DigitalLink at ./spec/models/spree/digital_link_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:2:1\"}}","suiteSourceFile":"core/spec/models/spree/digital_link_spec.rb"},{"name":"#authorizable? still in count range example at ./spec/models/spree/digital_link_spec.rb:152","suite":"Spree::DigitalLink at ./spec/models/spree/digital_link_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:3:1\"}}","suiteSourceFile":"core/spec/models/spree/digital_link_spec.rb"},{"name":"#authorizable? out of date example at ./spec/models/spree/digital_link_spec.rb:164","suite":"Spree::DigitalLink at ./spec/models/spree/digital_link_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:4:1\"}}","suiteSourceFile":"core/spec/models/spree/digital_link_spec.rb"},{"name":"#authorizable? out of date but the store does not track date of expire example at ./spec/models/spree/digital_link_spec.rb:176","suite":"Spree::DigitalLink at ./spec/models/spree/digital_link_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:5:1\"}}","suiteSourceFile":"core/spec/models/spree/digital_link_spec.rb"},{"name":"#authorizable? still in date example at ./spec/models/spree/digital_link_spec.rb:182","suite":"Spree::DigitalLink at ./spec/models/spree/digital_link_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:6:1\"}}","suiteSourceFile":"core/spec/models/spree/digital_link_spec.rb"},{"name":"authorize! increments the access counter","suite":"Spree::DigitalLink at ./spec/models/spree/digital_link_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1\"}}","suiteSourceFile":"core/spec/models/spree/digital_link_spec.rb"},{"name":"authorize! touches the digital_link when autorized","suite":"Spree::DigitalLink at ./spec/models/spree/digital_link_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:2\"}}","suiteSourceFile":"core/spec/models/spree/digital_link_spec.rb"},{"name":"authorize! does not touch the digital_link if not authorized","suite":"Spree::DigitalLink at ./spec/models/spree/digital_link_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:3\"}}","suiteSourceFile":"core/spec/models/spree/digital_link_spec.rb"},{"name":"validates presence of variant","suite":"Spree::Digital at ./spec/models/spree/digital_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2\"}}","suiteSourceFile":"core/spec/models/spree/digital_spec.rb"},{"name":"validates presence of attachment","suite":"Spree::Digital at ./spec/models/spree/digital_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3\"}}","suiteSourceFile":"core/spec/models/spree/digital_spec.rb"},{"name":"validates presence of attachment and variant","suite":"Spree::Digital at ./spec/models/spree/digital_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4\"}}","suiteSourceFile":"core/spec/models/spree/digital_spec.rb"},{"name":"behaves like lifecycle events lifecycle events digital.created publishes created event when record is created","suite":"Spree::Digital at ./spec/models/spree/digital_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/digital_spec.rb"},{"name":"behaves like lifecycle events lifecycle events digital.updated publishes updated event when record is updated","suite":"Spree::Digital at ./spec/models/spree/digital_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/digital_spec.rb"},{"name":"behaves like lifecycle events lifecycle events digital.deleted publishes deleted event when record is deleted","suite":"Spree::Digital at ./spec/models/spree/digital_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/digital_spec.rb"},{"name":"#initialize creates an event with name and payload","suite":"Spree::Event at ./spec/models/spree/event_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/event_spec.rb"},{"name":"#initialize freezes the payload and metadata","suite":"Spree::Event at ./spec/models/spree/event_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/event_spec.rb"},{"name":"#initialize sets created_at","suite":"Spree::Event at ./spec/models/spree/event_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/models/spree/event_spec.rb"},{"name":"#initialize generates an id","suite":"Spree::Event at ./spec/models/spree/event_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","suiteSourceFile":"core/spec/models/spree/event_spec.rb"},{"name":"#initialize includes spree_version in metadata","suite":"Spree::Event at ./spec/models/spree/event_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","suiteSourceFile":"core/spec/models/spree/event_spec.rb"},{"name":"#initialize accepts custom metadata","suite":"Spree::Event at ./spec/models/spree/event_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","suiteSourceFile":"core/spec/models/spree/event_spec.rb"},{"name":"#initialize deep stringifies payload keys","suite":"Spree::Event at ./spec/models/spree/event_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7\"}}","suiteSourceFile":"core/spec/models/spree/event_spec.rb"},{"name":"#initialize sets store_id from Spree::Current.store","suite":"Spree::Event at ./spec/models/spree/event_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8\"}}","suiteSourceFile":"core/spec/models/spree/event_spec.rb"},{"name":"#initialize accepts explicit store_id","suite":"Spree::Event at ./spec/models/spree/event_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:9\"}}","suiteSourceFile":"core/spec/models/spree/event_spec.rb"},{"name":"validations requires name","suite":"Spree::Event at ./spec/models/spree/event_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/event_spec.rb"},{"name":"validations requires store_id","suite":"Spree::Event at ./spec/models/spree/event_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","suiteSourceFile":"core/spec/models/spree/event_spec.rb"},{"name":"validations is valid with name and store_id","suite":"Spree::Event at ./spec/models/spree/event_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3\"}}","suiteSourceFile":"core/spec/models/spree/event_spec.rb"},{"name":"#store returns the store for the store_id","suite":"Spree::Event at ./spec/models/spree/event_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/event_spec.rb"},{"name":"#store returns nil when store_id is blank","suite":"Spree::Event at ./spec/models/spree/event_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","suiteSourceFile":"core/spec/models/spree/event_spec.rb"},{"name":"#store memoizes the store lookup","suite":"Spree::Event at ./spec/models/spree/event_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3\"}}","suiteSourceFile":"core/spec/models/spree/event_spec.rb"},{"name":"#resource_type extracts the resource type from the event name","suite":"Spree::Event at ./spec/models/spree/event_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/event_spec.rb"},{"name":"#resource_type handles nested event names","suite":"Spree::Event at ./spec/models/spree/event_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2\"}}","suiteSourceFile":"core/spec/models/spree/event_spec.rb"},{"name":"#action extracts the action from the event name","suite":"Spree::Event at ./spec/models/spree/event_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","suiteSourceFile":"core/spec/models/spree/event_spec.rb"},{"name":"#action handles multi-part actions","suite":"Spree::Event at ./spec/models/spree/event_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2\"}}","suiteSourceFile":"core/spec/models/spree/event_spec.rb"},{"name":"#matches? matches exact event names","suite":"Spree::Event at ./spec/models/spree/event_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","suiteSourceFile":"core/spec/models/spree/event_spec.rb"},{"name":"#matches? matches wildcard patterns","suite":"Spree::Event at ./spec/models/spree/event_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2\"}}","suiteSourceFile":"core/spec/models/spree/event_spec.rb"},{"name":"#matches? matches global wildcard","suite":"Spree::Event at ./spec/models/spree/event_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:3\"}}","suiteSourceFile":"core/spec/models/spree/event_spec.rb"},{"name":".matches? matches exact names","suite":"Spree::Event at ./spec/models/spree/event_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","suiteSourceFile":"core/spec/models/spree/event_spec.rb"},{"name":".matches? matches wildcard patterns","suite":"Spree::Event at ./spec/models/spree/event_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2\"}}","suiteSourceFile":"core/spec/models/spree/event_spec.rb"},{"name":".matches? matches global wildcard","suite":"Spree::Event at ./spec/models/spree/event_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:3\"}}","suiteSourceFile":"core/spec/models/spree/event_spec.rb"},{"name":".matches? handles complex patterns","suite":"Spree::Event at ./spec/models/spree/event_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:4\"}}","suiteSourceFile":"core/spec/models/spree/event_spec.rb"},{"name":"#attributes returns a hash representation with string keys","suite":"Spree::Event at ./spec/models/spree/event_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1\"}}","suiteSourceFile":"core/spec/models/spree/event_spec.rb"},{"name":"#inspect returns a readable string representation","suite":"Spree::Event at ./spec/models/spree/event_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1\"}}","suiteSourceFile":"core/spec/models/spree/event_spec.rb"},{"name":"#description describes the return items' change in options","suite":"Spree::Exchange at ./spec/models/spree/exchange_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/exchange_spec.rb"},{"name":"#display_amount is the total amount of all return items","suite":"Spree::Exchange at ./spec/models/spree/exchange_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/exchange_spec.rb"},{"name":"#perform! creates shipments for the order with the return items exchange inventory units","suite":"Spree::Exchange at ./spec/models/spree/exchange_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/exchange_spec.rb"},{"name":"#perform! when it cannot create shipments for all items raises an UnableToCreateShipments error","suite":"Spree::Exchange at ./spec/models/spree/exchange_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","suiteSourceFile":"core/spec/models/spree/exchange_spec.rb"},{"name":"#to_key example at ./spec/models/spree/exchange_spec.rb:65","suite":"Spree::Exchange at ./spec/models/spree/exchange_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/exchange_spec.rb"},{"name":".param_key example at ./spec/models/spree/exchange_spec.rb:69","suite":"Spree::Exchange at ./spec/models/spree/exchange_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","suiteSourceFile":"core/spec/models/spree/exchange_spec.rb"},{"name":".model_name example at ./spec/models/spree/exchange_spec.rb:73","suite":"Spree::Exchange at ./spec/models/spree/exchange_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","suiteSourceFile":"core/spec/models/spree/exchange_spec.rb"},{"name":"behaves like lifecycle events lifecycle events export.created publishes created event when record is created","suite":"Spree::Export at ./spec/models/spree/export_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/export_spec.rb"},{"name":"behaves like lifecycle events lifecycle events export.updated publishes updated event when record is updated","suite":"Spree::Export at ./spec/models/spree/export_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/export_spec.rb"},{"name":"behaves like lifecycle events lifecycle events export.deleted publishes deleted event when record is deleted","suite":"Spree::Export at ./spec/models/spree/export_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/export_spec.rb"},{"name":"#event_serializer_class returns the correct event serializer class","suite":"Spree::Export at ./spec/models/spree/export_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/export_spec.rb"},{"name":"#model_class returns the correct record class","suite":"Spree::Export at ./spec/models/spree/export_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/export_spec.rb"},{"name":"#export_file_name returns the correct file name","suite":"Spree::Export at ./spec/models/spree/export_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/export_spec.rb"},{"name":"#generate generates the export","suite":"Spree::Export at ./spec/models/spree/export_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","suiteSourceFile":"core/spec/models/spree/export_spec.rb"},{"name":"#generate sends the export done email","suite":"Spree::Export at ./spec/models/spree/export_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2\"}}","suiteSourceFile":"core/spec/models/spree/export_spec.rb"},{"name":"#generate when the export type is Spree::Exports::Customers generates the export","suite":"Spree::Export at ./spec/models/spree/export_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3:1\"}}","suiteSourceFile":"core/spec/models/spree/export_spec.rb"},{"name":"#records_to_export without search params returns all products","suite":"Spree::Export at ./spec/models/spree/export_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1:1\"}}","suiteSourceFile":"core/spec/models/spree/export_spec.rb"},{"name":"#records_to_export with search params returns matching products","suite":"Spree::Export at ./spec/models/spree/export_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2:1\"}}","suiteSourceFile":"core/spec/models/spree/export_spec.rb"},{"name":"#send_export_done_email queues the export done email","suite":"Spree::Export at ./spec/models/spree/export_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","suiteSourceFile":"core/spec/models/spree/export_spec.rb"},{"name":"#normalize_search_params with nil search_params does nothing","suite":"Spree::Export at ./spec/models/spree/export_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1:1\"}}","suiteSourceFile":"core/spec/models/spree/export_spec.rb"},{"name":"#normalize_search_params with empty search_params does nothing","suite":"Spree::Export at ./spec/models/spree/export_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2:1\"}}","suiteSourceFile":"core/spec/models/spree/export_spec.rb"},{"name":"#normalize_search_params with valid JSON string maintains the same content","suite":"Spree::Export at ./spec/models/spree/export_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:3:1\"}}","suiteSourceFile":"core/spec/models/spree/export_spec.rb"},{"name":"#normalize_search_params with valid JSON string ensures valid JSON output","suite":"Spree::Export at ./spec/models/spree/export_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:3:2\"}}","suiteSourceFile":"core/spec/models/spree/export_spec.rb"},{"name":"#normalize_search_params with invalid JSON string preserves the original string","suite":"Spree::Export at ./spec/models/spree/export_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:4:1\"}}","suiteSourceFile":"core/spec/models/spree/export_spec.rb"},{"name":"#normalize_search_params with Ruby hash input converts to JSON string","suite":"Spree::Export at ./spec/models/spree/export_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:5:1\"}}","suiteSourceFile":"core/spec/models/spree/export_spec.rb"},{"name":"#normalize_search_params with pre-normalized params does not double-process","suite":"Spree::Export at ./spec/models/spree/export_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:6:1\"}}","suiteSourceFile":"core/spec/models/spree/export_spec.rb"},{"name":"#csv_headers when no metafields exist returns customer headers","suite":"Spree::Exports::Customers at ./spec/models/spree/exports/customers_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/exports/customers_spec.rb"},{"name":"#csv_headers when metafields exist includes metafield headers","suite":"Spree::Exports::Customers at ./spec/models/spree/exports/customers_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/exports/customers_spec.rb"},{"name":"#records_to_export when search_params is nil includes all gift cards for the store","suite":"Spree::Exports::GiftCards at ./spec/models/spree/exports/gift_cards_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/exports/gift_cards_spec.rb"},{"name":"#records_to_export when search_params filters by status includes only active gift cards","suite":"Spree::Exports::GiftCards at ./spec/models/spree/exports/gift_cards_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/exports/gift_cards_spec.rb"},{"name":"#csv_headers when no metafields exist returns gift card headers","suite":"Spree::Exports::GiftCards at ./spec/models/spree/exports/gift_cards_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/exports/gift_cards_spec.rb"},{"name":"#csv_headers when metafields exist includes metafield headers","suite":"Spree::Exports::GiftCards at ./spec/models/spree/exports/gift_cards_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/exports/gift_cards_spec.rb"},{"name":"#csv_headers when no metafields exist returns newsletter subscriber headers","suite":"Spree::Exports::NewsletterSubscribers at ./spec/models/spree/exports/newsletter_subscribers_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/exports/newsletter_subscribers_spec.rb"},{"name":"#csv_headers when metafields exist includes metafield headers","suite":"Spree::Exports::NewsletterSubscribers at ./spec/models/spree/exports/newsletter_subscribers_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/exports/newsletter_subscribers_spec.rb"},{"name":"#csv_headers when no metafields exist returns order line item headers","suite":"Spree::Exports::Orders at ./spec/models/spree/exports/orders_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/exports/orders_spec.rb"},{"name":"#csv_headers when metafields exist includes metafield headers","suite":"Spree::Exports::Orders at ./spec/models/spree/exports/orders_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/exports/orders_spec.rb"},{"name":"#multi_line_csv? returns true","suite":"Spree::Exports::Orders at ./spec/models/spree/exports/orders_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/exports/orders_spec.rb"},{"name":"#scope when search_params is nil excludes archived products","suite":"Spree::Exports::Products at ./spec/models/spree/exports/products_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/exports/products_spec.rb"},{"name":"#scope when search_params is present includes all products","suite":"Spree::Exports::Products at ./spec/models/spree/exports/products_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/exports/products_spec.rb"},{"name":"#csv_headers when product_properties_enabled is false and no metafields returns product variant headers without properties","suite":"Spree::Exports::Products at ./spec/models/spree/exports/products_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/exports/products_spec.rb"},{"name":"#csv_headers when product_properties_enabled is true includes property headers","suite":"Spree::Exports::Products at ./spec/models/spree/exports/products_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/exports/products_spec.rb"},{"name":"#csv_headers when metafields exist includes metafield headers","suite":"Spree::Exports::Products at ./spec/models/spree/exports/products_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:1\"}}","suiteSourceFile":"core/spec/models/spree/exports/products_spec.rb"},{"name":"when the order has multiple line items can move more than one variant to the desired shipment","suite":"Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/fulfilment_changer_spec.rb"},{"name":"when the current shipment has enough inventory units adds the desired inventory units to the desired shipment","suite":"Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/fulfilment_changer_spec.rb"},{"name":"when the current shipment has enough inventory units removes the desired inventory units from the current shipment","suite":"Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","suiteSourceFile":"core/spec/models/spree/fulfilment_changer_spec.rb"},{"name":"when the current shipment has enough inventory units recalculates shipping costs for the current shipment","suite":"Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3\"}}","suiteSourceFile":"core/spec/models/spree/fulfilment_changer_spec.rb"},{"name":"when the current shipment has enough inventory units recalculates shipping costs for the new shipment","suite":"Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:4\"}}","suiteSourceFile":"core/spec/models/spree/fulfilment_changer_spec.rb"},{"name":"when the current shipment has enough inventory units when transferring to another stock location when the other stock location has enough stock is marked as a successful transfer","suite":"Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:5:1:1\"}}","suiteSourceFile":"core/spec/models/spree/fulfilment_changer_spec.rb"},{"name":"when the current shipment has enough inventory units when transferring to another stock location when the other stock location has enough stock stocks the current stock location back up","suite":"Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:5:1:2\"}}","suiteSourceFile":"core/spec/models/spree/fulfilment_changer_spec.rb"},{"name":"when the current shipment has enough inventory units when transferring to another stock location when the other stock location has enough stock unstocks the desired stock location","suite":"Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:5:1:3\"}}","suiteSourceFile":"core/spec/models/spree/fulfilment_changer_spec.rb"},{"name":"when the current shipment has enough inventory units when transferring to another stock location when the other stock location has enough stock when the order is not completed does not stock the current stock location back up","suite":"Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:5:1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/fulfilment_changer_spec.rb"},{"name":"when the current shipment has enough inventory units when transferring to another stock location when the other stock location has enough stock when the order is not completed does not unstock the desired location","suite":"Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:5:1:4:2\"}}","suiteSourceFile":"core/spec/models/spree/fulfilment_changer_spec.rb"},{"name":"when the current shipment has enough inventory units when transferring to another stock location when the desired stock location can only partially fulfil the quantity restocks seven at the original stock location","suite":"Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:5:2:1\"}}","suiteSourceFile":"core/spec/models/spree/fulfilment_changer_spec.rb"},{"name":"when the current shipment has enough inventory units when transferring to another stock location when the desired stock location can only partially fulfil the quantity unstocks seven at the desired stock location","suite":"Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:5:2:2\"}}","suiteSourceFile":"core/spec/models/spree/fulfilment_changer_spec.rb"},{"name":"when the current shipment has enough inventory units when transferring to another stock location when the desired stock location can only partially fulfil the quantity creates a shipment with the correct number of on hand and backordered units","suite":"Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:5:2:3\"}}","suiteSourceFile":"core/spec/models/spree/fulfilment_changer_spec.rb"},{"name":"when the current shipment has enough inventory units when transferring to another stock location when the desired stock location can only partially fulfil the quantity when the desired stock location already has a backordered units restocks seven at the original stock location","suite":"Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:5:2:4:1\"}}","suiteSourceFile":"core/spec/models/spree/fulfilment_changer_spec.rb"},{"name":"when the current shipment has enough inventory units when transferring to another stock location when the desired stock location can only partially fulfil the quantity when the desired stock location already has a backordered units unstocks seven at the desired stock location","suite":"Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:5:2:4:2\"}}","suiteSourceFile":"core/spec/models/spree/fulfilment_changer_spec.rb"},{"name":"when the current shipment has enough inventory units when transferring to another stock location when the desired stock location can only partially fulfil the quantity when the desired stock location already has a backordered units creates a shipment with the correct number of on hand and backordered units","suite":"Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:5:2:4:3\"}}","suiteSourceFile":"core/spec/models/spree/fulfilment_changer_spec.rb"},{"name":"when the current shipment has enough inventory units when transferring to another stock location when the desired stock location can only partially fulfil the quantity when the original shipment has on hand and backordered units removes the backordered item first","suite":"Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:5:2:5:1\"}}","suiteSourceFile":"core/spec/models/spree/fulfilment_changer_spec.rb"},{"name":"when the current shipment has enough inventory units when transferring to another stock location when the desired stock location can only partially fulfil the quantity when the original shipment has on hand and backordered units more than one backordered unit reduces the backordered items first","suite":"Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:5:2:5:2:1\"}}","suiteSourceFile":"core/spec/models/spree/fulfilment_changer_spec.rb"},{"name":"when the current shipment has enough inventory units when transferring to another stock location when the desired stock location can only partially fulfil the quantity when the original shipment has on hand and backordered units more than one on_hand unit reduces the backordered items first","suite":"Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:5:2:5:3:1\"}}","suiteSourceFile":"core/spec/models/spree/fulfilment_changer_spec.rb"},{"name":"when the current shipment has enough inventory units when transferring to another stock location when the desired stock location can only partially fulfil the quantity when the original shipment had some backordered units restocks four at the original stock location","suite":"Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:5:2:6:1\"}}","suiteSourceFile":"core/spec/models/spree/fulfilment_changer_spec.rb"},{"name":"when the current shipment has enough inventory units when transferring to another stock location when the desired stock location can only partially fulfil the quantity when the original shipment had some backordered units unstocks five at the desired stock location","suite":"Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:5:2:6:2\"}}","suiteSourceFile":"core/spec/models/spree/fulfilment_changer_spec.rb"},{"name":"when the current shipment has enough inventory units when transferring to another stock location when the desired stock location can only partially fulfil the quantity when the original shipment had some backordered units creates a shipment with the correct number of on hand and backordered units","suite":"Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:5:2:6:3\"}}","suiteSourceFile":"core/spec/models/spree/fulfilment_changer_spec.rb"},{"name":"when the current shipment has enough inventory units when transferring to another stock location when the other stock location does not have enough stock is not successful","suite":"Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:5:3:1\"}}","suiteSourceFile":"core/spec/models/spree/fulfilment_changer_spec.rb"},{"name":"when the current shipment has enough inventory units when transferring to another stock location when the other stock location does not have enough stock has an activemodel error hash","suite":"Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:5:3:2\"}}","suiteSourceFile":"core/spec/models/spree/fulfilment_changer_spec.rb"},{"name":"when the current shipment has enough inventory units when the quantity to transfer is not positive is not successful","suite":"Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:6:1\"}}","suiteSourceFile":"core/spec/models/spree/fulfilment_changer_spec.rb"},{"name":"when the current shipment has enough inventory units when the quantity to transfer is not positive has an activemodel error hash","suite":"Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:6:2\"}}","suiteSourceFile":"core/spec/models/spree/fulfilment_changer_spec.rb"},{"name":"when the current shipment has enough inventory units when the desired shipment is identical to the current shipment is not successful","suite":"Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:7:1\"}}","suiteSourceFile":"core/spec/models/spree/fulfilment_changer_spec.rb"},{"name":"when the current shipment has enough inventory units when the desired shipment is identical to the current shipment has an activemodel error hash","suite":"Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:7:2\"}}","suiteSourceFile":"core/spec/models/spree/fulfilment_changer_spec.rb"},{"name":"when the current shipment has enough inventory units when the desired shipment has no stock location is not successful","suite":"Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:8:1\"}}","suiteSourceFile":"core/spec/models/spree/fulfilment_changer_spec.rb"},{"name":"when the current shipment has enough inventory units when the desired shipment has no stock location has an activemodel error hash","suite":"Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:8:2\"}}","suiteSourceFile":"core/spec/models/spree/fulfilment_changer_spec.rb"},{"name":"when the current shipment has enough inventory units when the current shipment has been shipped already is not successful","suite":"Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:9:1\"}}","suiteSourceFile":"core/spec/models/spree/fulfilment_changer_spec.rb"},{"name":"when the current shipment has enough inventory units when the current shipment has been shipped already has an activemodel error hash","suite":"Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:9:2\"}}","suiteSourceFile":"core/spec/models/spree/fulfilment_changer_spec.rb"},{"name":"when the current shipment has not enough inventory units adds the desired inventory units to the desired shipment","suite":"Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/fulfilment_changer_spec.rb"},{"name":"when the current shipment has not enough inventory units removes the desired inventory units from the current shipment","suite":"Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","suiteSourceFile":"core/spec/models/spree/fulfilment_changer_spec.rb"},{"name":"when the current shipment is emptied out by the transfer adds the desired inventory units to the desired shipment","suite":"Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/fulfilment_changer_spec.rb"},{"name":"when the current shipment is emptied out by the transfer removes the current shipment","suite":"Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2\"}}","suiteSourceFile":"core/spec/models/spree/fulfilment_changer_spec.rb"},{"name":"when the desired shipment is not yet persisted adds the desired inventory units to the desired shipment","suite":"Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","suiteSourceFile":"core/spec/models/spree/fulfilment_changer_spec.rb"},{"name":"when the desired shipment is not yet persisted updates desired shipment cost after selecting the shipping rate","suite":"Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2\"}}","suiteSourceFile":"core/spec/models/spree/fulfilment_changer_spec.rb"},{"name":"when the desired shipment is not yet persisted if the desired shipment is invalid is not successful","suite":"Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3:1\"}}","suiteSourceFile":"core/spec/models/spree/fulfilment_changer_spec.rb"},{"name":"when the desired shipment is not yet persisted if the desired shipment is invalid has an activemodel error hash","suite":"Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3:2\"}}","suiteSourceFile":"core/spec/models/spree/fulfilment_changer_spec.rb"},{"name":"when stock_item is last on_hand is successful","suite":"Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","suiteSourceFile":"core/spec/models/spree/fulfilment_changer_spec.rb"},{"name":"when stock_item is last on_hand has inventory unit on_hand","suite":"Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2\"}}","suiteSourceFile":"core/spec/models/spree/fulfilment_changer_spec.rb"},{"name":"disable recurring contract by destroying payment source","suite":"Spree::Gateway::Bogus at ./spec/models/spree/gateway/bogus_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","suiteSourceFile":"core/spec/models/spree/gateway/bogus_spec.rb"},{"name":"passes through all arguments on a method_missing call","suite":"Spree::Gateway at ./spec/models/spree/gateway_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","suiteSourceFile":"core/spec/models/spree/gateway_spec.rb"},{"name":"returns exchange multiplier for gateway","suite":"Spree::Gateway at ./spec/models/spree/gateway_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4\"}}","suiteSourceFile":"core/spec/models/spree/gateway_spec.rb"},{"name":"returns public preferences","suite":"Spree::Gateway at ./spec/models/spree/gateway_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5\"}}","suiteSourceFile":"core/spec/models/spree/gateway_spec.rb"},{"name":"Validations validates the type","suite":"Spree::Gateway at ./spec/models/spree/gateway_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/gateway_spec.rb"},{"name":"Validations automatically sets the name","suite":"Spree::Gateway at ./spec/models/spree/gateway_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","suiteSourceFile":"core/spec/models/spree/gateway_spec.rb"},{"name":"fetching payment sources finds credit cards associated on a order completed","suite":"Spree::Gateway at ./spec/models/spree/gateway_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/gateway_spec.rb"},{"name":"fetching payment sources finds credit cards associated with the order user","suite":"Spree::Gateway at ./spec/models/spree/gateway_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","suiteSourceFile":"core/spec/models/spree/gateway_spec.rb"},{"name":"#gateway_dashboard_payment_url returns nil","suite":"Spree::Gateway at ./spec/models/spree/gateway_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","suiteSourceFile":"core/spec/models/spree/gateway_spec.rb"},{"name":"#gateway_dashboard_payment_url when implemented returns the url","suite":"Spree::Gateway at ./spec/models/spree/gateway_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2:1\"}}","suiteSourceFile":"core/spec/models/spree/gateway_spec.rb"},{"name":"lifecycle events gift_card_batch.created publishes created event when record is created","suite":"Spree::GiftCardBatch at ./spec/models/spree/gift_card_batch_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/gift_card_batch_spec.rb"},{"name":"lifecycle events gift_card_batch.updated publishes updated event when record is updated","suite":"Spree::GiftCardBatch at ./spec/models/spree/gift_card_batch_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/gift_card_batch_spec.rb"},{"name":"lifecycle events gift_card_batch.deleted publishes deleted event when record is destroyed","suite":"Spree::GiftCardBatch at ./spec/models/spree/gift_card_batch_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/gift_card_batch_spec.rb"},{"name":"#create_gift_cards generates gift cards","suite":"Spree::GiftCardBatch at ./spec/models/spree/gift_card_batch_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/gift_card_batch_spec.rb"},{"name":"#generate_gift_cards when codes count is less than 500 generates gift cards","suite":"Spree::GiftCardBatch at ./spec/models/spree/gift_card_batch_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","suiteSourceFile":"core/spec/models/spree/gift_card_batch_spec.rb"},{"name":"#generate_gift_cards when codes count is greater than 500 enqueues a job","suite":"Spree::GiftCardBatch at ./spec/models/spree/gift_card_batch_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","suiteSourceFile":"core/spec/models/spree/gift_card_batch_spec.rb"},{"name":"behaves like lifecycle events lifecycle events gift_card.created publishes created event when record is created","suite":"Spree::GiftCard at ./spec/models/spree/gift_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/gift_card_spec.rb"},{"name":"behaves like lifecycle events lifecycle events gift_card.updated publishes updated event when record is updated","suite":"Spree::GiftCard at ./spec/models/spree/gift_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/gift_card_spec.rb"},{"name":"behaves like lifecycle events lifecycle events gift_card.deleted publishes deleted event when record is deleted","suite":"Spree::GiftCard at ./spec/models/spree/gift_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/gift_card_spec.rb"},{"name":"Callbacks #ensure_can_be_deleted ensures a used gift card can't be destroyed","suite":"Spree::GiftCard at ./spec/models/spree/gift_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/gift_card_spec.rb"},{"name":"Callbacks #ensure_can_be_deleted adds an error","suite":"Spree::GiftCard at ./spec/models/spree/gift_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:2\"}}","suiteSourceFile":"core/spec/models/spree/gift_card_spec.rb"},{"name":"Scopes #active returns active gift cards","suite":"Spree::GiftCard at ./spec/models/spree/gift_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","suiteSourceFile":"core/spec/models/spree/gift_card_spec.rb"},{"name":"Scopes #expired returns expired gift cards","suite":"Spree::GiftCard at ./spec/models/spree/gift_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","suiteSourceFile":"core/spec/models/spree/gift_card_spec.rb"},{"name":"Scopes #redeemed returns redeemed gift cards","suite":"Spree::GiftCard at ./spec/models/spree/gift_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3:1\"}}","suiteSourceFile":"core/spec/models/spree/gift_card_spec.rb"},{"name":"Scopes #partially_redeemed returns partially redeemed gift cards","suite":"Spree::GiftCard at ./spec/models/spree/gift_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4:1\"}}","suiteSourceFile":"core/spec/models/spree/gift_card_spec.rb"},{"name":"#active? when expired returns false","suite":"Spree::GiftCard at ./spec/models/spree/gift_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1\"}}","suiteSourceFile":"core/spec/models/spree/gift_card_spec.rb"},{"name":"#active? when redeemed returns false","suite":"Spree::GiftCard at ./spec/models/spree/gift_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1\"}}","suiteSourceFile":"core/spec/models/spree/gift_card_spec.rb"},{"name":"#active? when active returns true","suite":"Spree::GiftCard at ./spec/models/spree/gift_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3:1\"}}","suiteSourceFile":"core/spec/models/spree/gift_card_spec.rb"},{"name":"#amount_remaining when active returns the remaining amount","suite":"Spree::GiftCard at ./spec/models/spree/gift_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:1\"}}","suiteSourceFile":"core/spec/models/spree/gift_card_spec.rb"},{"name":"#amount_remaining when redeemed returns 0","suite":"Spree::GiftCard at ./spec/models/spree/gift_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1\"}}","suiteSourceFile":"core/spec/models/spree/gift_card_spec.rb"},{"name":"#amount_remaining when authorized returns the remaining amount","suite":"Spree::GiftCard at ./spec/models/spree/gift_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3:1\"}}","suiteSourceFile":"core/spec/models/spree/gift_card_spec.rb"},{"name":"#display_state when expired returns expired","suite":"Spree::GiftCard at ./spec/models/spree/gift_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1:1\"}}","suiteSourceFile":"core/spec/models/spree/gift_card_spec.rb"},{"name":"#display_state when active returns active","suite":"Spree::GiftCard at ./spec/models/spree/gift_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2:1\"}}","suiteSourceFile":"core/spec/models/spree/gift_card_spec.rb"},{"name":"#to_csv returns an array","suite":"Spree::GiftCard at ./spec/models/spree/gift_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","suiteSourceFile":"core/spec/models/spree/gift_card_spec.rb"},{"name":"#to_csv returns the correct number of fields","suite":"Spree::GiftCard at ./spec/models/spree/gift_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2\"}}","suiteSourceFile":"core/spec/models/spree/gift_card_spec.rb"},{"name":"#to_csv includes the gift card code","suite":"Spree::GiftCard at ./spec/models/spree/gift_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:3\"}}","suiteSourceFile":"core/spec/models/spree/gift_card_spec.rb"},{"name":"#to_csv includes the currency","suite":"Spree::GiftCard at ./spec/models/spree/gift_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:4\"}}","suiteSourceFile":"core/spec/models/spree/gift_card_spec.rb"},{"name":"#to_csv includes the user email","suite":"Spree::GiftCard at ./spec/models/spree/gift_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:5\"}}","suiteSourceFile":"core/spec/models/spree/gift_card_spec.rb"},{"name":"State transitions when active transitions from active to partially_redeemed","suite":"Spree::GiftCard at ./spec/models/spree/gift_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1:1\"}}","suiteSourceFile":"core/spec/models/spree/gift_card_spec.rb"},{"name":"State transitions when active transitions from active to redeemed","suite":"Spree::GiftCard at ./spec/models/spree/gift_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1:2\"}}","suiteSourceFile":"core/spec/models/spree/gift_card_spec.rb"},{"name":"State transitions when partially_redeemed allows multiple partial redemptions (remains partially_redeemed)","suite":"Spree::GiftCard at ./spec/models/spree/gift_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2:1\"}}","suiteSourceFile":"core/spec/models/spree/gift_card_spec.rb"},{"name":"State transitions when partially_redeemed transitions from partially_redeemed to redeemed when fully used","suite":"Spree::GiftCard at ./spec/models/spree/gift_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2:2\"}}","suiteSourceFile":"core/spec/models/spree/gift_card_spec.rb"},{"name":"State transitions when redeemed does not allow further redemption","suite":"Spree::GiftCard at ./spec/models/spree/gift_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:3:1\"}}","suiteSourceFile":"core/spec/models/spree/gift_card_spec.rb"},{"name":"custom events gift_card.redeemed publishes gift_card.redeemed event when fully redeemed","suite":"Spree::GiftCard at ./spec/models/spree/gift_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1:1\"}}","suiteSourceFile":"core/spec/models/spree/gift_card_spec.rb"},{"name":"custom events gift_card.partially_redeemed publishes gift_card.partially_redeemed event when partially redeemed","suite":"Spree::GiftCard at ./spec/models/spree/gift_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:2:1\"}}","suiteSourceFile":"core/spec/models/spree/gift_card_spec.rb"},{"name":"validation has attachment present","suite":"Spree::Image at ./spec/models/spree/image_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/image_spec.rb"},{"name":"validation has attachment absent","suite":"Spree::Image at ./spec/models/spree/image_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/image_spec.rb"},{"name":"validation allows only web image content types","suite":"Spree::Image at ./spec/models/spree/image_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/models/spree/image_spec.rb"},{"name":"validation does not allow non-web image content types","suite":"Spree::Image at ./spec/models/spree/image_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","suiteSourceFile":"core/spec/models/spree/image_spec.rb"},{"name":"#styles will return all styles for the image","suite":"Spree::Image at ./spec/models/spree/image_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/image_spec.rb"},{"name":"#style will return style for the given name","suite":"Spree::Image at ./spec/models/spree/image_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/image_spec.rb"},{"name":"cache expiration update position when viewable is a master variant touches product variants","suite":"Spree::Image at ./spec/models/spree/image_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/image_spec.rb"},{"name":"cache expiration update position when viewable is a variant does not touch product variants","suite":"Spree::Image at ./spec/models/spree/image_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/image_spec.rb"},{"name":"image_count counter cache increments image_count when image is created","suite":"Spree::Image at ./spec/models/spree/image_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","suiteSourceFile":"core/spec/models/spree/image_spec.rb"},{"name":"image_count counter cache decrements image_count when image is destroyed","suite":"Spree::Image at ./spec/models/spree/image_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2\"}}","suiteSourceFile":"core/spec/models/spree/image_spec.rb"},{"name":"image_count counter cache tracks multiple images correctly","suite":"Spree::Image at ./spec/models/spree/image_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3\"}}","suiteSourceFile":"core/spec/models/spree/image_spec.rb"},{"name":"total_image_count counter cache on product increments total_image_count when image is created on master","suite":"Spree::Image at ./spec/models/spree/image_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","suiteSourceFile":"core/spec/models/spree/image_spec.rb"},{"name":"total_image_count counter cache on product increments total_image_count when image is created on variant","suite":"Spree::Image at ./spec/models/spree/image_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2\"}}","suiteSourceFile":"core/spec/models/spree/image_spec.rb"},{"name":"total_image_count counter cache on product decrements total_image_count when image is destroyed","suite":"Spree::Image at ./spec/models/spree/image_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:3\"}}","suiteSourceFile":"core/spec/models/spree/image_spec.rb"},{"name":"total_image_count counter cache on product tracks images across all variants correctly","suite":"Spree::Image at ./spec/models/spree/image_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:4\"}}","suiteSourceFile":"core/spec/models/spree/image_spec.rb"},{"name":"Associations example at ./spec/models/spree/import_mapping_spec.rb:9","suite":"Spree::ImportMapping at ./spec/models/spree/import_mapping_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/import_mapping_spec.rb"},{"name":"Validations presence validations validates presence of import","suite":"Spree::ImportMapping at ./spec/models/spree/import_mapping_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/import_mapping_spec.rb"},{"name":"Validations presence validations validates presence of schema_field","suite":"Spree::ImportMapping at ./spec/models/spree/import_mapping_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:2\"}}","suiteSourceFile":"core/spec/models/spree/import_mapping_spec.rb"},{"name":"Validations uniqueness validations validates uniqueness of schema_field scoped to import_id","suite":"Spree::ImportMapping at ./spec/models/spree/import_mapping_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/import_mapping_spec.rb"},{"name":"Validations uniqueness validations allows same schema_field for different imports","suite":"Spree::ImportMapping at ./spec/models/spree/import_mapping_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:2\"}}","suiteSourceFile":"core/spec/models/spree/import_mapping_spec.rb"},{"name":"Validations uniqueness validations validates uniqueness of file_column scoped to import_id","suite":"Spree::ImportMapping at ./spec/models/spree/import_mapping_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:3\"}}","suiteSourceFile":"core/spec/models/spree/import_mapping_spec.rb"},{"name":"Validations uniqueness validations allows blank file_column","suite":"Spree::ImportMapping at ./spec/models/spree/import_mapping_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:4\"}}","suiteSourceFile":"core/spec/models/spree/import_mapping_spec.rb"},{"name":"Validations uniqueness validations allows same file_column for different imports","suite":"Spree::ImportMapping at ./spec/models/spree/import_mapping_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:5\"}}","suiteSourceFile":"core/spec/models/spree/import_mapping_spec.rb"},{"name":"#required? when schema_field is a required field returns true","suite":"Spree::ImportMapping at ./spec/models/spree/import_mapping_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","suiteSourceFile":"core/spec/models/spree/import_mapping_spec.rb"},{"name":"#required? when schema_field is not a required field returns false","suite":"Spree::ImportMapping at ./spec/models/spree/import_mapping_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","suiteSourceFile":"core/spec/models/spree/import_mapping_spec.rb"},{"name":"#mapped? when file_column is present returns true","suite":"Spree::ImportMapping at ./spec/models/spree/import_mapping_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1\"}}","suiteSourceFile":"core/spec/models/spree/import_mapping_spec.rb"},{"name":"#mapped? when file_column is blank returns false","suite":"Spree::ImportMapping at ./spec/models/spree/import_mapping_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1\"}}","suiteSourceFile":"core/spec/models/spree/import_mapping_spec.rb"},{"name":"#mapped? when file_column is blank returns false when file_column is empty string","suite":"Spree::ImportMapping at ./spec/models/spree/import_mapping_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:2\"}}","suiteSourceFile":"core/spec/models/spree/import_mapping_spec.rb"},{"name":"#try_to_auto_assign_file_column when exact match exists assigns the matching file column","suite":"Spree::ImportMapping at ./spec/models/spree/import_mapping_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:1\"}}","suiteSourceFile":"core/spec/models/spree/import_mapping_spec.rb"},{"name":"#try_to_auto_assign_file_column when case-insensitive match exists assigns the matching file column","suite":"Spree::ImportMapping at ./spec/models/spree/import_mapping_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1\"}}","suiteSourceFile":"core/spec/models/spree/import_mapping_spec.rb"},{"name":"#try_to_auto_assign_file_column when parameterized match exists assigns the matching file column","suite":"Spree::ImportMapping at ./spec/models/spree/import_mapping_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3:1\"}}","suiteSourceFile":"core/spec/models/spree/import_mapping_spec.rb"},{"name":"#try_to_auto_assign_file_column when no match exists does not assign a file column","suite":"Spree::ImportMapping at ./spec/models/spree/import_mapping_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:4:1\"}}","suiteSourceFile":"core/spec/models/spree/import_mapping_spec.rb"},{"name":"#try_to_auto_assign_file_column when file_column is already set overwrites with matching column","suite":"Spree::ImportMapping at ./spec/models/spree/import_mapping_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:5:1\"}}","suiteSourceFile":"core/spec/models/spree/import_mapping_spec.rb"},{"name":"#schema_field_label when schema_field exists in import schema returns the label for the schema field","suite":"Spree::ImportMapping at ./spec/models/spree/import_mapping_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1:1\"}}","suiteSourceFile":"core/spec/models/spree/import_mapping_spec.rb"},{"name":"#schema_field_label when schema_field is a metafield returns the metafield definition name","suite":"Spree::ImportMapping at ./spec/models/spree/import_mapping_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2:1\"}}","suiteSourceFile":"core/spec/models/spree/import_mapping_spec.rb"},{"name":"#schema_field_label when schema_field does not exist in import schema returns nil","suite":"Spree::ImportMapping at ./spec/models/spree/import_mapping_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:3:1\"}}","suiteSourceFile":"core/spec/models/spree/import_mapping_spec.rb"},{"name":"Associations #store delegates to import","suite":"Spree::ImportRow at ./spec/models/spree/import_row_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/import_row_spec.rb"},{"name":"Validations row_number uniqueness validates uniqueness scoped to import_id","suite":"Spree::ImportRow at ./spec/models/spree/import_row_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/import_row_spec.rb"},{"name":"Validations row_number uniqueness allows same row_number for different imports","suite":"Spree::ImportRow at ./spec/models/spree/import_row_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:2\"}}","suiteSourceFile":"core/spec/models/spree/import_row_spec.rb"},{"name":"State machine initial state starts in pending state","suite":"Spree::ImportRow at ./spec/models/spree/import_row_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","suiteSourceFile":"core/spec/models/spree/import_row_spec.rb"},{"name":"State machine start_processing event transitions from pending to processing","suite":"Spree::ImportRow at ./spec/models/spree/import_row_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","suiteSourceFile":"core/spec/models/spree/import_row_spec.rb"},{"name":"State machine fail event transitions from processing to failed","suite":"Spree::ImportRow at ./spec/models/spree/import_row_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3:1\"}}","suiteSourceFile":"core/spec/models/spree/import_row_spec.rb"},{"name":"State machine fail event publishes import_row.fail event","suite":"Spree::ImportRow at ./spec/models/spree/import_row_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3:2\"}}","suiteSourceFile":"core/spec/models/spree/import_row_spec.rb"},{"name":"State machine complete event transitions from processing to completed","suite":"Spree::ImportRow at ./spec/models/spree/import_row_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4:1\"}}","suiteSourceFile":"core/spec/models/spree/import_row_spec.rb"},{"name":"State machine complete event publishes import_row.complete event","suite":"Spree::ImportRow at ./spec/models/spree/import_row_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4:2\"}}","suiteSourceFile":"core/spec/models/spree/import_row_spec.rb"},{"name":"Scopes .pending_and_failed returns pending and failed rows","suite":"Spree::ImportRow at ./spec/models/spree/import_row_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1\"}}","suiteSourceFile":"core/spec/models/spree/import_row_spec.rb"},{"name":"Scopes .completed returns only completed rows","suite":"Spree::ImportRow at ./spec/models/spree/import_row_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1\"}}","suiteSourceFile":"core/spec/models/spree/import_row_spec.rb"},{"name":"Scopes .failed returns only failed rows","suite":"Spree::ImportRow at ./spec/models/spree/import_row_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3:1\"}}","suiteSourceFile":"core/spec/models/spree/import_row_spec.rb"},{"name":"Scopes .processed returns completed and failed rows","suite":"Spree::ImportRow at ./spec/models/spree/import_row_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:4:1\"}}","suiteSourceFile":"core/spec/models/spree/import_row_spec.rb"},{"name":"#data_json with valid JSON data returns parsed JSON","suite":"Spree::ImportRow at ./spec/models/spree/import_row_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:1\"}}","suiteSourceFile":"core/spec/models/spree/import_row_spec.rb"},{"name":"#data_json with valid JSON data memoizes the result","suite":"Spree::ImportRow at ./spec/models/spree/import_row_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:2\"}}","suiteSourceFile":"core/spec/models/spree/import_row_spec.rb"},{"name":"#data_json with invalid JSON data returns empty hash","suite":"Spree::ImportRow at ./spec/models/spree/import_row_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1\"}}","suiteSourceFile":"core/spec/models/spree/import_row_spec.rb"},{"name":"#to_schema_hash returns attributes mapped to schema fields","suite":"Spree::ImportRow at ./spec/models/spree/import_row_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","suiteSourceFile":"core/spec/models/spree/import_row_spec.rb"},{"name":"#attribute_by_schema_field returns the mapped attribute value","suite":"Spree::ImportRow at ./spec/models/spree/import_row_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","suiteSourceFile":"core/spec/models/spree/import_row_spec.rb"},{"name":"#process! when processing succeeds transitions to processing then completed","suite":"Spree::ImportRow at ./spec/models/spree/import_row_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1:1\"}}","suiteSourceFile":"core/spec/models/spree/import_row_spec.rb"},{"name":"#process! when processing succeeds sets the item","suite":"Spree::ImportRow at ./spec/models/spree/import_row_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1:2\"}}","suiteSourceFile":"core/spec/models/spree/import_row_spec.rb"},{"name":"#process! when processing fails transitions to failed","suite":"Spree::ImportRow at ./spec/models/spree/import_row_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2:1\"}}","suiteSourceFile":"core/spec/models/spree/import_row_spec.rb"},{"name":"#process! when processing fails sets validation errors","suite":"Spree::ImportRow at ./spec/models/spree/import_row_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2:2\"}}","suiteSourceFile":"core/spec/models/spree/import_row_spec.rb"},{"name":"#process! when processing fails reports the error to Rails.error","suite":"Spree::ImportRow at ./spec/models/spree/import_row_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2:3\"}}","suiteSourceFile":"core/spec/models/spree/import_row_spec.rb"},{"name":"behaves like lifecycle events lifecycle events import.created publishes created event when record is created","suite":"Spree::Import at ./spec/models/spree/import_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/import_spec.rb"},{"name":"behaves like lifecycle events lifecycle events import.updated publishes updated event when record is updated","suite":"Spree::Import at ./spec/models/spree/import_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/import_spec.rb"},{"name":"behaves like lifecycle events lifecycle events import.deleted publishes deleted event when record is deleted","suite":"Spree::Import at ./spec/models/spree/import_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/import_spec.rb"},{"name":"Validations type validation validates type is whitelisted","suite":"Spree::Import at ./spec/models/spree/import_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/import_spec.rb"},{"name":"Validations type validation allows valid types","suite":"Spree::Import at ./spec/models/spree/import_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:2\"}}","suiteSourceFile":"core/spec/models/spree/import_spec.rb"},{"name":"Validations attachment validation validates attachment content type","suite":"Spree::Import at ./spec/models/spree/import_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/import_spec.rb"},{"name":"State machine initial state starts in pending state","suite":"Spree::Import at ./spec/models/spree/import_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","suiteSourceFile":"core/spec/models/spree/import_spec.rb"},{"name":"State machine start_mapping event transitions from pending to mapping","suite":"Spree::Import at ./spec/models/spree/import_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","suiteSourceFile":"core/spec/models/spree/import_spec.rb"},{"name":"State machine start_mapping event creates mappings before transition","suite":"Spree::Import at ./spec/models/spree/import_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:2\"}}","suiteSourceFile":"core/spec/models/spree/import_spec.rb"},{"name":"State machine complete_mapping event transitions from mapping to completed_mapping","suite":"Spree::Import at ./spec/models/spree/import_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3:1\"}}","suiteSourceFile":"core/spec/models/spree/import_spec.rb"},{"name":"State machine complete_mapping event creates rows asynchronously after transition","suite":"Spree::Import at ./spec/models/spree/import_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3:2\"}}","suiteSourceFile":"core/spec/models/spree/import_spec.rb"},{"name":"State machine start_processing event transitions from completed_mapping to processing","suite":"Spree::Import at ./spec/models/spree/import_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4:1\"}}","suiteSourceFile":"core/spec/models/spree/import_spec.rb"},{"name":"State machine complete event transitions from processing to completed","suite":"Spree::Import at ./spec/models/spree/import_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:5:1\"}}","suiteSourceFile":"core/spec/models/spree/import_spec.rb"},{"name":"State machine complete event publishes import.completed event","suite":"Spree::Import at ./spec/models/spree/import_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:5:2\"}}","suiteSourceFile":"core/spec/models/spree/import_spec.rb"},{"name":"#model_class for Products import returns Spree::Product","suite":"Spree::Import at ./spec/models/spree/import_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1\"}}","suiteSourceFile":"core/spec/models/spree/import_spec.rb"},{"name":"#model_class for Customers import returns the user class","suite":"Spree::Import at ./spec/models/spree/import_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1\"}}","suiteSourceFile":"core/spec/models/spree/import_spec.rb"},{"name":"#import_schema returns the correct schema class","suite":"Spree::Import at ./spec/models/spree/import_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","suiteSourceFile":"core/spec/models/spree/import_spec.rb"},{"name":"#display_name returns the correct display name","suite":"Spree::Import at ./spec/models/spree/import_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","suiteSourceFile":"core/spec/models/spree/import_spec.rb"},{"name":"#csv_headers returns the CSV headers","suite":"Spree::Import at ./spec/models/spree/import_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","suiteSourceFile":"core/spec/models/spree/import_spec.rb"},{"name":"#csv_headers with custom delimiter parses headers with custom delimiter","suite":"Spree::Import at ./spec/models/spree/import_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2:1\"}}","suiteSourceFile":"core/spec/models/spree/import_spec.rb"},{"name":"#schema_fields when model supports metafields returns base fields from schema","suite":"Spree::Import at ./spec/models/spree/import_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1:1\"}}","suiteSourceFile":"core/spec/models/spree/import_spec.rb"},{"name":"#schema_fields when model supports metafields includes metafield fields","suite":"Spree::Import at ./spec/models/spree/import_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1:2\"}}","suiteSourceFile":"core/spec/models/spree/import_spec.rb"},{"name":"#schema_fields when model supports metafields combines base fields and metafield fields","suite":"Spree::Import at ./spec/models/spree/import_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1:3\"}}","suiteSourceFile":"core/spec/models/spree/import_spec.rb"},{"name":"#schema_fields when model supports metafields has correct structure for metafield fields","suite":"Spree::Import at ./spec/models/spree/import_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1:4\"}}","suiteSourceFile":"core/spec/models/spree/import_spec.rb"},{"name":"#schema_fields when model does not support metafields returns only base fields from schema","suite":"Spree::Import at ./spec/models/spree/import_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2:1\"}}","suiteSourceFile":"core/spec/models/spree/import_spec.rb"},{"name":"#schema_fields when model does not support metafields does not include any metafield fields","suite":"Spree::Import at ./spec/models/spree/import_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2:2\"}}","suiteSourceFile":"core/spec/models/spree/import_spec.rb"},{"name":"#schema_fields when model supports metafields but has no metafield definitions returns only base fields","suite":"Spree::Import at ./spec/models/spree/import_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:3:1\"}}","suiteSourceFile":"core/spec/models/spree/import_spec.rb"},{"name":"#create_mappings creates mappings for schema fields","suite":"Spree::Import at ./spec/models/spree/import_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1\"}}","suiteSourceFile":"core/spec/models/spree/import_spec.rb"},{"name":"#create_mappings auto-assigns file columns when possible","suite":"Spree::Import at ./spec/models/spree/import_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:2\"}}","suiteSourceFile":"core/spec/models/spree/import_spec.rb"},{"name":"#unmapped_file_columns returns columns that are not mapped","suite":"Spree::Import at ./spec/models/spree/import_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1\"}}","suiteSourceFile":"core/spec/models/spree/import_spec.rb"},{"name":"#mapping_done? when all required fields are mapped returns true","suite":"Spree::Import at ./spec/models/spree/import_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1:1\"}}","suiteSourceFile":"core/spec/models/spree/import_spec.rb"},{"name":"#mapping_done? when not all required fields are mapped returns false","suite":"Spree::Import at ./spec/models/spree/import_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2:1\"}}","suiteSourceFile":"core/spec/models/spree/import_spec.rb"},{"name":"#create_rows_async enqueues CreateRowsJob","suite":"Spree::Import at ./spec/models/spree/import_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:1\"}}","suiteSourceFile":"core/spec/models/spree/import_spec.rb"},{"name":"#process_rows_async enqueues ProcessRowsJob","suite":"Spree::Import at ./spec/models/spree/import_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:1\"}}","suiteSourceFile":"core/spec/models/spree/import_spec.rb"},{"name":"#store when owner is a Store returns the owner","suite":"Spree::Import at ./spec/models/spree/import_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:1:1\"}}","suiteSourceFile":"core/spec/models/spree/import_spec.rb"},{"name":".available_types returns configured import types","suite":"Spree::Import at ./spec/models/spree/import_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:1\"}}","suiteSourceFile":"core/spec/models/spree/import_spec.rb"},{"name":".available_models returns model classes for available types","suite":"Spree::Import at ./spec/models/spree/import_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:1\"}}","suiteSourceFile":"core/spec/models/spree/import_spec.rb"},{"name":".type_for_model returns the import type for a given model","suite":"Spree::Import at ./spec/models/spree/import_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:17:1\"}}","suiteSourceFile":"core/spec/models/spree/import_spec.rb"},{"name":".model_class returns the model class for the import type","suite":"Spree::Import at ./spec/models/spree/import_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:1\"}}","suiteSourceFile":"core/spec/models/spree/import_spec.rb"},{"name":"#event_serializer_class returns the correct event serializer class","suite":"Spree::Import at ./spec/models/spree/import_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:1\"}}","suiteSourceFile":"core/spec/models/spree/import_spec.rb"},{"name":"custom events import.completed publishes import.completed event when completed","suite":"Spree::Import at ./spec/models/spree/import_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:20:1:1\"}}","suiteSourceFile":"core/spec/models/spree/import_spec.rb"},{"name":"example at ./spec/models/spree/integration_spec.rb:7","suite":"Spree::Integration at ./spec/models/spree/integration_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","suiteSourceFile":"core/spec/models/spree/integration_spec.rb"},{"name":"scopes .backordered example at ./spec/models/spree/inventory_unit_spec.rb:14","suite":"Spree::InventoryUnit at ./spec/models/spree/inventory_unit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/inventory_unit_spec.rb"},{"name":"scopes .on_hand example at ./spec/models/spree/inventory_unit_spec.rb:18","suite":"Spree::InventoryUnit at ./spec/models/spree/inventory_unit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/inventory_unit_spec.rb"},{"name":"scopes .on_hand_or_backordered example at ./spec/models/spree/inventory_unit_spec.rb:22","suite":"Spree::InventoryUnit at ./spec/models/spree/inventory_unit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/inventory_unit_spec.rb"},{"name":"scopes .shipped example at ./spec/models/spree/inventory_unit_spec.rb:26","suite":"Spree::InventoryUnit at ./spec/models/spree/inventory_unit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/inventory_unit_spec.rb"},{"name":"scopes .returned example at ./spec/models/spree/inventory_unit_spec.rb:30","suite":"Spree::InventoryUnit at ./spec/models/spree/inventory_unit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5:1\"}}","suiteSourceFile":"core/spec/models/spree/inventory_unit_spec.rb"},{"name":"#backordered_for_stock_item returns modifiable objects","suite":"Spree::InventoryUnit at ./spec/models/spree/inventory_unit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/inventory_unit_spec.rb"},{"name":"#backordered_for_stock_item finds inventory units from its stock location when the unit's variant matches the stock item's variant","suite":"Spree::InventoryUnit at ./spec/models/spree/inventory_unit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","suiteSourceFile":"core/spec/models/spree/inventory_unit_spec.rb"},{"name":"#backordered_for_stock_item does not find inventory units that aren't backordered","suite":"Spree::InventoryUnit at ./spec/models/spree/inventory_unit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3\"}}","suiteSourceFile":"core/spec/models/spree/inventory_unit_spec.rb"},{"name":"#backordered_for_stock_item does not find inventory units that don't match the stock item's variant","suite":"Spree::InventoryUnit at ./spec/models/spree/inventory_unit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:4\"}}","suiteSourceFile":"core/spec/models/spree/inventory_unit_spec.rb"},{"name":"#backordered_for_stock_item does not change shipping cost when fulfilling the order","suite":"Spree::InventoryUnit at ./spec/models/spree/inventory_unit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:5\"}}","suiteSourceFile":"core/spec/models/spree/inventory_unit_spec.rb"},{"name":"#backordered_for_stock_item other shipments does not find inventory units belonging to incomplete orders","suite":"Spree::InventoryUnit at ./spec/models/spree/inventory_unit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:6:1\"}}","suiteSourceFile":"core/spec/models/spree/inventory_unit_spec.rb"},{"name":"#finalize_units! creates a stock movement","suite":"Spree::InventoryUnit at ./spec/models/spree/inventory_unit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/inventory_unit_spec.rb"},{"name":"#current_or_new_return_item associated with a return item returns a persisted return item","suite":"Spree::InventoryUnit at ./spec/models/spree/inventory_unit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1\"}}","suiteSourceFile":"core/spec/models/spree/inventory_unit_spec.rb"},{"name":"#current_or_new_return_item associated with a return item returns it's associated return_item","suite":"Spree::InventoryUnit at ./spec/models/spree/inventory_unit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:2\"}}","suiteSourceFile":"core/spec/models/spree/inventory_unit_spec.rb"},{"name":"#current_or_new_return_item associated with a return item connects return_authorizations","suite":"Spree::InventoryUnit at ./spec/models/spree/inventory_unit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:3\"}}","suiteSourceFile":"core/spec/models/spree/inventory_unit_spec.rb"},{"name":"#current_or_new_return_item no associated return item returns a new return item","suite":"Spree::InventoryUnit at ./spec/models/spree/inventory_unit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1\"}}","suiteSourceFile":"core/spec/models/spree/inventory_unit_spec.rb"},{"name":"#current_or_new_return_item no associated return item associates itself to the new return_item","suite":"Spree::InventoryUnit at ./spec/models/spree/inventory_unit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:2\"}}","suiteSourceFile":"core/spec/models/spree/inventory_unit_spec.rb"},{"name":"#additional_tax_total is the correct amount","suite":"Spree::InventoryUnit at ./spec/models/spree/inventory_unit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","suiteSourceFile":"core/spec/models/spree/inventory_unit_spec.rb"},{"name":"#included_tax_total is the correct amount","suite":"Spree::InventoryUnit at ./spec/models/spree/inventory_unit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","suiteSourceFile":"core/spec/models/spree/inventory_unit_spec.rb"},{"name":"#additional_tax_total is the correct amount","suite":"Spree::InventoryUnit at ./spec/models/spree/inventory_unit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","suiteSourceFile":"core/spec/models/spree/inventory_unit_spec.rb"},{"name":"#included_tax_total is the correct amount","suite":"Spree::InventoryUnit at ./spec/models/spree/inventory_unit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1\"}}","suiteSourceFile":"core/spec/models/spree/inventory_unit_spec.rb"},{"name":"#charged_amount is the correct amount","suite":"Spree::InventoryUnit at ./spec/models/spree/inventory_unit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1\"}}","suiteSourceFile":"core/spec/models/spree/inventory_unit_spec.rb"},{"name":"Validations when invitee is the same as inviter is invalid","suite":"Spree::Invitation at ./spec/models/spree/invitation_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/invitation_spec.rb"},{"name":"Validations when invitation is accepted after expiration is invalid","suite":"Spree::Invitation at ./spec/models/spree/invitation_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/invitation_spec.rb"},{"name":"Validations when invitee already exists in the store is invalid","suite":"Spree::Invitation at ./spec/models/spree/invitation_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/invitation_spec.rb"},{"name":"Callbacks sets defaults on initialization","suite":"Spree::Invitation at ./spec/models/spree/invitation_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/invitation_spec.rb"},{"name":"Callbacks sets invitee from email before validation","suite":"Spree::Invitation at ./spec/models/spree/invitation_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","suiteSourceFile":"core/spec/models/spree/invitation_spec.rb"},{"name":"State Machine has initial state of pending","suite":"Spree::Invitation at ./spec/models/spree/invitation_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/invitation_spec.rb"},{"name":"State Machine when accepting an invitation changes status to accepted","suite":"Spree::Invitation at ./spec/models/spree/invitation_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","suiteSourceFile":"core/spec/models/spree/invitation_spec.rb"},{"name":"State Machine when accepting an invitation sets accepted_at timestamp","suite":"Spree::Invitation at ./spec/models/spree/invitation_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:2\"}}","suiteSourceFile":"core/spec/models/spree/invitation_spec.rb"},{"name":"State Machine when accepting an invitation publishes invitation.accept event","suite":"Spree::Invitation at ./spec/models/spree/invitation_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:3\"}}","suiteSourceFile":"core/spec/models/spree/invitation_spec.rb"},{"name":"State Machine when accepting an invitation creates a resource user","suite":"Spree::Invitation at ./spec/models/spree/invitation_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:4\"}}","suiteSourceFile":"core/spec/models/spree/invitation_spec.rb"},{"name":"#expired? returns true when expires_at is in the past","suite":"Spree::Invitation at ./spec/models/spree/invitation_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/invitation_spec.rb"},{"name":"#expired? returns false when expires_at is in the future","suite":"Spree::Invitation at ./spec/models/spree/invitation_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2\"}}","suiteSourceFile":"core/spec/models/spree/invitation_spec.rb"},{"name":"#resend! publishes invitation.resent event if invitation is pending and not expired","suite":"Spree::Invitation at ./spec/models/spree/invitation_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","suiteSourceFile":"core/spec/models/spree/invitation_spec.rb"},{"name":"#resend! does not publish event if invitation is expired","suite":"Spree::Invitation at ./spec/models/spree/invitation_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2\"}}","suiteSourceFile":"core/spec/models/spree/invitation_spec.rb"},{"name":"#resend! does not publish event if invitation is accepted","suite":"Spree::Invitation at ./spec/models/spree/invitation_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3\"}}","suiteSourceFile":"core/spec/models/spree/invitation_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:4","suite":"Spree::LineItem at ./spec/models/spree/line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/line_item_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:5","suite":"Spree::LineItem at ./spec/models/spree/line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/line_item_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:7","suite":"Spree::LineItem at ./spec/models/spree/line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/models/spree/line_item_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:8","suite":"Spree::LineItem at ./spec/models/spree/line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","suiteSourceFile":"core/spec/models/spree/line_item_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:10","suite":"Spree::LineItem at ./spec/models/spree/line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","suiteSourceFile":"core/spec/models/spree/line_item_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:11","suite":"Spree::LineItem at ./spec/models/spree/line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","suiteSourceFile":"core/spec/models/spree/line_item_spec.rb"},{"name":"behaves like metadata reads data as symbolized keys","suite":"Spree::LineItem at ./spec/models/spree/line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7\"}}","suiteSourceFile":"core/spec/models/spree/line_item_spec.rb"},{"name":"behaves like metadata reads data as not symbolized keys","suite":"Spree::LineItem at ./spec/models/spree/line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8\"}}","suiteSourceFile":"core/spec/models/spree/line_item_spec.rb"},{"name":"behaves like metadata can query records by metadata properties","suite":"Spree::LineItem at ./spec/models/spree/line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:10\"}}","suiteSourceFile":"core/spec/models/spree/line_item_spec.rb"},{"name":"behaves like lifecycle events lifecycle events line_item.created publishes created event when record is created","suite":"Spree::LineItem at ./spec/models/spree/line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/line_item_spec.rb"},{"name":"behaves like lifecycle events lifecycle events line_item.updated publishes updated event when record is updated","suite":"Spree::LineItem at ./spec/models/spree/line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/line_item_spec.rb"},{"name":"behaves like lifecycle events lifecycle events line_item.deleted publishes deleted event when record is deleted","suite":"Spree::LineItem at ./spec/models/spree/line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/line_item_spec.rb"},{"name":"Validations ensure_proper_currency order is present when line_item's currency matches with order's example at ./spec/models/spree/line_item_spec.rb:15","suite":"Spree::LineItem at ./spec/models/spree/line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/line_item_spec.rb"},{"name":"Validations ensure_proper_currency order is present when line_item's currency does not matches with order's example at ./spec/models/spree/line_item_spec.rb:23","suite":"Spree::LineItem at ./spec/models/spree/line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/line_item_spec.rb"},{"name":"#quantity has a default quantity of 1","suite":"Spree::LineItem at ./spec/models/spree/line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/line_item_spec.rb"},{"name":"#quantity allows to set different value for quantity","suite":"Spree::LineItem at ./spec/models/spree/line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2\"}}","suiteSourceFile":"core/spec/models/spree/line_item_spec.rb"},{"name":"#ensure_valid_quantity quantity.nil? example at ./spec/models/spree/line_item_spec.rb:48","suite":"Spree::LineItem at ./spec/models/spree/line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:1\"}}","suiteSourceFile":"core/spec/models/spree/line_item_spec.rb"},{"name":"#ensure_valid_quantity quantity < 0 example at ./spec/models/spree/line_item_spec.rb:57","suite":"Spree::LineItem at ./spec/models/spree/line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1\"}}","suiteSourceFile":"core/spec/models/spree/line_item_spec.rb"},{"name":"#ensure_valid_quantity quantity = 0 example at ./spec/models/spree/line_item_spec.rb:66","suite":"Spree::LineItem at ./spec/models/spree/line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3:1\"}}","suiteSourceFile":"core/spec/models/spree/line_item_spec.rb"},{"name":"#ensure_valid_quantity quantity > 0 example at ./spec/models/spree/line_item_spec.rb:77","suite":"Spree::LineItem at ./spec/models/spree/line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:4:1\"}}","suiteSourceFile":"core/spec/models/spree/line_item_spec.rb"},{"name":"#save touches the order","suite":"Spree::LineItem at ./spec/models/spree/line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","suiteSourceFile":"core/spec/models/spree/line_item_spec.rb"},{"name":"#discontinued fetches discontinued products","suite":"Spree::LineItem at ./spec/models/spree/line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","suiteSourceFile":"core/spec/models/spree/line_item_spec.rb"},{"name":"#discontinued fetches discontinued variants","suite":"Spree::LineItem at ./spec/models/spree/line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2\"}}","suiteSourceFile":"core/spec/models/spree/line_item_spec.rb"},{"name":"#destroy deletes inventory units","suite":"Spree::LineItem at ./spec/models/spree/line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1\"}}","suiteSourceFile":"core/spec/models/spree/line_item_spec.rb"},{"name":"#save line item changes triggers adjustment total recalculation","suite":"Spree::LineItem at ./spec/models/spree/line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1:1\"}}","suiteSourceFile":"core/spec/models/spree/line_item_spec.rb"},{"name":"#save line item does not change does not trigger adjustment total recalculation","suite":"Spree::LineItem at ./spec/models/spree/line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:2:1\"}}","suiteSourceFile":"core/spec/models/spree/line_item_spec.rb"},{"name":"#save target_shipment is provided verifies inventory","suite":"Spree::LineItem at ./spec/models/spree/line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:3:1\"}}","suiteSourceFile":"core/spec/models/spree/line_item_spec.rb"},{"name":"#create when order has a tax zone creates a tax adjustment","suite":"Spree::LineItem at ./spec/models/spree/line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1:1\"}}","suiteSourceFile":"core/spec/models/spree/line_item_spec.rb"},{"name":"#create when order does not have a tax zone does not create a tax adjustment","suite":"Spree::LineItem at ./spec/models/spree/line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:2:1\"}}","suiteSourceFile":"core/spec/models/spree/line_item_spec.rb"},{"name":"#copy_price copies over a variant's prices","suite":"Spree::LineItem at ./spec/models/spree/line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1\"}}","suiteSourceFile":"core/spec/models/spree/line_item_spec.rb"},{"name":"#copy_price variant price amount is equal 0 copies over a variant's price","suite":"Spree::LineItem at ./spec/models/spree/line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2:1\"}}","suiteSourceFile":"core/spec/models/spree/line_item_spec.rb"},{"name":"#copy_price variant price amount is equal 0 should be valid","suite":"Spree::LineItem at ./spec/models/spree/line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2:2\"}}","suiteSourceFile":"core/spec/models/spree/line_item_spec.rb"},{"name":"#copy_price no price available in the selected currency doesn't copy the price","suite":"Spree::LineItem at ./spec/models/spree/line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:3:1\"}}","suiteSourceFile":"core/spec/models/spree/line_item_spec.rb"},{"name":"#copy_price no price available in the selected currency shouldn't be valid","suite":"Spree::LineItem at ./spec/models/spree/line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:3:2\"}}","suiteSourceFile":"core/spec/models/spree/line_item_spec.rb"},{"name":"#update_price copies over a variants differing price for another vat zone","suite":"Spree::LineItem at ./spec/models/spree/line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:1\"}}","suiteSourceFile":"core/spec/models/spree/line_item_spec.rb"},{"name":"#copy_tax_category copies over a variant's tax category","suite":"Spree::LineItem at ./spec/models/spree/line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:1\"}}","suiteSourceFile":"core/spec/models/spree/line_item_spec.rb"},{"name":"#discounted_amount returns the amount minus any discounts","suite":"Spree::LineItem at ./spec/models/spree/line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:1\"}}","suiteSourceFile":"core/spec/models/spree/line_item_spec.rb"},{"name":".currency returns the globally configured currency","suite":"Spree::LineItem at ./spec/models/spree/line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:1\"}}","suiteSourceFile":"core/spec/models/spree/line_item_spec.rb"},{"name":"#discounted_money returns a money object with the discounted amount","suite":"Spree::LineItem at ./spec/models/spree/line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:1\"}}","suiteSourceFile":"core/spec/models/spree/line_item_spec.rb"},{"name":"#money returns a Spree::Money representing the total for this line item","suite":"Spree::LineItem at ./spec/models/spree/line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:17:1\"}}","suiteSourceFile":"core/spec/models/spree/line_item_spec.rb"},{"name":"#single_money returns a Spree::Money representing the price for one variant","suite":"Spree::LineItem at ./spec/models/spree/line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:1\"}}","suiteSourceFile":"core/spec/models/spree/line_item_spec.rb"},{"name":"has inventory (completed order so items were already unstocked) nothing left on stock allows to decrease item quantity","suite":"Spree::LineItem at ./spec/models/spree/line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:1:1\"}}","suiteSourceFile":"core/spec/models/spree/line_item_spec.rb"},{"name":"has inventory (completed order so items were already unstocked) nothing left on stock doesnt allow to increase item quantity","suite":"Spree::LineItem at ./spec/models/spree/line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:1:2\"}}","suiteSourceFile":"core/spec/models/spree/line_item_spec.rb"},{"name":"has inventory (completed order so items were already unstocked) 2 items left on stock allows to increase quantity up to stock availability","suite":"Spree::LineItem at ./spec/models/spree/line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:2:1\"}}","suiteSourceFile":"core/spec/models/spree/line_item_spec.rb"},{"name":"has inventory (completed order so items were already unstocked) 2 items left on stock doesnt allow to increase quantity over stock availability","suite":"Spree::LineItem at ./spec/models/spree/line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:2:2\"}}","suiteSourceFile":"core/spec/models/spree/line_item_spec.rb"},{"name":"currency same as order.currency is a valid line item","suite":"Spree::LineItem at ./spec/models/spree/line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:20:1\"}}","suiteSourceFile":"core/spec/models/spree/line_item_spec.rb"},{"name":"currency different than order.currency is not a valid line item","suite":"Spree::LineItem at ./spec/models/spree/line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:21:1\"}}","suiteSourceFile":"core/spec/models/spree/line_item_spec.rb"},{"name":"#options= can handle updating a blank line item with no order","suite":"Spree::LineItem at ./spec/models/spree/line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:22:1\"}}","suiteSourceFile":"core/spec/models/spree/line_item_spec.rb"},{"name":"#options= updates the data provided in the options","suite":"Spree::LineItem at ./spec/models/spree/line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:22:2\"}}","suiteSourceFile":"core/spec/models/spree/line_item_spec.rb"},{"name":"#options= updates the price based on the options provided","suite":"Spree::LineItem at ./spec/models/spree/line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:22:3\"}}","suiteSourceFile":"core/spec/models/spree/line_item_spec.rb"},{"name":"precision of pre_tax_amount keeps four digits of precision even when reloading","suite":"Spree::LineItem at ./spec/models/spree/line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:23:1\"}}","suiteSourceFile":"core/spec/models/spree/line_item_spec.rb"},{"name":"#update_price_from_modifier with specified currency sets currency","suite":"Spree::LineItem at ./spec/models/spree/line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:24:1:1\"}}","suiteSourceFile":"core/spec/models/spree/line_item_spec.rb"},{"name":"#update_price_from_modifier with specified currency variant with price in this currency sets the proper price","suite":"Spree::LineItem at ./spec/models/spree/line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:24:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/line_item_spec.rb"},{"name":"#update_price_from_modifier with specified currency variant without price in this currency sets the proper price","suite":"Spree::LineItem at ./spec/models/spree/line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:24:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/line_item_spec.rb"},{"name":"#update_price_from_modifier without currency sets the proper price","suite":"Spree::LineItem at ./spec/models/spree/line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:24:2:1\"}}","suiteSourceFile":"core/spec/models/spree/line_item_spec.rb"},{"name":"#shipments returns the shipments for the line item","suite":"Spree::LineItem at ./spec/models/spree/line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:25:1\"}}","suiteSourceFile":"core/spec/models/spree/line_item_spec.rb"},{"name":"#shipping_cost returns the shipping cost for the line item","suite":"Spree::LineItem at ./spec/models/spree/line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:26:1\"}}","suiteSourceFile":"core/spec/models/spree/line_item_spec.rb"},{"name":"#shipping_cost when the shipment is canceled returns 0","suite":"Spree::LineItem at ./spec/models/spree/line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:26:2:1\"}}","suiteSourceFile":"core/spec/models/spree/line_item_spec.rb"},{"name":"#shipping_cost when the shipment is not present returns 0","suite":"Spree::LineItem at ./spec/models/spree/line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:26:3:1\"}}","suiteSourceFile":"core/spec/models/spree/line_item_spec.rb"},{"name":"#shipping_cost when the shipment cost is 0 returns 0","suite":"Spree::LineItem at ./spec/models/spree/line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:26:4:1\"}}","suiteSourceFile":"core/spec/models/spree/line_item_spec.rb"},{"name":"#amount returns the amount for the line item","suite":"Spree::LineItem at ./spec/models/spree/line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:27:1\"}}","suiteSourceFile":"core/spec/models/spree/line_item_spec.rb"},{"name":"#display_amount returns the amount for the line item","suite":"Spree::LineItem at ./spec/models/spree/line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:28:1\"}}","suiteSourceFile":"core/spec/models/spree/line_item_spec.rb"},{"name":"#compare_at_amount returns the compare at amount for the line item","suite":"Spree::LineItem at ./spec/models/spree/line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:1\"}}","suiteSourceFile":"core/spec/models/spree/line_item_spec.rb"},{"name":"#compare_at_amount when compare_at_price is nil returns zero","suite":"Spree::LineItem at ./spec/models/spree/line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:2:1\"}}","suiteSourceFile":"core/spec/models/spree/line_item_spec.rb"},{"name":"#compare_at_amount when compare_at_price is zero returns zero","suite":"Spree::LineItem at ./spec/models/spree/line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:3:1\"}}","suiteSourceFile":"core/spec/models/spree/line_item_spec.rb"},{"name":"#display_compare_at_amount returns the compare at amount for the line item","suite":"Spree::LineItem at ./spec/models/spree/line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:30:1\"}}","suiteSourceFile":"core/spec/models/spree/line_item_spec.rb"},{"name":"#item_weight returns the weight for the line item","suite":"Spree::LineItem at ./spec/models/spree/line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:31:1\"}}","suiteSourceFile":"core/spec/models/spree/line_item_spec.rb"},{"name":"#dimensions_unit returns the dimension unit for the line item","suite":"Spree::LineItem at ./spec/models/spree/line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:32:1\"}}","suiteSourceFile":"core/spec/models/spree/line_item_spec.rb"},{"name":"#weight_unit returns the weight unit for the line item","suite":"Spree::LineItem at ./spec/models/spree/line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:33:1\"}}","suiteSourceFile":"core/spec/models/spree/line_item_spec.rb"},{"name":"#should_update_price? when order is not completed returns true","suite":"Spree::LineItem at ./spec/models/spree/line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:34:1:1\"}}","suiteSourceFile":"core/spec/models/spree/line_item_spec.rb"},{"name":"#should_update_price? when order is completed returns false","suite":"Spree::LineItem at ./spec/models/spree/line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:34:2:1\"}}","suiteSourceFile":"core/spec/models/spree/line_item_spec.rb"},{"name":"#recalculate_price with volume-based pricing updates price when quantity increases to meet volume threshold","suite":"Spree::LineItem at ./spec/models/spree/line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:35:1:1\"}}","suiteSourceFile":"core/spec/models/spree/line_item_spec.rb"},{"name":"#recalculate_price with volume-based pricing reverts to base price when quantity decreases below volume threshold","suite":"Spree::LineItem at ./spec/models/spree/line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:35:1:2\"}}","suiteSourceFile":"core/spec/models/spree/line_item_spec.rb"},{"name":"#recalculate_price with volume-based pricing when order is completed does not update price when quantity changes","suite":"Spree::LineItem at ./spec/models/spree/line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:35:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/line_item_spec.rb"},{"name":"#recalculate_price without volume-based pricing does not change price when quantity changes","suite":"Spree::LineItem at ./spec/models/spree/line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:35:2:1\"}}","suiteSourceFile":"core/spec/models/spree/line_item_spec.rb"},{"name":"#recalculate_price when creating line item with quantity meeting volume threshold applies volume price on initial creation","suite":"Spree::LineItem at ./spec/models/spree/line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:35:3:1\"}}","suiteSourceFile":"core/spec/models/spree/line_item_spec.rb"},{"name":"#recalculate_price when creating line item with quantity meeting volume threshold does not apply volume price when quantity is below threshold","suite":"Spree::LineItem at ./spec/models/spree/line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:35:3:2\"}}","suiteSourceFile":"core/spec/models/spree/line_item_spec.rb"},{"name":"#discounted_price returns the discounted price for the line item","suite":"Spree::LineItem at ./spec/models/spree/line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:36:1\"}}","suiteSourceFile":"core/spec/models/spree/line_item_spec.rb"},{"name":"#discounted_price when line item promo_total is zero returns the price for the line item","suite":"Spree::LineItem at ./spec/models/spree/line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:36:2:1\"}}","suiteSourceFile":"core/spec/models/spree/line_item_spec.rb"},{"name":"#discounted_price when quantity is zero returns the price for the line item","suite":"Spree::LineItem at ./spec/models/spree/line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:36:3:1\"}}","suiteSourceFile":"core/spec/models/spree/line_item_spec.rb"},{"name":"#parsed_details deserializes log entry with billing response","suite":"Spree::LogEntry at ./spec/models/spree/log_entry_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/log_entry_spec.rb"},{"name":"scopes .available returns only both definitions (from DisplayOn concern)","suite":"Spree::MetafieldDefinition at ./spec/models/spree/metafield_definition_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/metafield_definition_spec.rb"},{"name":"scopes .available_on_front_end returns public definitions (front_end and both)","suite":"Spree::MetafieldDefinition at ./spec/models/spree/metafield_definition_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/metafield_definition_spec.rb"},{"name":"scopes .available_on_back_end returns admin definitions (back_end and both)","suite":"Spree::MetafieldDefinition at ./spec/models/spree/metafield_definition_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/metafield_definition_spec.rb"},{"name":"scopes .for_resource_type returns definitions for specific resource type","suite":"Spree::MetafieldDefinition at ./spec/models/spree/metafield_definition_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/metafield_definition_spec.rb"},{"name":"#csv_header_name returns the CSV header name with metafield prefix","suite":"Spree::MetafieldDefinition at ./spec/models/spree/metafield_definition_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/metafield_definition_spec.rb"},{"name":"#full_key returns the full key with namespace","suite":"Spree::MetafieldDefinition at ./spec/models/spree/metafield_definition_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/metafield_definition_spec.rb"},{"name":"Callbacks sets the type from the metafield definition","suite":"Spree::Metafield at ./spec/models/spree/metafield_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/metafield_spec.rb"},{"name":"Validations validates the type must match the metafield definition","suite":"Spree::Metafield at ./spec/models/spree/metafield_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/metafield_spec.rb"},{"name":"Scopes .with_key returns the metafields with the given key","suite":"Spree::Metafield at ./spec/models/spree/metafield_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","suiteSourceFile":"core/spec/models/spree/metafield_spec.rb"},{"name":"#serialize_value returns the value","suite":"Spree::Metafield at ./spec/models/spree/metafield_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/metafield_spec.rb"},{"name":"#csv_value for base Metafield returns the value as string","suite":"Spree::Metafield at ./spec/models/spree/metafield_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:1\"}}","suiteSourceFile":"core/spec/models/spree/metafield_spec.rb"},{"name":"#csv_value for Boolean metafield returns Yes for true values","suite":"Spree::Metafield at ./spec/models/spree/metafield_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1\"}}","suiteSourceFile":"core/spec/models/spree/metafield_spec.rb"},{"name":"#csv_value for Boolean metafield returns No for false values","suite":"Spree::Metafield at ./spec/models/spree/metafield_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:2\"}}","suiteSourceFile":"core/spec/models/spree/metafield_spec.rb"},{"name":"#csv_value for Number metafield returns the number as string","suite":"Spree::Metafield at ./spec/models/spree/metafield_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3:1\"}}","suiteSourceFile":"core/spec/models/spree/metafield_spec.rb"},{"name":"#csv_value for Json metafield returns the JSON string","suite":"Spree::Metafield at ./spec/models/spree/metafield_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:4:1\"}}","suiteSourceFile":"core/spec/models/spree/metafield_spec.rb"},{"name":"#csv_value for ShortText metafield returns the text value","suite":"Spree::Metafield at ./spec/models/spree/metafield_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:5:1\"}}","suiteSourceFile":"core/spec/models/spree/metafield_spec.rb"},{"name":"#csv_value for LongText metafield returns the text value","suite":"Spree::Metafield at ./spec/models/spree/metafield_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:6:1\"}}","suiteSourceFile":"core/spec/models/spree/metafield_spec.rb"},{"name":"#csv_value for RichText metafield returns plain text without HTML tags","suite":"Spree::Metafield at ./spec/models/spree/metafield_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:7:1\"}}","suiteSourceFile":"core/spec/models/spree/metafield_spec.rb"},{"name":"normalizes normalizes the boolean value","suite":"Spree::Metafields::Boolean at ./spec/models/spree/metafields/boolean_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/metafields/boolean_spec.rb"},{"name":"#serialize_value returns the boolean value","suite":"Spree::Metafields::Boolean at ./spec/models/spree/metafields/boolean_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/metafields/boolean_spec.rb"},{"name":"#csv_value returns the boolean value","suite":"Spree::Metafields::Boolean at ./spec/models/spree/metafields/boolean_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/metafields/boolean_spec.rb"},{"name":"Validations returns false if the value is not valid JSON","suite":"Spree::Metafields::Json at ./spec/models/spree/metafields/json_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/metafields/json_spec.rb"},{"name":"Validations returns true for valid JSON object","suite":"Spree::Metafields::Json at ./spec/models/spree/metafields/json_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/metafields/json_spec.rb"},{"name":"Validations returns true for valid JSON array","suite":"Spree::Metafields::Json at ./spec/models/spree/metafields/json_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/models/spree/metafields/json_spec.rb"},{"name":"Validations returns true for valid JSON string","suite":"Spree::Metafields::Json at ./spec/models/spree/metafields/json_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","suiteSourceFile":"core/spec/models/spree/metafields/json_spec.rb"},{"name":"Validations returns true for valid JSON number","suite":"Spree::Metafields::Json at ./spec/models/spree/metafields/json_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","suiteSourceFile":"core/spec/models/spree/metafields/json_spec.rb"},{"name":"Validations returns true for valid JSON boolean","suite":"Spree::Metafields::Json at ./spec/models/spree/metafields/json_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","suiteSourceFile":"core/spec/models/spree/metafields/json_spec.rb"},{"name":"Validations returns true for valid JSON null","suite":"Spree::Metafields::Json at ./spec/models/spree/metafields/json_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7\"}}","suiteSourceFile":"core/spec/models/spree/metafields/json_spec.rb"},{"name":"#serialize_value returns parsed JSON object","suite":"Spree::Metafields::Json at ./spec/models/spree/metafields/json_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/metafields/json_spec.rb"},{"name":"#serialize_value returns parsed JSON array","suite":"Spree::Metafields::Json at ./spec/models/spree/metafields/json_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","suiteSourceFile":"core/spec/models/spree/metafields/json_spec.rb"},{"name":"#serialize_value returns original value if parsing fails","suite":"Spree::Metafields::Json at ./spec/models/spree/metafields/json_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3\"}}","suiteSourceFile":"core/spec/models/spree/metafields/json_spec.rb"},{"name":"Validations returns false if the value is not a number","suite":"Spree::Metafields::Number at ./spec/models/spree/metafields/number_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/metafields/number_spec.rb"},{"name":"#serialize_value returns the number","suite":"Spree::Metafields::Number at ./spec/models/spree/metafields/number_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/metafields/number_spec.rb"},{"name":"#csv_value returns the number as a string","suite":"Spree::Metafields::Number at ./spec/models/spree/metafields/number_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/metafields/number_spec.rb"},{"name":"#value returns the rich text body","suite":"Spree::Metafields::RichText at ./spec/models/spree/metafields/rich_text_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/metafields/rich_text_spec.rb"},{"name":"#serialize_value returns the rich text body","suite":"Spree::Metafields::RichText at ./spec/models/spree/metafields/rich_text_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/metafields/rich_text_spec.rb"},{"name":"behaves like lifecycle events lifecycle events newsletter_subscriber.created publishes created event when record is created","suite":"Spree::NewsletterSubscriber at ./spec/models/spree/newsletter_subscriber_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/newsletter_subscriber_spec.rb"},{"name":"behaves like lifecycle events lifecycle events newsletter_subscriber.updated publishes updated event when record is updated","suite":"Spree::NewsletterSubscriber at ./spec/models/spree/newsletter_subscriber_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/newsletter_subscriber_spec.rb"},{"name":"behaves like lifecycle events lifecycle events newsletter_subscriber.deleted publishes deleted event when record is deleted","suite":"Spree::NewsletterSubscriber at ./spec/models/spree/newsletter_subscriber_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/newsletter_subscriber_spec.rb"},{"name":"normalizations example at ./spec/models/spree/newsletter_subscriber_spec.rb:11","suite":"Spree::NewsletterSubscriber at ./spec/models/spree/newsletter_subscriber_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/newsletter_subscriber_spec.rb"},{"name":"normalizations example at ./spec/models/spree/newsletter_subscriber_spec.rb:12","suite":"Spree::NewsletterSubscriber at ./spec/models/spree/newsletter_subscriber_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","suiteSourceFile":"core/spec/models/spree/newsletter_subscriber_spec.rb"},{"name":"normalizations example at ./spec/models/spree/newsletter_subscriber_spec.rb:13","suite":"Spree::NewsletterSubscriber at ./spec/models/spree/newsletter_subscriber_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3\"}}","suiteSourceFile":"core/spec/models/spree/newsletter_subscriber_spec.rb"},{"name":"validations example at ./spec/models/spree/newsletter_subscriber_spec.rb:17","suite":"Spree::NewsletterSubscriber at ./spec/models/spree/newsletter_subscriber_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/newsletter_subscriber_spec.rb"},{"name":"validations example at ./spec/models/spree/newsletter_subscriber_spec.rb:18","suite":"Spree::NewsletterSubscriber at ./spec/models/spree/newsletter_subscriber_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","suiteSourceFile":"core/spec/models/spree/newsletter_subscriber_spec.rb"},{"name":"validations example at ./spec/models/spree/newsletter_subscriber_spec.rb:19","suite":"Spree::NewsletterSubscriber at ./spec/models/spree/newsletter_subscriber_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3\"}}","suiteSourceFile":"core/spec/models/spree/newsletter_subscriber_spec.rb"},{"name":"validations example at ./spec/models/spree/newsletter_subscriber_spec.rb:20","suite":"Spree::NewsletterSubscriber at ./spec/models/spree/newsletter_subscriber_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4\"}}","suiteSourceFile":"core/spec/models/spree/newsletter_subscriber_spec.rb"},{"name":"scopes verified returns verified subscribers only","suite":"Spree::NewsletterSubscriber at ./spec/models/spree/newsletter_subscriber_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1\"}}","suiteSourceFile":"core/spec/models/spree/newsletter_subscriber_spec.rb"},{"name":"scopes unverified returns unverified subscribers only","suite":"Spree::NewsletterSubscriber at ./spec/models/spree/newsletter_subscriber_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1\"}}","suiteSourceFile":"core/spec/models/spree/newsletter_subscriber_spec.rb"},{"name":"subscribe with user calls subscribe service","suite":"Spree::NewsletterSubscriber at ./spec/models/spree/newsletter_subscriber_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:1\"}}","suiteSourceFile":"core/spec/models/spree/newsletter_subscriber_spec.rb"},{"name":"subscribe without user calls subscribe service","suite":"Spree::NewsletterSubscriber at ./spec/models/spree/newsletter_subscriber_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1\"}}","suiteSourceFile":"core/spec/models/spree/newsletter_subscriber_spec.rb"},{"name":"verify when subscriber is found calls verify service","suite":"Spree::NewsletterSubscriber at ./spec/models/spree/newsletter_subscriber_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1:1\"}}","suiteSourceFile":"core/spec/models/spree/newsletter_subscriber_spec.rb"},{"name":"verify when subscriber is not found returns ActiveRecord::RecordNotFound","suite":"Spree::NewsletterSubscriber at ./spec/models/spree/newsletter_subscriber_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2:1\"}}","suiteSourceFile":"core/spec/models/spree/newsletter_subscriber_spec.rb"},{"name":"verified? when email is not verified example at ./spec/models/spree/newsletter_subscriber_spec.rb:108","suite":"Spree::NewsletterSubscriber at ./spec/models/spree/newsletter_subscriber_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1:1\"}}","suiteSourceFile":"core/spec/models/spree/newsletter_subscriber_spec.rb"},{"name":"verified? when email is verified example at ./spec/models/spree/newsletter_subscriber_spec.rb:114","suite":"Spree::NewsletterSubscriber at ./spec/models/spree/newsletter_subscriber_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2:1\"}}","suiteSourceFile":"core/spec/models/spree/newsletter_subscriber_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:4","suite":"Spree::OptionType at ./spec/models/spree/option_type_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/option_type_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:5","suite":"Spree::OptionType at ./spec/models/spree/option_type_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/option_type_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:7","suite":"Spree::OptionType at ./spec/models/spree/option_type_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/models/spree/option_type_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:8","suite":"Spree::OptionType at ./spec/models/spree/option_type_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","suiteSourceFile":"core/spec/models/spree/option_type_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:10","suite":"Spree::OptionType at ./spec/models/spree/option_type_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","suiteSourceFile":"core/spec/models/spree/option_type_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:11","suite":"Spree::OptionType at ./spec/models/spree/option_type_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","suiteSourceFile":"core/spec/models/spree/option_type_spec.rb"},{"name":"behaves like metadata reads data as symbolized keys","suite":"Spree::OptionType at ./spec/models/spree/option_type_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7\"}}","suiteSourceFile":"core/spec/models/spree/option_type_spec.rb"},{"name":"behaves like metadata reads data as not symbolized keys","suite":"Spree::OptionType at ./spec/models/spree/option_type_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8\"}}","suiteSourceFile":"core/spec/models/spree/option_type_spec.rb"},{"name":"behaves like metadata can query records by metadata properties","suite":"Spree::OptionType at ./spec/models/spree/option_type_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:10\"}}","suiteSourceFile":"core/spec/models/spree/option_type_spec.rb"},{"name":"#filterable example at ./spec/models/spree/option_type_spec.rb:7","suite":"Spree::OptionType at ./spec/models/spree/option_type_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/option_type_spec.rb"},{"name":"callbacks #normalize_name should parameterize the name","suite":"Spree::OptionType at ./spec/models/spree/option_type_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","suiteSourceFile":"core/spec/models/spree/option_type_spec.rb"},{"name":"translations translates option type fields","suite":"Spree::OptionType at ./spec/models/spree/option_type_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/option_type_spec.rb"},{"name":"translations with always_use_translations enabled creates option type with normalized presentation without NotNullViolation","suite":"Spree::OptionType at ./spec/models/spree/option_type_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1\"}}","suiteSourceFile":"core/spec/models/spree/option_type_spec.rb"},{"name":"translations with always_use_translations enabled normalizes translated presentations across locales","suite":"Spree::OptionType at ./spec/models/spree/option_type_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:2\"}}","suiteSourceFile":"core/spec/models/spree/option_type_spec.rb"},{"name":"color methods .color should return the first option type with name \"color\"","suite":"Spree::OptionType at ./spec/models/spree/option_type_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:1\"}}","suiteSourceFile":"core/spec/models/spree/option_type_spec.rb"},{"name":"color methods #color? should return true if the name is \"color\" or \"colour\"","suite":"Spree::OptionType at ./spec/models/spree/option_type_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1\"}}","suiteSourceFile":"core/spec/models/spree/option_type_spec.rb"},{"name":"color methods #color? should return false if the name is not \"color\" or \"colour\"","suite":"Spree::OptionType at ./spec/models/spree/option_type_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:2\"}}","suiteSourceFile":"core/spec/models/spree/option_type_spec.rb"},{"name":"touching touches a product on touch","suite":"Spree::OptionType at ./spec/models/spree/option_type_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","suiteSourceFile":"core/spec/models/spree/option_type_spec.rb"},{"name":"touching touches a product on update","suite":"Spree::OptionType at ./spec/models/spree/option_type_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2\"}}","suiteSourceFile":"core/spec/models/spree/option_type_spec.rb"},{"name":"#filter_param returns filtered name param","suite":"Spree::OptionType at ./spec/models/spree/option_type_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","suiteSourceFile":"core/spec/models/spree/option_type_spec.rb"},{"name":"#self.color finds color option type","suite":"Spree::OptionType at ./spec/models/spree/option_type_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1\"}}","suiteSourceFile":"core/spec/models/spree/option_type_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:4","suite":"Spree::OptionValue at ./spec/models/spree/option_value_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/option_value_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:5","suite":"Spree::OptionValue at ./spec/models/spree/option_value_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/option_value_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:7","suite":"Spree::OptionValue at ./spec/models/spree/option_value_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/models/spree/option_value_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:8","suite":"Spree::OptionValue at ./spec/models/spree/option_value_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","suiteSourceFile":"core/spec/models/spree/option_value_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:10","suite":"Spree::OptionValue at ./spec/models/spree/option_value_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","suiteSourceFile":"core/spec/models/spree/option_value_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:11","suite":"Spree::OptionValue at ./spec/models/spree/option_value_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","suiteSourceFile":"core/spec/models/spree/option_value_spec.rb"},{"name":"behaves like metadata reads data as symbolized keys","suite":"Spree::OptionValue at ./spec/models/spree/option_value_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7\"}}","suiteSourceFile":"core/spec/models/spree/option_value_spec.rb"},{"name":"behaves like metadata reads data as not symbolized keys","suite":"Spree::OptionValue at ./spec/models/spree/option_value_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8\"}}","suiteSourceFile":"core/spec/models/spree/option_value_spec.rb"},{"name":"behaves like metadata can query records by metadata properties","suite":"Spree::OptionValue at ./spec/models/spree/option_value_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:10\"}}","suiteSourceFile":"core/spec/models/spree/option_value_spec.rb"},{"name":"callbacks #normalize_name should parameterize the name","suite":"Spree::OptionValue at ./spec/models/spree/option_value_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/option_value_spec.rb"},{"name":"callbacks #touch_all_variants touches all variants associated with the option value","suite":"Spree::OptionValue at ./spec/models/spree/option_value_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/option_value_spec.rb"},{"name":"callbacks #touch_all_products touches all products associated with the option value","suite":"Spree::OptionValue at ./spec/models/spree/option_value_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:1\"}}","suiteSourceFile":"core/spec/models/spree/option_value_spec.rb"},{"name":"#display_presentation returns the presentation with the option type presentation","suite":"Spree::OptionValue at ./spec/models/spree/option_value_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/option_value_spec.rb"},{"name":".to_tom_select_json returns the option values in the correct format","suite":"Spree::OptionValue at ./spec/models/spree/option_value_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/option_value_spec.rb"},{"name":"translations translates option value fields","suite":"Spree::OptionValue at ./spec/models/spree/option_value_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","suiteSourceFile":"core/spec/models/spree/option_value_spec.rb"},{"name":"touching touches a variant","suite":"Spree::OptionValueVariant at ./spec/models/spree/option_value_variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/option_value_variant_spec.rb"},{"name":"validation when @use_billing is populated with true clones the bill address to the ship address","suite":"Spree::Order at ./spec/models/spree/order/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order/address_spec.rb"},{"name":"validation when @use_billing is populated with 'true' clones the bill address to the shipping","suite":"Spree::Order at ./spec/models/spree/order/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order/address_spec.rb"},{"name":"validation when @use_billing is populated with '1' clones the bill address to the shipping","suite":"Spree::Order at ./spec/models/spree/order/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/order/address_spec.rb"},{"name":"validation when @use_billing is populated with something other than a 'truthful' value does not clone the bill address to the shipping","suite":"Spree::Order at ./spec/models/spree/order/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/order/address_spec.rb"},{"name":"address book mass attribute assignment for bill_address_id, ship_address_id is able to mass assign bill_address_id","suite":"Spree::Order at ./spec/models/spree/order/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order/address_spec.rb"},{"name":"address book mass attribute assignment for bill_address_id, ship_address_id is able to mass assign ship_address_id","suite":"Spree::Order at ./spec/models/spree/order/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:2\"}}","suiteSourceFile":"core/spec/models/spree/order/address_spec.rb"},{"name":"address book Create order with the same bill & ship addresses has equal ids when set ids","suite":"Spree::Order at ./spec/models/spree/order/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order/address_spec.rb"},{"name":"address book Create order with the same bill & ship addresses has equal ids when option use_billing is active","suite":"Spree::Order at ./spec/models/spree/order/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:2\"}}","suiteSourceFile":"core/spec/models/spree/order/address_spec.rb"},{"name":"address book when user wants to update firstname of the address with already completed order creates new address with updated attributes","suite":"Spree::Order at ./spec/models/spree/order/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:1\"}}","suiteSourceFile":"core/spec/models/spree/order/address_spec.rb"},{"name":"when an order has an adjustment that zeroes the total, but another adjustment for shipping that raises it above zero transitions from delivery to payment","suite":"Spree::Order at ./spec/models/spree/order/adjustments_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order/adjustments_spec.rb"},{"name":"when an order has an taxed shipment with tax included_in_price and apply free_shipping_promotion removes the shipment tax adjustment","suite":"Spree::Order at ./spec/models/spree/order/adjustments_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order/adjustments_spec.rb"},{"name":"validations email validation o'brien@gmail.com is a valid email address","suite":"Spree::Order at ./spec/models/spree/order/callbacks_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order/callbacks_spec.rb"},{"name":"#save when associated with a registered user assigns the email address of the user","suite":"Spree::Order at ./spec/models/spree/order/callbacks_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order/callbacks_spec.rb"},{"name":"in the cart state does not validate email address","suite":"Spree::Order at ./spec/models/spree/order/callbacks_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/order/callbacks_spec.rb"},{"name":"with default state machine has the following transitions","suite":"Spree::Order at ./spec/models/spree/order/checkout_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order/checkout_spec.rb"},{"name":"with default state machine does not have a transition from delivery to confirm","suite":"Spree::Order at ./spec/models/spree/order/checkout_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/order/checkout_spec.rb"},{"name":"with default state machine .find_transition when contract was broken","suite":"Spree::Order at ./spec/models/spree/order/checkout_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/models/spree/order/checkout_spec.rb"},{"name":"with default state machine .remove_transition","suite":"Spree::Order at ./spec/models/spree/order/checkout_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","suiteSourceFile":"core/spec/models/spree/order/checkout_spec.rb"},{"name":"with default state machine .remove_transition when contract was broken","suite":"Spree::Order at ./spec/models/spree/order/checkout_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","suiteSourceFile":"core/spec/models/spree/order/checkout_spec.rb"},{"name":"with default state machine always return integer on checkout_step_index","suite":"Spree::Order at ./spec/models/spree/order/checkout_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","suiteSourceFile":"core/spec/models/spree/order/checkout_spec.rb"},{"name":"with default state machine passes delivery state when transitioning from address over delivery to payment","suite":"Spree::Order at ./spec/models/spree/order/checkout_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7\"}}","suiteSourceFile":"core/spec/models/spree/order/checkout_spec.rb"},{"name":"with default state machine starts out at cart","suite":"Spree::Order at ./spec/models/spree/order/checkout_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:9\"}}","suiteSourceFile":"core/spec/models/spree/order/checkout_spec.rb"},{"name":"with default state machine #checkout_steps when confirmation not required example at ./spec/models/spree/order/checkout_spec.rb:81","suite":"Spree::Order at ./spec/models/spree/order/checkout_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order/checkout_spec.rb"},{"name":"with default state machine #checkout_steps when confirmation required example at ./spec/models/spree/order/checkout_spec.rb:92","suite":"Spree::Order at ./spec/models/spree/order/checkout_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order/checkout_spec.rb"},{"name":"with default state machine #checkout_steps when delivery not required example at ./spec/models/spree/order/checkout_spec.rb:100","suite":"Spree::Order at ./spec/models/spree/order/checkout_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8:3:1\"}}","suiteSourceFile":"core/spec/models/spree/order/checkout_spec.rb"},{"name":"with default state machine #checkout_steps when payment not required example at ./spec/models/spree/order/checkout_spec.rb:108","suite":"Spree::Order at ./spec/models/spree/order/checkout_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8:4:1\"}}","suiteSourceFile":"core/spec/models/spree/order/checkout_spec.rb"},{"name":"with default state machine #checkout_steps when payment required example at ./spec/models/spree/order/checkout_spec.rb:116","suite":"Spree::Order at ./spec/models/spree/order/checkout_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8:5:1\"}}","suiteSourceFile":"core/spec/models/spree/order/checkout_spec.rb"},{"name":"with default state machine to address cannot transition to address without any line items","suite":"Spree::Order at ./spec/models/spree/order/checkout_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:10:2\"}}","suiteSourceFile":"core/spec/models/spree/order/checkout_spec.rb"},{"name":"with default state machine to address with a line item transitions to address","suite":"Spree::Order at ./spec/models/spree/order/checkout_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:10:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order/checkout_spec.rb"},{"name":"with default state machine to address with a line item doesn't raise an error if the default address is invalid","suite":"Spree::Order at ./spec/models/spree/order/checkout_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:10:1:2\"}}","suiteSourceFile":"core/spec/models/spree/order/checkout_spec.rb"},{"name":"with default state machine to address with a line item with default addresses behaves like it cloned the default address example at ./spec/models/spree/order/checkout_spec.rb:160","suite":"Spree::Order at ./spec/models/spree/order/checkout_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:10:1:3:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order/checkout_spec.rb"},{"name":"with default state machine to address with a line item with default addresses behaves like it cloned the default address example at ./spec/models/spree/order/checkout_spec.rb:160","suite":"Spree::Order at ./spec/models/spree/order/checkout_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:10:1:3:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order/checkout_spec.rb"},{"name":"with default state machine from address updates totals","suite":"Spree::Order at ./spec/models/spree/order/checkout_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:11:1\"}}","suiteSourceFile":"core/spec/models/spree/order/checkout_spec.rb"},{"name":"with default state machine from address updates prices","suite":"Spree::Order at ./spec/models/spree/order/checkout_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:11:2\"}}","suiteSourceFile":"core/spec/models/spree/order/checkout_spec.rb"},{"name":"with default state machine from address transitions to delivery","suite":"Spree::Order at ./spec/models/spree/order/checkout_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:11:3\"}}","suiteSourceFile":"core/spec/models/spree/order/checkout_spec.rb"},{"name":"with default state machine from address cannot transition to delivery with an existing shipment if there are no shipping rates for any shipment raises an InvalidTransitionError","suite":"Spree::Order at ./spec/models/spree/order/checkout_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:11:4:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order/checkout_spec.rb"},{"name":"with default state machine from address cannot transition to delivery with an existing shipment if there are no shipping rates for any shipment deletes all the shipments","suite":"Spree::Order at ./spec/models/spree/order/checkout_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:11:4:1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/order/checkout_spec.rb"},{"name":"with default state machine to delivery when order has default selected_shipping_rate_id invokes set_shipment_cost","suite":"Spree::Order at ./spec/models/spree/order/checkout_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:12:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order/checkout_spec.rb"},{"name":"with default state machine to delivery when order has default selected_shipping_rate_id updates shipment_total","suite":"Spree::Order at ./spec/models/spree/order/checkout_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:12:1:2\"}}","suiteSourceFile":"core/spec/models/spree/order/checkout_spec.rb"},{"name":"with default state machine from delivery attempts to apply free shipping promotions","suite":"Spree::Order at ./spec/models/spree/order/checkout_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:13:1\"}}","suiteSourceFile":"core/spec/models/spree/order/checkout_spec.rb"},{"name":"with default state machine from delivery with payment required transitions to payment","suite":"Spree::Order at ./spec/models/spree/order/checkout_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:13:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order/checkout_spec.rb"},{"name":"with default state machine from delivery without payment required transitions to complete","suite":"Spree::Order at ./spec/models/spree/order/checkout_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:13:3:1\"}}","suiteSourceFile":"core/spec/models/spree/order/checkout_spec.rb"},{"name":"with default state machine from delivery correctly determining payment required based on shipping information with a shipment that has a price transitions to payment","suite":"Spree::Order at ./spec/models/spree/order/checkout_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:13:4:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order/checkout_spec.rb"},{"name":"with default state machine from delivery correctly determining payment required based on shipping information with a shipment that is free skips payment, transitions to complete","suite":"Spree::Order at ./spec/models/spree/order/checkout_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:13:4:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order/checkout_spec.rb"},{"name":"with default state machine from payment with confirmation required transitions to confirm","suite":"Spree::Order at ./spec/models/spree/order/checkout_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:14:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order/checkout_spec.rb"},{"name":"with default state machine from payment without confirmation required when there is at least one valid payment line_items are in stock transitions to complete","suite":"Spree::Order at ./spec/models/spree/order/checkout_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:14:2:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order/checkout_spec.rb"},{"name":"with default state machine from payment without confirmation required when there is at least one valid payment line_items are not in stock does not receive process_payments!","suite":"Spree::Order at ./spec/models/spree/order/checkout_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:14:2:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order/checkout_spec.rb"},{"name":"with default state machine from payment without confirmation required when there is at least one valid payment line_items are not in stock does not transition to complete","suite":"Spree::Order at ./spec/models/spree/order/checkout_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:14:2:1:2:2\"}}","suiteSourceFile":"core/spec/models/spree/order/checkout_spec.rb"},{"name":"with default state machine from payment without confirmation required when there is only an invalid payment raises a StateMachine::InvalidTransition","suite":"Spree::Order at ./spec/models/spree/order/checkout_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:14:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order/checkout_spec.rb"},{"name":"with default state machine from payment when payment is not required does not call process payments","suite":"Spree::Order at ./spec/models/spree/order/checkout_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:14:3:1\"}}","suiteSourceFile":"core/spec/models/spree/order/checkout_spec.rb"},{"name":"to complete default credit card makes the current credit card a user's default credit card","suite":"Spree::Order at ./spec/models/spree/order/checkout_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:2\"}}","suiteSourceFile":"core/spec/models/spree/order/checkout_spec.rb"},{"name":"to complete default credit card creates a digital_link for the digital line_item","suite":"Spree::Order at ./spec/models/spree/order/checkout_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:3\"}}","suiteSourceFile":"core/spec/models/spree/order/checkout_spec.rb"},{"name":"to complete default credit card creates a digital_link for the physical line_item if it has a digital asset","suite":"Spree::Order at ./spec/models/spree/order/checkout_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:4\"}}","suiteSourceFile":"core/spec/models/spree/order/checkout_spec.rb"},{"name":"to complete default credit card does not assign a default credit card if temporary_credit_card is set","suite":"Spree::Order at ./spec/models/spree/order/checkout_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:5\"}}","suiteSourceFile":"core/spec/models/spree/order/checkout_spec.rb"},{"name":"to complete default credit card newsletter subscription when newsletter is accepted for the order subscribes to newsletter","suite":"Spree::Order at ./spec/models/spree/order/checkout_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order/checkout_spec.rb"},{"name":"to complete default credit card newsletter subscription when newsletter is not accepted for the order does not subscribe to newsletter","suite":"Spree::Order at ./spec/models/spree/order/checkout_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order/checkout_spec.rb"},{"name":"to complete default credit card when gift card is present redeems the gift card","suite":"Spree::Order at ./spec/models/spree/order/checkout_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:6:1\"}}","suiteSourceFile":"core/spec/models/spree/order/checkout_spec.rb"},{"name":"to complete default credit card when gift card is present when gift card has amount bigger than order total partially redeems the gift card","suite":"Spree::Order at ./spec/models/spree/order/checkout_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:6:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order/checkout_spec.rb"},{"name":"to complete default credit card when user is not present with signup_for_an_account set to true creates a new user","suite":"Spree::Order at ./spec/models/spree/order/checkout_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:7:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order/checkout_spec.rb"},{"name":"to complete default credit card when user is not present with signup_for_an_account set to false does not create a new user","suite":"Spree::Order at ./spec/models/spree/order/checkout_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:7:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order/checkout_spec.rb"},{"name":"re-define checkout flow does not keep old event transitions when checkout_flow is redefined","suite":"Spree::Order at ./spec/models/spree/order/checkout_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/order/checkout_spec.rb"},{"name":"re-define checkout flow does not keep old events when checkout_flow is redefined","suite":"Spree::Order at ./spec/models/spree/order/checkout_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2\"}}","suiteSourceFile":"core/spec/models/spree/order/checkout_spec.rb"},{"name":"with only a complete step does not attempt to process payments","suite":"Spree::Order at ./spec/models/spree/order/checkout_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","suiteSourceFile":"core/spec/models/spree/order/checkout_spec.rb"},{"name":"insert checkout step maintains removed transitions","suite":"Spree::Order at ./spec/models/spree/order/checkout_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","suiteSourceFile":"core/spec/models/spree/order/checkout_spec.rb"},{"name":"insert checkout step before example at ./spec/models/spree/order/checkout_spec.rb:679","suite":"Spree::Order at ./spec/models/spree/order/checkout_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order/checkout_spec.rb"},{"name":"insert checkout step before goes through checkout without raising error","suite":"Spree::Order at ./spec/models/spree/order/checkout_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2:2\"}}","suiteSourceFile":"core/spec/models/spree/order/checkout_spec.rb"},{"name":"insert checkout step after example at ./spec/models/spree/order/checkout_spec.rb:696","suite":"Spree::Order at ./spec/models/spree/order/checkout_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:3:1\"}}","suiteSourceFile":"core/spec/models/spree/order/checkout_spec.rb"},{"name":"insert checkout step after goes through checkout without raising error","suite":"Spree::Order at ./spec/models/spree/order/checkout_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:3:2\"}}","suiteSourceFile":"core/spec/models/spree/order/checkout_spec.rb"},{"name":"remove checkout step maintains removed transitions","suite":"Spree::Order at ./spec/models/spree/order/checkout_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","suiteSourceFile":"core/spec/models/spree/order/checkout_spec.rb"},{"name":"remove checkout step example at ./spec/models/spree/order/checkout_spec.rb:724","suite":"Spree::Order at ./spec/models/spree/order/checkout_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2\"}}","suiteSourceFile":"core/spec/models/spree/order/checkout_spec.rb"},{"name":"update_from_params calls update_attributes without order params","suite":"Spree::Order at ./spec/models/spree/order/checkout_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1\"}}","suiteSourceFile":"core/spec/models/spree/order/checkout_spec.rb"},{"name":"update_from_params runs the callbacks","suite":"Spree::Order at ./spec/models/spree/order/checkout_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2\"}}","suiteSourceFile":"core/spec/models/spree/order/checkout_spec.rb"},{"name":"update_from_params passing a credit card sets confirmation value when its available via :cvc_confirm","suite":"Spree::Order at ./spec/models/spree/order/checkout_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:3:1\"}}","suiteSourceFile":"core/spec/models/spree/order/checkout_spec.rb"},{"name":"update_from_params passing a credit card sets existing card as source for new payment","suite":"Spree::Order at ./spec/models/spree/order/checkout_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:3:2\"}}","suiteSourceFile":"core/spec/models/spree/order/checkout_spec.rb"},{"name":"update_from_params passing a credit card sets request_env on payment","suite":"Spree::Order at ./spec/models/spree/order/checkout_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:3:3\"}}","suiteSourceFile":"core/spec/models/spree/order/checkout_spec.rb"},{"name":"update_from_params passing a credit card dont let users mess with others users cards","suite":"Spree::Order at ./spec/models/spree/order/checkout_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:3:4\"}}","suiteSourceFile":"core/spec/models/spree/order/checkout_spec.rb"},{"name":"update_from_params has params does not let through unpermitted attributes","suite":"Spree::Order at ./spec/models/spree/order/checkout_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:4:1\"}}","suiteSourceFile":"core/spec/models/spree/order/checkout_spec.rb"},{"name":"update_from_params has params has existing_card param does not attempt to permit existing_card","suite":"Spree::Order at ./spec/models/spree/order/checkout_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:4:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order/checkout_spec.rb"},{"name":"update_from_params has params has allowed params accepts permitted attributes","suite":"Spree::Order at ./spec/models/spree/order/checkout_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:4:3:1\"}}","suiteSourceFile":"core/spec/models/spree/order/checkout_spec.rb"},{"name":"CurrencyUpdater when changing order currency #homogenize_line_item_currencies succeeds without error","suite":"Spree::Order at ./spec/models/spree/order/currency_updater_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order/currency_updater_spec.rb"},{"name":"CurrencyUpdater when changing order currency #homogenize_line_item_currencies changes the line_item currencies","suite":"Spree::Order at ./spec/models/spree/order/currency_updater_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/order/currency_updater_spec.rb"},{"name":"CurrencyUpdater when changing order currency #homogenize_line_item_currencies changes the line_item amounts","suite":"Spree::Order at ./spec/models/spree/order/currency_updater_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:3\"}}","suiteSourceFile":"core/spec/models/spree/order/currency_updater_spec.rb"},{"name":"CurrencyUpdater when changing order currency #homogenize_line_item_currencies calculates the item total in the order.currency","suite":"Spree::Order at ./spec/models/spree/order/currency_updater_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:4\"}}","suiteSourceFile":"core/spec/models/spree/order/currency_updater_spec.rb"},{"name":"CurrencyUpdater when changing order currency #homogenize_line_item_currencies when there is a price with nil amount destroys the line item when we switch to that price's currency","suite":"Spree::Order at ./spec/models/spree/order/currency_updater_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:5:1\"}}","suiteSourceFile":"core/spec/models/spree/order/currency_updater_spec.rb"},{"name":"line_item analysis understands that all products are digital","suite":"Spree::Order at ./spec/models/spree/order/digital_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order/digital_spec.rb"},{"name":"line_item analysis understands that no products are digital","suite":"Spree::Order at ./spec/models/spree/order/digital_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/order/digital_spec.rb"},{"name":"line_item analysis understands that empty order is not digital","suite":"Spree::Order at ./spec/models/spree/order/digital_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/models/spree/order/digital_spec.rb"},{"name":"line_item analysis understands that not all products are digital","suite":"Spree::Order at ./spec/models/spree/order/digital_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","suiteSourceFile":"core/spec/models/spree/order/digital_spec.rb"},{"name":"Spree::Cart::AddItem.call adds digital Variants of quantity 1 to an order","suite":"Spree::Order at ./spec/models/spree/order/digital_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order/digital_spec.rb"},{"name":"Spree::Cart::AddItem.call handles quantity higher than 1 when adding one specific digital Variant","suite":"Spree::Order at ./spec/models/spree/order/digital_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","suiteSourceFile":"core/spec/models/spree/order/digital_spec.rb"},{"name":"#digital?/#some_digital? returns true/true for a digital order","suite":"Spree::Order at ./spec/models/spree/order/digital_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/order/digital_spec.rb"},{"name":"#digital?/#some_digital? returns false/true for a mixed order","suite":"Spree::Order at ./spec/models/spree/order/digital_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","suiteSourceFile":"core/spec/models/spree/order/digital_spec.rb"},{"name":"#digital?/#some_digital? returns false/false for an exclusively non-digital order","suite":"Spree::Order at ./spec/models/spree/order/digital_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3\"}}","suiteSourceFile":"core/spec/models/spree/order/digital_spec.rb"},{"name":"#digital_links correctly loads the links","suite":"Spree::Order at ./spec/models/spree/order/digital_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/order/digital_spec.rb"},{"name":"#finalize! sets completed_at","suite":"Spree::Order at ./spec/models/spree/order/finalizing_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order/finalizing_spec.rb"},{"name":"#finalize! sells inventory units","suite":"Spree::Order at ./spec/models/spree/order/finalizing_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/order/finalizing_spec.rb"},{"name":"#finalize! decreases the stock for each variant in the shipment","suite":"Spree::Order at ./spec/models/spree/order/finalizing_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/models/spree/order/finalizing_spec.rb"},{"name":"#finalize! changes the shipment state to ready if order is paid","suite":"Spree::Order at ./spec/models/spree/order/finalizing_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","suiteSourceFile":"core/spec/models/spree/order/finalizing_spec.rb"},{"name":"#finalize! does not sell inventory units if track_inventory_levels is false","suite":"Spree::Order at ./spec/models/spree/order/finalizing_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","suiteSourceFile":"core/spec/models/spree/order/finalizing_spec.rb"},{"name":"#finalize! freezes all adjustments","suite":"Spree::Order at ./spec/models/spree/order/finalizing_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","suiteSourceFile":"core/spec/models/spree/order/finalizing_spec.rb"},{"name":"#finalize! order is considered risky changes state to risky","suite":"Spree::Order at ./spec/models/spree/order/finalizing_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7:1\"}}","suiteSourceFile":"core/spec/models/spree/order/finalizing_spec.rb"},{"name":"#finalize! order is considered risky and order is approved leaves order in complete state","suite":"Spree::Order at ./spec/models/spree/order/finalizing_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order/finalizing_spec.rb"},{"name":"#finalize! order is not considered risky sets completed_at","suite":"Spree::Order at ./spec/models/spree/order/finalizing_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8:1\"}}","suiteSourceFile":"core/spec/models/spree/order/finalizing_spec.rb"},{"name":"#gift_card_total when there is a gift card returns the gift card total","suite":"Order at ./spec/models/spree/order/gift_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order/gift_card_spec.rb"},{"name":"#apply_gift_card when there is a gift card applies the gift card to the order","suite":"Order at ./spec/models/spree/order/gift_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order/gift_card_spec.rb"},{"name":"#remove_gift_card when there is a gift card removes the gift card from the order","suite":"Order at ./spec/models/spree/order/gift_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order/gift_card_spec.rb"},{"name":"processing payments processes the checkout payment","suite":"Spree::Order at ./spec/models/spree/order/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order/payment_spec.rb"},{"name":"processing payments does not go over total for order","suite":"Spree::Order at ./spec/models/spree/order/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/models/spree/order/payment_spec.rb"},{"name":"processing payments does not use failed payments","suite":"Spree::Order at ./spec/models/spree/order/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","suiteSourceFile":"core/spec/models/spree/order/payment_spec.rb"},{"name":"processing payments processes all checkout payments along with store credits with store credits payment method auto capture turned on order should be paid","suite":"Spree::Order at ./spec/models/spree/order/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order/payment_spec.rb"},{"name":"processing payments processes all checkout payments along with store credits with store credits payment method auto capture turned off order payment state should be balance due example at ./spec/models/spree/order/payment_spec.rb:66","suite":"Spree::Order at ./spec/models/spree/order/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order/payment_spec.rb"},{"name":"processing payments processes all checkout payments along with store credits with store credits payment method auto capture turned off order payment state should be balance due example at ./spec/models/spree/order/payment_spec.rb:76","suite":"Spree::Order at ./spec/models/spree/order/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order/payment_spec.rb"},{"name":"ensure source attributes stick around does not have inverse_of defined","suite":"Spree::Order at ./spec/models/spree/order/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order/payment_spec.rb"},{"name":"ensure source attributes stick around keeps source attributes after updating","suite":"Spree::Order at ./spec/models/spree/order/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","suiteSourceFile":"core/spec/models/spree/order/payment_spec.rb"},{"name":"#process_payments! processes the payments","suite":"Spree::Order at ./spec/models/spree/order/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/order/payment_spec.rb"},{"name":"#process_payments! raises an error if there are no payments to process","suite":"Spree::Order at ./spec/models/spree/order/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","suiteSourceFile":"core/spec/models/spree/order/payment_spec.rb"},{"name":"#process_payments! updates order with correct payment total","suite":"Spree::Order at ./spec/models/spree/order/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:5\"}}","suiteSourceFile":"core/spec/models/spree/order/payment_spec.rb"},{"name":"#process_payments! when there are pending payments skips processing the payments","suite":"Spree::Order at ./spec/models/spree/order/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3:1\"}}","suiteSourceFile":"core/spec/models/spree/order/payment_spec.rb"},{"name":"#process_payments! when there are pending payments when there is other unprocessed payment processes only the other payment","suite":"Spree::Order at ./spec/models/spree/order/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order/payment_spec.rb"},{"name":"#process_payments! when a payment raises a GatewayError returns true when configured to allow checkout on gateway failures","suite":"Spree::Order at ./spec/models/spree/order/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4:1\"}}","suiteSourceFile":"core/spec/models/spree/order/payment_spec.rb"},{"name":"#process_payments! when a payment raises a GatewayError returns false when not configured to allow checkout on gateway failures","suite":"Spree::Order at ./spec/models/spree/order/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4:2\"}}","suiteSourceFile":"core/spec/models/spree/order/payment_spec.rb"},{"name":"#authorize_payments! processes payments with attempt_authorization!","suite":"Spree::Order at ./spec/models/spree/order/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/order/payment_spec.rb"},{"name":"#authorize_payments! example at ./spec/models/spree/order/payment_spec.rb:236","suite":"Spree::Order at ./spec/models/spree/order/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2\"}}","suiteSourceFile":"core/spec/models/spree/order/payment_spec.rb"},{"name":"#capture_payments! processes payments with attempt_authorization!","suite":"Spree::Order at ./spec/models/spree/order/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","suiteSourceFile":"core/spec/models/spree/order/payment_spec.rb"},{"name":"#capture_payments! example at ./spec/models/spree/order/payment_spec.rb:251","suite":"Spree::Order at ./spec/models/spree/order/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2\"}}","suiteSourceFile":"core/spec/models/spree/order/payment_spec.rb"},{"name":"#outstanding_balance returns positive amount when payment_total is less than total","suite":"Spree::Order at ./spec/models/spree/order/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","suiteSourceFile":"core/spec/models/spree/order/payment_spec.rb"},{"name":"#outstanding_balance returns negative amount when payment_total is greater than total","suite":"Spree::Order at ./spec/models/spree/order/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2\"}}","suiteSourceFile":"core/spec/models/spree/order/payment_spec.rb"},{"name":"#outstanding_balance incorporates refund reimbursements","suite":"Spree::Order at ./spec/models/spree/order/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:3\"}}","suiteSourceFile":"core/spec/models/spree/order/payment_spec.rb"},{"name":"#outstanding_balance does not incorporate refunds without a reimbursement","suite":"Spree::Order at ./spec/models/spree/order/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:4\"}}","suiteSourceFile":"core/spec/models/spree/order/payment_spec.rb"},{"name":"#outstanding_balance? is true when total greater than payment_total","suite":"Spree::Order at ./spec/models/spree/order/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","suiteSourceFile":"core/spec/models/spree/order/payment_spec.rb"},{"name":"#outstanding_balance? is true when total less than payment_total","suite":"Spree::Order at ./spec/models/spree/order/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2\"}}","suiteSourceFile":"core/spec/models/spree/order/payment_spec.rb"},{"name":"#outstanding_balance? is false when total equals payment_total","suite":"Spree::Order at ./spec/models/spree/order/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:3\"}}","suiteSourceFile":"core/spec/models/spree/order/payment_spec.rb"},{"name":"payment required? total is zero example at ./spec/models/spree/order/payment_spec.rb:326","suite":"Spree::Order at ./spec/models/spree/order/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order/payment_spec.rb"},{"name":"payment required? total > zero example at ./spec/models/spree/order/payment_spec.rb:332","suite":"Spree::Order at ./spec/models/spree/order/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order/payment_spec.rb"},{"name":".is_risky? Not risky order with avs_response == D is not considered risky","suite":"Spree::Order at ./spec/models/spree/order/risk_assessment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order/risk_assessment_spec.rb"},{"name":".is_risky? Not risky order with avs_response == M is not considered risky","suite":"Spree::Order at ./spec/models/spree/order/risk_assessment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order/risk_assessment_spec.rb"},{"name":".is_risky? Not risky order with avs_response == '' is not considered risky","suite":"Spree::Order at ./spec/models/spree/order/risk_assessment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/order/risk_assessment_spec.rb"},{"name":".is_risky? Not risky order with cvv_response_code == M is not considered risky","suite":"Spree::Order at ./spec/models/spree/order/risk_assessment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/order/risk_assessment_spec.rb"},{"name":".is_risky? Not risky order with cvv_response_message == '' is not considered risky","suite":"Spree::Order at ./spec/models/spree/order/risk_assessment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:5:1\"}}","suiteSourceFile":"core/spec/models/spree/order/risk_assessment_spec.rb"},{"name":".is_risky? Risky order AVS response message returns true if the order has an avs_response","suite":"Spree::Order at ./spec/models/spree/order/risk_assessment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order/risk_assessment_spec.rb"},{"name":".is_risky? Risky order CVV response code returns true if the order has an cvv_response_code","suite":"Spree::Order at ./spec/models/spree/order/risk_assessment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order/risk_assessment_spec.rb"},{"name":".is_risky? Risky order state == 'failed' returns true if the order has state == 'failed'","suite":"Spree::Order at ./spec/models/spree/order/risk_assessment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:3:1\"}}","suiteSourceFile":"core/spec/models/spree/order/risk_assessment_spec.rb"},{"name":"is considered risky can be approved by a user","suite":"Spree::Order at ./spec/models/spree/order/risk_assessment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order/risk_assessment_spec.rb"},{"name":"ensure shipments will be updated destroys current shipments","suite":"Spree::Order at ./spec/models/spree/order/shipments_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order/shipments_spec.rb"},{"name":"ensure shipments will be updated puts order back in address state","suite":"Spree::Order at ./spec/models/spree/order/shipments_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/order/shipments_spec.rb"},{"name":"ensure shipments will be updated resets shipment_total","suite":"Spree::Order at ./spec/models/spree/order/shipments_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/models/spree/order/shipments_spec.rb"},{"name":"ensure shipments will be updated except when order is completed, that's OrderInventory job doesn't touch anything","suite":"Spree::Order at ./spec/models/spree/order/shipments_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/order/shipments_spec.rb"},{"name":"#next! when current state is confirm when payment processing succeeds finalizes order when transitioning to complete state","suite":"Spree::Order at ./spec/models/spree/order/state_machine_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order/state_machine_spec.rb"},{"name":"#next! when current state is confirm when payment processing succeeds when credit card processing fails does not complete the order","suite":"Spree::Order at ./spec/models/spree/order/state_machine_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order/state_machine_spec.rb"},{"name":"#next! when current state is confirm when payment processing fails cannot transition to complete","suite":"Spree::Order at ./spec/models/spree/order/state_machine_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order/state_machine_spec.rb"},{"name":"#next! when current state is delivery adjusts tax rates when transitioning to delivery","suite":"Spree::Order at ./spec/models/spree/order/state_machine_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order/state_machine_spec.rb"},{"name":"#next! when current state is delivery adjusts tax rates twice if there are any shipments","suite":"Spree::Order at ./spec/models/spree/order/state_machine_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2\"}}","suiteSourceFile":"core/spec/models/spree/order/state_machine_spec.rb"},{"name":"#can_cancel? should be true if shipment_state is pending","suite":"Spree::Order at ./spec/models/spree/order/state_machine_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order/state_machine_spec.rb"},{"name":"#can_cancel? should be true if shipment_state is backorder","suite":"Spree::Order at ./spec/models/spree/order/state_machine_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","suiteSourceFile":"core/spec/models/spree/order/state_machine_spec.rb"},{"name":"#can_cancel? should be true if shipment_state is ready","suite":"Spree::Order at ./spec/models/spree/order/state_machine_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3\"}}","suiteSourceFile":"core/spec/models/spree/order/state_machine_spec.rb"},{"name":"#can_cancel? should be false if shipment_state is shipped","suite":"Spree::Order at ./spec/models/spree/order/state_machine_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:4\"}}","suiteSourceFile":"core/spec/models/spree/order/state_machine_spec.rb"},{"name":"#cancel resets payment state without shipped items sets payment state to 'void'","suite":"Spree::Order at ./spec/models/spree/order/state_machine_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order/state_machine_spec.rb"},{"name":"#cancel resets payment state with shipped items does not alter the payment state","suite":"Spree::Order at ./spec/models/spree/order/state_machine_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order/state_machine_spec.rb"},{"name":"#cancel resets payment state with payments automatically refunds all payments","suite":"Spree::Order at ./spec/models/spree/order/state_machine_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/order/state_machine_spec.rb"},{"name":"#add_store_credit_payments there is no store credit does not create a store credit payment","suite":"Order at ./spec/models/spree/order/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order/store_credit_spec.rb"},{"name":"#add_store_credit_payments there is enough store credit to pay for the entire order creates a store credit payment for the full amount","suite":"Order at ./spec/models/spree/order/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order/store_credit_spec.rb"},{"name":"#add_store_credit_payments the available store credit is not enough to pay for the entire order creates a store credit payment for the available amount","suite":"Order at ./spec/models/spree/order/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/order/store_credit_spec.rb"},{"name":"#add_store_credit_payments there are multiple store credits they have different credit type priorities uses the primary store credit type over the secondary","suite":"Order at ./spec/models/spree/order/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order/store_credit_spec.rb"},{"name":"#remove_store_credit_payments when order is not complete example at ./spec/models/spree/order/store_credit_spec.rb:136","suite":"Order at ./spec/models/spree/order/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order/store_credit_spec.rb"},{"name":"#remove_store_credit_payments when order is not complete example at ./spec/models/spree/order/store_credit_spec.rb:137","suite":"Order at ./spec/models/spree/order/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:2\"}}","suiteSourceFile":"core/spec/models/spree/order/store_credit_spec.rb"},{"name":"#remove_store_credit_payments when order is complete example at ./spec/models/spree/order/store_credit_spec.rb:149","suite":"Order at ./spec/models/spree/order/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order/store_credit_spec.rb"},{"name":"#covered_by_store_credit order doesn't have an associated user example at ./spec/models/spree/order/store_credit_spec.rb:159","suite":"Order at ./spec/models/spree/order/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order/store_credit_spec.rb"},{"name":"#covered_by_store_credit order has an associated user user has enough store credit to pay for the order example at ./spec/models/spree/order/store_credit_spec.rb:173","suite":"Order at ./spec/models/spree/order/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order/store_credit_spec.rb"},{"name":"#covered_by_store_credit order has an associated user user does not have enough store credit to pay for the order example at ./spec/models/spree/order/store_credit_spec.rb:182","suite":"Order at ./spec/models/spree/order/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order/store_credit_spec.rb"},{"name":"#covered_by_store_credit order has an associated user order total is zero example at ./spec/models/spree/order/store_credit_spec.rb:187","suite":"Order at ./spec/models/spree/order/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:3:1\"}}","suiteSourceFile":"core/spec/models/spree/order/store_credit_spec.rb"},{"name":"#total_available_store_credit order does not have an associated user returns 0","suite":"Order at ./spec/models/spree/order/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order/store_credit_spec.rb"},{"name":"#total_available_store_credit order has an associated user returns the user's available store credit","suite":"Order at ./spec/models/spree/order/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order/store_credit_spec.rb"},{"name":"#total_available_store_credit order has an associated user when store is provided and has store credits associated returns the user's available store credit","suite":"Order at ./spec/models/spree/order/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order/store_credit_spec.rb"},{"name":"#total_available_store_credit order has an associated user when store is provided and has no store credits associated returns the user's available store credit","suite":"Order at ./spec/models/spree/order/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order/store_credit_spec.rb"},{"name":"#available_store_credits order does not have an associated user example at ./spec/models/spree/order/store_credit_spec.rb:253","suite":"Order at ./spec/models/spree/order/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order/store_credit_spec.rb"},{"name":"#available_store_credits order has an associated user returns the user available store credits","suite":"Order at ./spec/models/spree/order/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order/store_credit_spec.rb"},{"name":"#could_use_store_credit? order does not have an associated user example at ./spec/models/spree/order/store_credit_spec.rb:276","suite":"Order at ./spec/models/spree/order/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order/store_credit_spec.rb"},{"name":"#could_use_store_credit? order has an associated user without store credit example at ./spec/models/spree/order/store_credit_spec.rb:285","suite":"Order at ./spec/models/spree/order/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order/store_credit_spec.rb"},{"name":"#could_use_store_credit? order has an associated user with store credit example at ./spec/models/spree/order/store_credit_spec.rb:295","suite":"Order at ./spec/models/spree/order/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order/store_credit_spec.rb"},{"name":"#could_use_store_credit? order has an associated user without active Store Credit Payment example at ./spec/models/spree/order/store_credit_spec.rb:306","suite":"Order at ./spec/models/spree/order/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2:3:1\"}}","suiteSourceFile":"core/spec/models/spree/order/store_credit_spec.rb"},{"name":"#could_use_store_credit? order has an associated user without Store Credit Payment example at ./spec/models/spree/order/store_credit_spec.rb:318","suite":"Order at ./spec/models/spree/order/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2:4:1\"}}","suiteSourceFile":"core/spec/models/spree/order/store_credit_spec.rb"},{"name":"#order_total_after_store_credit order's user has store credits deducts the applicable store credit","suite":"Order at ./spec/models/spree/order/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order/store_credit_spec.rb"},{"name":"#order_total_after_store_credit order's user does not have any store credits returns the order total","suite":"Order at ./spec/models/spree/order/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order/store_credit_spec.rb"},{"name":"#total_applicable_store_credit order is in the confirm state with valid payments returns the sum of the payment amounts","suite":"Order at ./spec/models/spree/order/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order/store_credit_spec.rb"},{"name":"#total_applicable_store_credit order is in the confirm state without valid payments returns 0","suite":"Order at ./spec/models/spree/order/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order/store_credit_spec.rb"},{"name":"#total_applicable_store_credit order is completed with valid payments returns the sum of the payment amounts","suite":"Order at ./spec/models/spree/order/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order/store_credit_spec.rb"},{"name":"#total_applicable_store_credit order is completed without valid payments returns 0","suite":"Order at ./spec/models/spree/order/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order/store_credit_spec.rb"},{"name":"#total_applicable_store_credit order is in any state other than confirm or complete the associated user has store credits the store credit is more than the order total returns the order total","suite":"Order at ./spec/models/spree/order/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:3:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order/store_credit_spec.rb"},{"name":"#total_applicable_store_credit order is in any state other than confirm or complete the associated user has store credits the store credit is less than the order total returns the store credit amount","suite":"Order at ./spec/models/spree/order/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:3:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order/store_credit_spec.rb"},{"name":"#total_applicable_store_credit order is in any state other than confirm or complete the associated user does not have store credits returns 0","suite":"Order at ./spec/models/spree/order/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:3:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order/store_credit_spec.rb"},{"name":"#total_applicable_store_credit order is in any state other than confirm or complete the order does not have an associated user returns 0","suite":"Order at ./spec/models/spree/order/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:3:3:1\"}}","suiteSourceFile":"core/spec/models/spree/order/store_credit_spec.rb"},{"name":"#total_applied_store_credit with valid payments returns the sum of the payment amounts","suite":"Order at ./spec/models/spree/order/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order/store_credit_spec.rb"},{"name":"#total_applied_store_credit with valid payments when payments are loaded returns the sum of the payment amounts","suite":"Order at ./spec/models/spree/order/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order/store_credit_spec.rb"},{"name":"#total_applied_store_credit without valid payments returns 0","suite":"Order at ./spec/models/spree/order/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order/store_credit_spec.rb"},{"name":"#using_store_credit? order has store credit payment example at ./spec/models/spree/order/store_credit_spec.rb:457","suite":"Order at ./spec/models/spree/order/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order/store_credit_spec.rb"},{"name":"#using_store_credit? order has no store credit payments example at ./spec/models/spree/order/store_credit_spec.rb:463","suite":"Order at ./spec/models/spree/order/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order/store_credit_spec.rb"},{"name":"#display_total_applicable_store_credit returns a money instance","suite":"Order at ./spec/models/spree/order/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1\"}}","suiteSourceFile":"core/spec/models/spree/order/store_credit_spec.rb"},{"name":"#display_total_applicable_store_credit returns a negative amount","suite":"Order at ./spec/models/spree/order/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2\"}}","suiteSourceFile":"core/spec/models/spree/order/store_credit_spec.rb"},{"name":"#display_total_applied_store_credit returns a money instance","suite":"Order at ./spec/models/spree/order/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:1\"}}","suiteSourceFile":"core/spec/models/spree/order/store_credit_spec.rb"},{"name":"#display_total_applied_store_credit returns a negative amount","suite":"Order at ./spec/models/spree/order/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:2\"}}","suiteSourceFile":"core/spec/models/spree/order/store_credit_spec.rb"},{"name":"#display_order_total_after_store_credit returns a money instance","suite":"Order at ./spec/models/spree/order/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:1\"}}","suiteSourceFile":"core/spec/models/spree/order/store_credit_spec.rb"},{"name":"#display_order_total_after_store_credit returns the order_total_after_store_credit amount","suite":"Order at ./spec/models/spree/order/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:2\"}}","suiteSourceFile":"core/spec/models/spree/order/store_credit_spec.rb"},{"name":"#display_total_available_store_credit returns a money instance","suite":"Order at ./spec/models/spree/order/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:1\"}}","suiteSourceFile":"core/spec/models/spree/order/store_credit_spec.rb"},{"name":"#display_total_available_store_credit returns the total_available_store_credit amount","suite":"Order at ./spec/models/spree/order/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:2\"}}","suiteSourceFile":"core/spec/models/spree/order/store_credit_spec.rb"},{"name":"#display_store_credit_remaining_after_capture returns a money instance","suite":"Order at ./spec/models/spree/order/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:1\"}}","suiteSourceFile":"core/spec/models/spree/order/store_credit_spec.rb"},{"name":"#display_store_credit_remaining_after_capture returns all of the user's available store credit minus what's applied to the order amount","suite":"Order at ./spec/models/spree/order/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:2\"}}","suiteSourceFile":"core/spec/models/spree/order/store_credit_spec.rb"},{"name":"#tax_zone when no zones exist returns nil","suite":"Spree::Order at ./spec/models/spree/order/tax_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order/tax_spec.rb"},{"name":"#tax_zone when tax_using_ship_address: true calculates using ship_address","suite":"Spree::Order at ./spec/models/spree/order/tax_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order/tax_spec.rb"},{"name":"#tax_zone when tax_using_ship_address: false calculates using bill_address","suite":"Spree::Order at ./spec/models/spree/order/tax_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/order/tax_spec.rb"},{"name":"#tax_zone when there is a default tax zone when there is a matching zone returns the matching zone","suite":"Spree::Order at ./spec/models/spree/order/tax_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order/tax_spec.rb"},{"name":"#tax_zone when there is a default tax zone when there is no matching zone returns the default tax zone","suite":"Spree::Order at ./spec/models/spree/order/tax_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order/tax_spec.rb"},{"name":"#tax_zone when no default tax zone when there is a matching zone returns the matching zone","suite":"Spree::Order at ./spec/models/spree/order/tax_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order/tax_spec.rb"},{"name":"#tax_zone when no default tax zone when there is no matching zone returns nil","suite":"Spree::Order at ./spec/models/spree/order/tax_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order/tax_spec.rb"},{"name":"adds item to cart and activates promo item quantity changes recalculates order adjustments","suite":"Spree::Order at ./spec/models/spree/order/totals_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order/totals_spec.rb"},{"name":"#update_with_updater! when there are update hooks calls each of the update hooks","suite":"Spree::Order at ./spec/models/spree/order/updating_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order/updating_spec.rb"},{"name":"validations does not return two error messages when email is blank","suite":"Spree::Order at ./spec/models/spree/order/validations_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order/validations_spec.rb"},{"name":"#add adds line item if one does not exist","suite":"Spree::OrderContents at ./spec/models/spree/order_contents_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","suiteSourceFile":"core/spec/models/spree/order_contents_spec.rb"},{"name":"#add updates line item if one exists","suite":"Spree::OrderContents at ./spec/models/spree/order_contents_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","suiteSourceFile":"core/spec/models/spree/order_contents_spec.rb"},{"name":"#add updates order totals","suite":"Spree::OrderContents at ./spec/models/spree/order_contents_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","suiteSourceFile":"core/spec/models/spree/order_contents_spec.rb"},{"name":"#add given quantity is not explicitly provided adds one line item","suite":"Spree::OrderContents at ./spec/models/spree/order_contents_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order_contents_spec.rb"},{"name":"#add given a shipment ensure shipment calls update_amounts instead of order calling ensure_updated_shipments","suite":"Spree::OrderContents at ./spec/models/spree/order_contents_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order_contents_spec.rb"},{"name":"#add not given a shipment ensures updated shipments","suite":"Spree::OrderContents at ./spec/models/spree/order_contents_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/order_contents_spec.rb"},{"name":"#add when store_credits payment example at ./spec/models/spree/order_contents_spec.rb:65","suite":"Spree::OrderContents at ./spec/models/spree/order_contents_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7:1\"}}","suiteSourceFile":"core/spec/models/spree/order_contents_spec.rb"},{"name":"#add running promotions one active order promotion creates valid discount on order","suite":"Spree::OrderContents at ./spec/models/spree/order_contents_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order_contents_spec.rb"},{"name":"#add running promotions one active order promotion example at ./spec/models/spree/order_contents_spec.rb:75","suite":"Spree::OrderContents at ./spec/models/spree/order_contents_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8:1:2\"}}","suiteSourceFile":"core/spec/models/spree/order_contents_spec.rb"},{"name":"#add running promotions one active line item promotion creates valid discount on order","suite":"Spree::OrderContents at ./spec/models/spree/order_contents_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order_contents_spec.rb"},{"name":"#add running promotions one active line item promotion example at ./spec/models/spree/order_contents_spec.rb:75","suite":"Spree::OrderContents at ./spec/models/spree/order_contents_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8:2:2\"}}","suiteSourceFile":"core/spec/models/spree/order_contents_spec.rb"},{"name":"#remove reduces line_item quantity if quantity is less the line_item quantity","suite":"Spree::OrderContents at ./spec/models/spree/order_contents_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:5\"}}","suiteSourceFile":"core/spec/models/spree/order_contents_spec.rb"},{"name":"#remove removes line_item if quantity matches line_item quantity","suite":"Spree::OrderContents at ./spec/models/spree/order_contents_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:7\"}}","suiteSourceFile":"core/spec/models/spree/order_contents_spec.rb"},{"name":"#remove updates order totals","suite":"Spree::OrderContents at ./spec/models/spree/order_contents_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:8\"}}","suiteSourceFile":"core/spec/models/spree/order_contents_spec.rb"},{"name":"#remove given an invalid variant raises an exception","suite":"Spree::OrderContents at ./spec/models/spree/order_contents_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order_contents_spec.rb"},{"name":"#remove given quantity is not explicitly provided removes one line item","suite":"Spree::OrderContents at ./spec/models/spree/order_contents_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order_contents_spec.rb"},{"name":"#remove given a shipment ensure shipment calls update_amounts instead of order calling ensure_updated_shipments","suite":"Spree::OrderContents at ./spec/models/spree/order_contents_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:1\"}}","suiteSourceFile":"core/spec/models/spree/order_contents_spec.rb"},{"name":"#remove not given a shipment ensures updated shipments","suite":"Spree::OrderContents at ./spec/models/spree/order_contents_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:4:1\"}}","suiteSourceFile":"core/spec/models/spree/order_contents_spec.rb"},{"name":"#remove when store_credits payment example at ./spec/models/spree/order_contents_spec.rb:184","suite":"Spree::OrderContents at ./spec/models/spree/order_contents_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:6:1\"}}","suiteSourceFile":"core/spec/models/spree/order_contents_spec.rb"},{"name":"#remove_line_item removes line_item","suite":"Spree::OrderContents at ./spec/models/spree/order_contents_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4\"}}","suiteSourceFile":"core/spec/models/spree/order_contents_spec.rb"},{"name":"#remove_line_item updates order totals","suite":"Spree::OrderContents at ./spec/models/spree/order_contents_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:5\"}}","suiteSourceFile":"core/spec/models/spree/order_contents_spec.rb"},{"name":"#remove_line_item given a shipment ensure shipment calls update_amounts instead of order calling ensure_updated_shipments","suite":"Spree::OrderContents at ./spec/models/spree/order_contents_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order_contents_spec.rb"},{"name":"#remove_line_item not given a shipment ensures updated shipments","suite":"Spree::OrderContents at ./spec/models/spree/order_contents_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order_contents_spec.rb"},{"name":"#remove_line_item when store_credits payment example at ./spec/models/spree/order_contents_spec.rb:238","suite":"Spree::OrderContents at ./spec/models/spree/order_contents_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3:1\"}}","suiteSourceFile":"core/spec/models/spree/order_contents_spec.rb"},{"name":"update cart changes item quantity","suite":"Spree::OrderContents at ./spec/models/spree/order_contents_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/order_contents_spec.rb"},{"name":"update cart updates order totals","suite":"Spree::OrderContents at ./spec/models/spree/order_contents_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2\"}}","suiteSourceFile":"core/spec/models/spree/order_contents_spec.rb"},{"name":"update cart ensures updated shipments","suite":"Spree::OrderContents at ./spec/models/spree/order_contents_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:5\"}}","suiteSourceFile":"core/spec/models/spree/order_contents_spec.rb"},{"name":"update cart when store_credits payment example at ./spec/models/spree/order_contents_spec.rb:287","suite":"Spree::OrderContents at ./spec/models/spree/order_contents_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3:1\"}}","suiteSourceFile":"core/spec/models/spree/order_contents_spec.rb"},{"name":"update cart submits item quantity 0 removes item from order","suite":"Spree::OrderContents at ./spec/models/spree/order_contents_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:4:1\"}}","suiteSourceFile":"core/spec/models/spree/order_contents_spec.rb"},{"name":"update cart submits item quantity 0 doesnt try to update unexistent items","suite":"Spree::OrderContents at ./spec/models/spree/order_contents_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:4:2\"}}","suiteSourceFile":"core/spec/models/spree/order_contents_spec.rb"},{"name":"update cart submits item quantity 0 does not filter if there is only one line item","suite":"Spree::OrderContents at ./spec/models/spree/order_contents_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:4:3\"}}","suiteSourceFile":"core/spec/models/spree/order_contents_spec.rb"},{"name":"completed order updates order payment state","suite":"Spree::OrderContents at ./spec/models/spree/order_contents_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","suiteSourceFile":"core/spec/models/spree/order_contents_spec.rb"},{"name":"when order is missing inventory units creates the proper number of inventory units","suite":"Spree::OrderInventory at ./spec/models/spree/order_inventory_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order_inventory_spec.rb"},{"name":"#add_to_shipment creates stock_movement","suite":"Spree::OrderInventory at ./spec/models/spree/order_inventory_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:5\"}}","suiteSourceFile":"core/spec/models/spree/order_inventory_spec.rb"},{"name":"#add_to_shipment order is not completed doesn't unstock items","suite":"Spree::OrderInventory at ./spec/models/spree/order_inventory_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order_inventory_spec.rb"},{"name":"#add_to_shipment inventory units state sets inventory_units state as per stock location availability","suite":"Spree::OrderInventory at ./spec/models/spree/order_inventory_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order_inventory_spec.rb"},{"name":"#add_to_shipment store doesnt track inventory creates only on hand inventory units","suite":"Spree::OrderInventory at ./spec/models/spree/order_inventory_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:1\"}}","suiteSourceFile":"core/spec/models/spree/order_inventory_spec.rb"},{"name":"#add_to_shipment variant doesnt track inventory creates only on hand inventory units","suite":"Spree::OrderInventory at ./spec/models/spree/order_inventory_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:4:1\"}}","suiteSourceFile":"core/spec/models/spree/order_inventory_spec.rb"},{"name":"#determine_target_shipment selects first non-shipped shipment that already contains given variant","suite":"Spree::OrderInventory at ./spec/models/spree/order_inventory_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/order_inventory_spec.rb"},{"name":"#determine_target_shipment when no shipments already contain this varint selects first non-shipped shipment that leaves from same stock_location","suite":"Spree::OrderInventory at ./spec/models/spree/order_inventory_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order_inventory_spec.rb"},{"name":"when order has too many inventory units is a messed up order","suite":"Spree::OrderInventory at ./spec/models/spree/order_inventory_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/order_inventory_spec.rb"},{"name":"when order has too many inventory units decreases the number of inventory units","suite":"Spree::OrderInventory at ./spec/models/spree/order_inventory_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2\"}}","suiteSourceFile":"core/spec/models/spree/order_inventory_spec.rb"},{"name":"when order has too many inventory units #remove_from_shipment destroys backordered units first","suite":"Spree::OrderInventory at ./spec/models/spree/order_inventory_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3:2\"}}","suiteSourceFile":"core/spec/models/spree/order_inventory_spec.rb"},{"name":"when order has too many inventory units #remove_from_shipment destroys unshipped units first","suite":"Spree::OrderInventory at ./spec/models/spree/order_inventory_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3:3\"}}","suiteSourceFile":"core/spec/models/spree/order_inventory_spec.rb"},{"name":"when order has too many inventory units #remove_from_shipment only attempts to destroy as many units as are eligible, and return amount destroyed","suite":"Spree::OrderInventory at ./spec/models/spree/order_inventory_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3:4\"}}","suiteSourceFile":"core/spec/models/spree/order_inventory_spec.rb"},{"name":"when order has too many inventory units #remove_from_shipment destroys self if not inventory units remain","suite":"Spree::OrderInventory at ./spec/models/spree/order_inventory_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3:5\"}}","suiteSourceFile":"core/spec/models/spree/order_inventory_spec.rb"},{"name":"when order has too many inventory units #remove_from_shipment order is not completed doesn't restock items","suite":"Spree::OrderInventory at ./spec/models/spree/order_inventory_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order_inventory_spec.rb"},{"name":"when order has too many inventory units #remove_from_shipment inventory unit line item and variant points to different products completed order removes only units that match both line item and variant","suite":"Spree::OrderInventory at ./spec/models/spree/order_inventory_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3:6:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order_inventory_spec.rb"},{"name":"when order has too many inventory units #remove_from_shipment backordered items are removed doesn't create on_hand items from backordered items","suite":"Spree::OrderInventory at ./spec/models/spree/order_inventory_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3:7:1\"}}","suiteSourceFile":"core/spec/models/spree/order_inventory_spec.rb"},{"name":"destroys the other order","suite":"Spree::OrderMerger at ./spec/models/spree/order_merger_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","suiteSourceFile":"core/spec/models/spree/order_merger_spec.rb"},{"name":"persist the merge","suite":"Spree::OrderMerger at ./spec/models/spree/order_merger_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3\"}}","suiteSourceFile":"core/spec/models/spree/order_merger_spec.rb"},{"name":"when `discard_merged` is false keeps the other order","suite":"Spree::OrderMerger at ./spec/models/spree/order_merger_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order_merger_spec.rb"},{"name":"when `discard_merged` is false does not change the other order","suite":"Spree::OrderMerger at ./spec/models/spree/order_merger_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","suiteSourceFile":"core/spec/models/spree/order_merger_spec.rb"},{"name":"user is provided assigns user to new order","suite":"Spree::OrderMerger at ./spec/models/spree/order_merger_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/order_merger_spec.rb"},{"name":"merging together two orders with line items for the same variant example at ./spec/models/spree/order_merger_spec.rb:48","suite":"Spree::OrderMerger at ./spec/models/spree/order_merger_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","suiteSourceFile":"core/spec/models/spree/order_merger_spec.rb"},{"name":"merging using extension-specific line_item_comparison_hooks 2 equal line items example at ./spec/models/spree/order_merger_spec.rb:75","suite":"Spree::OrderMerger at ./spec/models/spree/order_merger_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order_merger_spec.rb"},{"name":"merging using extension-specific line_item_comparison_hooks 2 different line items example at ./spec/models/spree/order_merger_spec.rb:94","suite":"Spree::OrderMerger at ./spec/models/spree/order_merger_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order_merger_spec.rb"},{"name":"merging together two orders with different line items example at ./spec/models/spree/order_merger_spec.rb:117","suite":"Spree::OrderMerger at ./spec/models/spree/order_merger_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","suiteSourceFile":"core/spec/models/spree/order_merger_spec.rb"},{"name":"merging together orders with invalid line items creates errors with invalid line items","suite":"Spree::OrderMerger at ./spec/models/spree/order_merger_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1\"}}","suiteSourceFile":"core/spec/models/spree/order_merger_spec.rb"},{"name":"merging an order with addresses assigned to an other complete order destroys the other order","suite":"Spree::OrderMerger at ./spec/models/spree/order_merger_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1\"}}","suiteSourceFile":"core/spec/models/spree/order_merger_spec.rb"},{"name":"merging an order with a gift card merges the gift card","suite":"Spree::OrderMerger at ./spec/models/spree/order_merger_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1\"}}","suiteSourceFile":"core/spec/models/spree/order_merger_spec.rb"},{"name":"#name returns the same value as Promotion name","suite":"Spree::OrderPromotion at ./spec/models/spree/order_promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order_promotion_spec.rb"},{"name":"#description returns the same value as Promotion description","suite":"Spree::OrderPromotion at ./spec/models/spree/order_promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order_promotion_spec.rb"},{"name":"#amount equals sum of adjustments created by promotion","suite":"Spree::OrderPromotion at ./spec/models/spree/order_promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/order_promotion_spec.rb"},{"name":"#display_amount returns Spree::Money instance with amount value and proper currency","suite":"Spree::OrderPromotion at ./spec/models/spree/order_promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/order_promotion_spec.rb"},{"name":"#display_amount different currency return same currency as order","suite":"Spree::OrderPromotion at ./spec/models/spree/order_promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order_promotion_spec.rb"},{"name":"behaves like lifecycle events lifecycle events order.created publishes created event when record is created","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"behaves like lifecycle events lifecycle events order.updated publishes updated event when record is updated","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"behaves like lifecycle events lifecycle events order.deleted publishes deleted event when record is deleted","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:4","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:5","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:7","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:8","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:4\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:10","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:5\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:11","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:6\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"behaves like metadata reads data as symbolized keys","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:7\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"behaves like metadata reads data as not symbolized keys","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:8\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"behaves like metadata can query records by metadata properties","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:10\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"Scopes .complete example at ./spec/models/spree/order_spec.rb:27","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"Scopes .complete example at ./spec/models/spree/order_spec.rb:28","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:2\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"Scopes .incomplete example at ./spec/models/spree/order_spec.rb:32","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"Scopes .incomplete example at ./spec/models/spree/order_spec.rb:33","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:2\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"Scopes .not_canceled example at ./spec/models/spree/order_spec.rb:37","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"Scopes .multi_search returns orders based on an email","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"Scopes .multi_search returns orders based on the first name","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4:2\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"Scopes .multi_search returns orders based on the last name","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4:3\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"Scopes .multi_search returns orders based on the full name","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4:4\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"Callbacks #clone_shipping_address clones the shipping address when use_shipping is true","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"Callbacks #clone_shipping_address does not clone the shipping address when use_shipping is false","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:2\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#full_name for an order with user example at ./spec/models/spree/order_spec.rb:106","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#full_name for an order with user without name example at ./spec/models/spree/order_spec.rb:111","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#full_name for a guest order example at ./spec/models/spree/order_spec.rb:118","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#full_name for a guest order with billing address example at ./spec/models/spree/order_spec.rb:123","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#update_with_updater! expects to update order with order updater","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#allow_cancel? when all shipments are canceled or ready returns true","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#cancel marks the payments as void","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#cancel with incomplete payments marks the incomplete payments as void","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#cancel with incomplete payments voids transactions for incomplete payments","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2:2\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#after_cancel when gift card is present handles additional actions","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#after_cancel when no gift card handles additional actions","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#after_cancel events publishes order.canceled event","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:3:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#after_resume publishes order.resumed event","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#canceled_by cancels the order","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#canceled_by saves canceler_id","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#canceled_by has canceler","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:3\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#canceled_by when canceled_at is not given saves canceled_at to Time.current","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:4:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#canceled_by when canceled_at is given saves canceled_at to given time","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:5:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#canceled_by events publishes order.canceled event","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:6:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#create assigns an order number","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#create creates a randomized 35 character token","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:2\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"creates shipments cost update and persist totals","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#finalize! sets completed_at","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#finalize! sells inventory units","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:2\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#finalize! decreases the stock for each variant in the shipment","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:3\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#finalize! changes the shipment state to ready if order is paid","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:4\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#finalize! does not sell inventory units if track_inventory_levels is false","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:5\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#finalize! freezes all adjustments","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:6\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#finalize! order is considered risky changes state to risky","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:7:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#finalize! order is considered risky and order is approved leaves order in complete state","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:7:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#finalize! events publishes order.completed event","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:8:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"insufficient_stock_lines returns line_item that has insufficient stock on hand","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#ensure_line_item_variants_are_not_discontinued when variant is destroyed restarts checkout flow","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#ensure_line_item_variants_are_not_discontinued when variant is destroyed has error message","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:1:2\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#ensure_line_item_variants_are_not_discontinued when variant is destroyed is false","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:1:3\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#ensure_line_item_variants_are_not_discontinued when no variants are destroyed does not restart checkout","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#ensure_line_item_variants_are_not_discontinued when no variants are destroyed is true","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:2:2\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#ensure_line_items_are_in_stock restarts checkout flow","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:17:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#ensure_line_items_are_in_stock has error message","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:17:2\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#ensure_line_items_are_in_stock is false","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:17:3\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"empty! completed order raises an exception","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"empty! incomplete order clears out line items, adjustments and update totals","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#display_outstanding_balance returns the value as a spree money","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#display_item_total returns the value as a spree money","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:20:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#display_adjustment_total returns the value as a spree money","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:21:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#display_promo_total returns the value as a spree money","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:22:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#display_total returns the value as a spree money","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:23:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#currency when object currency is ABC returns the currency from the object","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:24:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#confirmation_required? is required if the state is currently 'confirm'","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:25:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#confirmation_required? Spree::Config[:always_include_confirm_step] == true returns true if payments empty","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:25:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#confirmation_required? Spree::Config[:always_include_confirm_step] == false returns false if payments empty and Spree::Config[:always_include_confirm_step] == false","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:25:3:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#confirmation_required? Spree::Config[:always_include_confirm_step] == false does not bomb out when an order has an unpersisted payment","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:25:3:2\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#confirmation_required? when the payment does not require confirmation example at ./spec/models/spree/order_spec.rb:618","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:25:4:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#confirmation_required? when at least one payment method requires confirmation example at ./spec/models/spree/order_spec.rb:627","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:25:5:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"add_update_hook calls hook during update","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:26:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"add_update_hook calls hook during finalize","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:26:2\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#tax_address when tax_using_ship_address is true returns ship_address","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:27:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#tax_address when tax_using_ship_address is not true returns bill_address","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:27:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#restart_checkout_flow updates the state column to the first checkout_steps value","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:28:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#restart_checkout_flow without line items updates the state column to cart","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:28:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#restart_checkout_flow events publishes order.updated event","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:28:3:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#state_changed logs state changes","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#state_changed does not do anything if state does not change","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:2\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#collect_frontend_payment_methods includes frontend payment methods","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:30:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#collect_frontend_payment_methods includes 'both' payment methods","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:30:2\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#collect_frontend_payment_methods does not include backend payment method","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:30:3\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#collect_frontend_payment_methods does not include inactive payment methods","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:30:4\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#collect_frontend_payment_methods does not include a payment method that is not suitable for this order","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:30:5\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#collect_frontend_payment_methods does not include a payment method from different stores","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:30:6\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#apply_free_shipping_promotions calls out to the FreeShipping promotion handler","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:31:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#products gets the quantity of a given variant","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:32:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#products can find a line item matching a given variant","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:32:2\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#products match line item with options matches line item when options match","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:32:3:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#products match line item with options does not match line item without options","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:32:3:2\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#associate_user! when email is set when email should be overridden behaves like #associate_user! associates a user to an order","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:33:1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#associate_user! when email is set when email should be overridden behaves like #associate_user! does not persist the order","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:33:1:1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#associate_user! when email is set when email should not be overridden behaves like #associate_user! associates a user to an order","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:33:1:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#associate_user! when email is set when email should not be overridden behaves like #associate_user! does not persist the order","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:33:1:2:1:2\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#associate_user! when created_by is set behaves like #associate_user! associates a user to an order","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:33:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#associate_user! when created_by is set behaves like #associate_user! does not persist the order","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:33:2:1:2\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#associate_user! when bill_address is set behaves like #associate_user! associates a user to an order","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:33:3:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#associate_user! when bill_address is set behaves like #associate_user! does not persist the order","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:33:3:1:2\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#associate_user! when ship_address is set behaves like #associate_user! associates a user to an order","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:33:4:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#associate_user! when ship_address is set behaves like #associate_user! does not persist the order","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:33:4:1:2\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#associate_user! when the user is not persisted does not persist the user","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:33:5:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#associate_user! when the user is not persisted behaves like #associate_user! associates a user to an order","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:33:5:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#associate_user! when the user is not persisted behaves like #associate_user! does not persist the order","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:33:5:2:2\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#associate_user! when the order is persisted associates a user to a persisted order","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:33:6:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#associate_user! when the order is persisted does not persist other changes to the order","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:33:6:2\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#associate_user! when the order is persisted does not change any other orders","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:33:6:3\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#associate_user! when the order is persisted is not affected by scoping","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:33:6:4\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#associate_user! when the order is persisted behaves like #associate_user! associates a user to an order","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:33:6:5:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#associate_user! events publishes order.updated event","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:33:7:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#disassociate_user! disassociates a user from an order","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:34:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#approved_by sets approver_id","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:35:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#approved_by sets approved_at","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:35:2\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#approved_by calls approve!","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:35:3\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#approved_by events publishes order.approved event","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:35:4:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#considered_risky! sets considered_risky to true","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:36:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#considered_risky! events publishes order.updated event","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:36:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#approve! sets considered_risky to false","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:37:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#approve! events publishes order.approved event","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:37:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#ensure_updated_shipments when order has shipments and is not completed destroys all shipments","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:38:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#ensure_updated_shipments when order has shipments and is not completed resets shipment_total to 0","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:38:1:2\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#ensure_updated_shipments when order has shipments and is not completed restarts checkout flow","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:38:1:3\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#ensure_updated_shipments when order has shipments and is not completed events publishes order.updated event","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:38:1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#ensure_updated_shipments when order is completed does not destroy shipments","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:38:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#can_ship? is true for order in the 'complete' state","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:39:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#can_ship? is true for order in the 'resumed' state","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:39:2\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#can_ship? is true for an order in the 'awaiting return' state","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:39:3\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#can_ship? is true for an order in the 'returned' state","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:39:4\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#can_ship? is false if the order is neither in the 'complete' nor 'resumed' state","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:39:5\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#can_be_deleted? when order is completed behaves like cannot be destroyed example at ./spec/models/spree/order_spec.rb:1140","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:40:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#can_be_deleted? when order has finalized payments behaves like cannot be destroyed example at ./spec/models/spree/order_spec.rb:1140","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:40:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#can_be_deleted? when order is not completed and does not have finalized payments can be destroyed","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:40:3:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#uneditable? returns true when order is completed","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:41:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#uneditable? returns true when order is canceled","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:41:2\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#uneditable? returns true when order is returned","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:41:3\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#uneditable? returns false when order is during checkout","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:41:4\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#completed? indicates if order is completed","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:42:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#allow_checkout? is true if there are line_items in the order","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:43:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#allow_checkout? is false if there are no line_items in the order","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:43:2\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#amount returns the correct sum of items","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:44:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#backordered? is backordered if one of the shipments is backordered","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:45:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#can_cancel? is false for completed order in the canceled state","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:46:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#can_cancel? is true for completed order with no shipment","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:46:2\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#tax_total adds included tax and additional tax","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:47:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"locking can lock","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:48:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#pre_tax_item_amount sums all of the line items' pre tax amounts","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:49:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#display_pre_tax_item_amount returns the value as a spree money","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:50:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#pre_tax_total sums all of the line items' and shipments pre tax amounts","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:51:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#display_pre_tax_total returns the value as a spree money","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:52:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#analytics_subtotal returns the subtotal used for analytics integrations","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:53:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#quantity sums the quantity of all line items","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:54:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#has_non_reimbursement_related_refunds? no refunds exist example at ./spec/models/spree/order_spec.rb:1348","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:55:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#has_non_reimbursement_related_refunds? a non-reimbursement related refund exists example at ./spec/models/spree/order_spec.rb:1355","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:55:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#has_non_reimbursement_related_refunds? an old-style refund exists example at ./spec/models/spree/order_spec.rb:1369","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:55:3:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#has_non_reimbursement_related_refunds? a reimbursement related refund exists example at ./spec/models/spree/order_spec.rb:1377","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:55:4:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#create_proposed_shipments assigns the coordinator returned shipments to its shipments","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:56:2\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#create_proposed_shipments has unassociated inventory units when shipped does not delete inventory_unit","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:56:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#create_proposed_shipments has unassociated inventory units when returned does not delete inventory_unit","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:56:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#create_proposed_shipments has unassociated inventory units when on_hand deletes inventory_unit","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:56:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#create_proposed_shipments has unassociated inventory units when backordered deletes inventory_unit","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:56:1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#all_inventory_units_returned? all inventory units are returned is true","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:57:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#all_inventory_units_returned? some inventory units are returned is false","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:57:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#all_inventory_units_returned? no inventory units are returned is false","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:57:3:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#fully_discounted? the order had no inventory-related cost example at ./spec/models/spree/order_spec.rb:1493","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:58:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#fully_discounted? the order had inventory-related cost example at ./spec/models/spree/order_spec.rb:1507","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:58:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#promo_code without promo code returns nil","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:59:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#promo_code with promo code with single coupon code returns the promotion code","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:59:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#promo_code with promo code with coupon code batches returns the promotion code","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:59:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#promo_code with promo code with coupon code batches returns the same promotion code after line item removal","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:59:2:2:2\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"order transit to returned state from resumed state when all inventory_units returned example at ./spec/models/spree/order_spec.rb:1568","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:60:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"order transit to returned state from resumed state when some inventory_units returned example at ./spec/models/spree/order_spec.rb:1577","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:60:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#credit_card_nil_payment when zero amount credit-card payment expect not to build a new payment","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:61:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#credit_card_nil_payment when valid-amount(>0) creditcard payment expect not to build a new payment","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:61:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#collect_backend_payment_methods example at ./spec/models/spree/order_spec.rb:1608","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:62:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#collect_backend_payment_methods example at ./spec/models/spree/order_spec.rb:1609","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:62:2\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#collect_backend_payment_methods example at ./spec/models/spree/order_spec.rb:1610","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:62:3\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#create_shipment_tax_charge! when order has shipments example at ./spec/models/spree/order_spec.rb:1625","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:63:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#create_shipment_tax_charge! when order has shipments example at ./spec/models/spree/order_spec.rb:1626","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:63:1:2\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#create_shipment_tax_charge! when order has shipments example at ./spec/models/spree/order_spec.rb:1627","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:63:1:3\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#create_shipment_tax_charge! when order has no shipments example at ./spec/models/spree/order_spec.rb:1635","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:63:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#shipping_eq_billing_address with only bill address example at ./spec/models/spree/order_spec.rb:1643","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:64:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#shipping_eq_billing_address blank addresses example at ./spec/models/spree/order_spec.rb:1652","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:64:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#shipping_eq_billing_address no addresses example at ./spec/models/spree/order_spec.rb:1661","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:64:3:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#destroying order will trigger ship and bill addresses destroy example at ./spec/models/spree/order_spec.rb:1668","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:65:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#valid_promotions without promotions expect to return an empty array","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:66:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#valid_promotions with promotions expect return valid order promotions","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:66:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#cart_promo_total without promotions returns 0","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:67:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#cart_promo_total with promotions free shipping includes free shipping prromo","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:67:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#cart_promo_total with promotions free shipping returns 0","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:67:2:1:2\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#cart_promo_total with promotions line item discount includes line item promo","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:67:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#cart_promo_total with promotions line item discount reeturns -100.0","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:67:2:2:2\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#cart_promo_total with promotions order discount includes order promo","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:67:2:3:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#cart_promo_total with promotions order discount reeturns -10.0","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:67:2:3:2\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#cart_promo_total with promotions multiple promotions includes all promotions","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:67:2:4:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#cart_promo_total with promotions multiple promotions returns -110.00","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:67:2:4:2\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#has_free_shipping? when promotion is applied example at ./spec/models/spree/order_spec.rb:1823","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:68:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#has_free_shipping? when promotion is applied when free shipping promotion has item total rule when order total is in defined range example at ./spec/models/spree/order_spec.rb:1835","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:68:1:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#has_free_shipping? when promotion is applied when free shipping promotion has item total rule when order total is not in defined range example at ./spec/models/spree/order_spec.rb:1841","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:68:1:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#has_free_shipping? when promotion is not applied example at ./spec/models/spree/order_spec.rb:1847","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:68:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#uppercase_number example at ./spec/models/spree/order_spec.rb:1854","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:69:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"bill_address_id= when assigned address exist when assigned address belongs to user assigns address to order as bill address","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:70:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"bill_address_id= when assigned address exist when assigned address belongs to user does not set address as user default bill address","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:70:1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"bill_address_id= when assigned address does not belong to user sets order bill address to nil","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:70:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"bill_address_id= with guest user when assigning the same existing address does nothing","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:70:3:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"bill_address_id= with guest user when assigning a different existing address sets order bill address to nil","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:70:3:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#bill_address_attributes= when user has default bill address changes user default bill address","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:71:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#bill_address_attributes= when user has no default address assigns a new default address","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:71:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#bill_address_attributes= when user does not have any addresses changes user default bill addresss","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:71:3:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#bill_address_attributes= when user has address but without default bill address changes user default bill addresss","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:71:4:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"ship_address_id= when assigned address exist when assigned address belongs to user assigns address to order as ship address","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:72:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"ship_address_id= when assigned address exist when assigned address belongs to user does not set address as user default ship address","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:72:1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"ship_address_id= when assigned address does not belong to user sets order ship address to nil","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:72:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"ship_address_id= with guest user when assigning the same existing address does nothing","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:72:3:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"ship_address_id= with guest user when assigning a different existing address sets order ship address to nil","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:72:3:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#ship_address_attributes= when user has default ship address changes user default ship addresss","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:73:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#ship_address_attributes= when user has no default address assigns a new default address","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:73:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#ship_address_attributes= when user does not have any addresses changes user default ship address","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:73:3:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#ship_address_attributes= when user has address but without default ship address changes user default ship address","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:73:4:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#paid? when all order valid payments are completed when the amount of the valid payments < the order total example at ./spec/models/spree/order_spec.rb:2086","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:74:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#paid? when all order valid payments are completed when the amount of the valid payments == the order total example at ./spec/models/spree/order_spec.rb:2092","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:74:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#paid? when all order valid payments are completed when the amount of the valid payments > the order total example at ./spec/models/spree/order_spec.rb:2098","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:74:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#paid? when not all order payments are completed one is void when the amount of the valid payments < the order total example at ./spec/models/spree/order_spec.rb:2112","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:74:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#paid? when not all order payments are completed one is void when the amount of the valid payments == the order total example at ./spec/models/spree/order_spec.rb:2118","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:74:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#paid? when not all order payments are completed one is void when the amount of the valid payments > the order total example at ./spec/models/spree/order_spec.rb:2124","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:74:2:3:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#paid? when not all order payments are completed one is failed when the amount of the valid payments < the order total example at ./spec/models/spree/order_spec.rb:2140","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:74:3:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#paid? when not all order payments are completed one is failed when the amount of the valid payments == the order total example at ./spec/models/spree/order_spec.rb:2146","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:74:3:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#paid? when not all order payments are completed one is failed when the amount of the valid payments > the order total example at ./spec/models/spree/order_spec.rb:2152","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:74:3:3:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#paid? when not all order payments are completed one is invalid when the amount of the valid payments < the order total example at ./spec/models/spree/order_spec.rb:2168","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:74:4:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#paid? when not all order payments are completed one is invalid when the amount of the valid payments == the order total example at ./spec/models/spree/order_spec.rb:2174","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:74:4:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#paid? when not all order payments are completed one is invalid when the amount of the valid payments > the order total example at ./spec/models/spree/order_spec.rb:2180","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:74:4:3:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#fully_shipped? when all order shipments were shipped example at ./spec/models/spree/order_spec.rb:2209","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:75:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#fully_shipped? when not all order shipments were shipped example at ./spec/models/spree/order_spec.rb:2213","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:75:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#total_weight example at ./spec/models/spree/order_spec.rb:2230","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:76:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#partially_refunded? when orders has refunds when sum of refunds is less than max amount which could be refunded returns true","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:77:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#partially_refunded? when orders has refunds when sum of refunds is equal to max amount which could be refunded returns false","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:77:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#partially_refunded? when orders has refunds when sum of refunds is greater than max amount which could be refunded returns false","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:77:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#partially_refunded? when orders has refunds when payment is void returns false","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:77:1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#partially_refunded? when orders has refunds when payment is failed returns false","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:77:1:5:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#partially_refunded? when order does not have refunds returns false","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:77:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#order_refunded? when orders has refunds when sum of refunds is less than max amount which could be refunded returns false","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:78:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#order_refunded? when orders has refunds when sum of refunds is equal to max amount which could be refunded returns true","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:78:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#order_refunded? when orders has refunds when payment is void returns true","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:78:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#order_refunded? when order does not have refunds returns false","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:78:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#payment_method returns the payment method","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:79:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#payment_source returns the payment source","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:80:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#backordered_variants returns the backordered variants","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:81:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#line_items_without_shipping_rates when order has no shipments returns an empty array","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:82:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#line_items_without_shipping_rates when order has shipments with no shipping rates returns the line items without shipping rates","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:82:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#line_items_without_shipping_rates when order has shipments with shipping rates returns an empty array","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:82:3:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#ensure_available_shipping_rates when order has no shipments returns false and adds an error to the order","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:83:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#ensure_available_shipping_rates when order has shipments with no shipping rates returns false and adds an error to the order","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:83:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#ensure_available_shipping_rates when order has shipments with no shipping rates deletes all the shipments","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:83:2:2\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#ensure_available_shipping_rates when order has shipments with shipping rates returns nil and does not add an error to the order","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:83:3:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#to_csv when order has no line items returns no csv lines","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:84:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#to_csv when order has line items returns the csv lines","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:84:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"quick checkout #quick_checkout? returns false if the order has no shipping address","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:85:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"quick checkout #quick_checkout? returns false if the order has a shipping address but it is not a quick checkout address","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:85:1:2\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"quick checkout #quick_checkout? returns true if the order has a quick checkout shipping address","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:85:1:3\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"quick checkout #quick_checkout_available? returns true if the order is fully digital","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:85:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"quick checkout #quick_checkout_available? returns true if the order has no digital products at all","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:85:2:2\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"quick checkout #quick_checkout_available? returns false if the order has physical products and some digital products","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:85:2:3\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"quick checkout #quick_checkout_available? returns false if order has many shipments","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:85:2:4\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"quick checkout #quick_checkout_available? returns false if order does not require payment","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:85:2:5\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"quick checkout #quick_checkout_require_address? returns true if the order is not digital and delivery is required","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:85:3:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"quick checkout #quick_checkout_require_address? returns false if the order is digital","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:85:3:2\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"quick checkout #quick_checkout_require_address? returns false if the order does not require delivery","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:85:3:3\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"state change","suite":"Spree::OrderUpdater at ./spec/models/spree/order_updater_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5\"}}","suiteSourceFile":"core/spec/models/spree/order_updater_spec.rb"},{"name":"order totals updates payment totals","suite":"Spree::OrderUpdater at ./spec/models/spree/order_updater_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order_updater_spec.rb"},{"name":"order totals update item total","suite":"Spree::OrderUpdater at ./spec/models/spree/order_updater_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/order_updater_spec.rb"},{"name":"order totals update shipment total","suite":"Spree::OrderUpdater at ./spec/models/spree/order_updater_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/models/spree/order_updater_spec.rb"},{"name":"order totals update order adjustments","suite":"Spree::OrderUpdater at ./spec/models/spree/order_updater_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","suiteSourceFile":"core/spec/models/spree/order_updater_spec.rb"},{"name":"order totals with order promotion followed by line item addition updates promotion total","suite":"Spree::OrderUpdater at ./spec/models/spree/order_updater_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/order_updater_spec.rb"},{"name":"#update_with_updater! updates item count","suite":"Spree::OrderUpdater at ./spec/models/spree/order_updater_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order_updater_spec.rb"},{"name":"updating shipment state is backordered","suite":"Spree::OrderUpdater at ./spec/models/spree/order_updater_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/order_updater_spec.rb"},{"name":"updating shipment state is nil","suite":"Spree::OrderUpdater at ./spec/models/spree/order_updater_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","suiteSourceFile":"core/spec/models/spree/order_updater_spec.rb"},{"name":"updating shipment state is shipped","suite":"Spree::OrderUpdater at ./spec/models/spree/order_updater_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3\"}}","suiteSourceFile":"core/spec/models/spree/order_updater_spec.rb"},{"name":"updating shipment state is ready","suite":"Spree::OrderUpdater at ./spec/models/spree/order_updater_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4\"}}","suiteSourceFile":"core/spec/models/spree/order_updater_spec.rb"},{"name":"updating shipment state is pending","suite":"Spree::OrderUpdater at ./spec/models/spree/order_updater_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:5\"}}","suiteSourceFile":"core/spec/models/spree/order_updater_spec.rb"},{"name":"updating shipment state is partial","suite":"Spree::OrderUpdater at ./spec/models/spree/order_updater_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:6\"}}","suiteSourceFile":"core/spec/models/spree/order_updater_spec.rb"},{"name":"updating payment state is failed if no valid payments","suite":"Spree::OrderUpdater at ./spec/models/spree/order_updater_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/order_updater_spec.rb"},{"name":"updating payment state payment total is greater than order total is credit_owed","suite":"Spree::OrderUpdater at ./spec/models/spree/order_updater_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order_updater_spec.rb"},{"name":"updating payment state order total is greater than payment total is balance_due","suite":"Spree::OrderUpdater at ./spec/models/spree/order_updater_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3:1\"}}","suiteSourceFile":"core/spec/models/spree/order_updater_spec.rb"},{"name":"updating payment state order total equals payment total is paid","suite":"Spree::OrderUpdater at ./spec/models/spree/order_updater_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:4:1\"}}","suiteSourceFile":"core/spec/models/spree/order_updater_spec.rb"},{"name":"updating payment state order is canceled and is still unpaid is void","suite":"Spree::OrderUpdater at ./spec/models/spree/order_updater_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:5:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order_updater_spec.rb"},{"name":"updating payment state order is canceled and is paid is credit_owed","suite":"Spree::OrderUpdater at ./spec/models/spree/order_updater_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:5:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order_updater_spec.rb"},{"name":"updating payment state order is canceled and payment is refunded is void","suite":"Spree::OrderUpdater at ./spec/models/spree/order_updater_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:5:3:1\"}}","suiteSourceFile":"core/spec/models/spree/order_updater_spec.rb"},{"name":"completed order #update updates payment state","suite":"Spree::OrderUpdater at ./spec/models/spree/order_updater_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order_updater_spec.rb"},{"name":"completed order #update updates shipment state","suite":"Spree::OrderUpdater at ./spec/models/spree/order_updater_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1:2\"}}","suiteSourceFile":"core/spec/models/spree/order_updater_spec.rb"},{"name":"completed order #update updates shipments total again after updating shipments","suite":"Spree::OrderUpdater at ./spec/models/spree/order_updater_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1:3\"}}","suiteSourceFile":"core/spec/models/spree/order_updater_spec.rb"},{"name":"completed order #update_shipments updates each shipment","suite":"Spree::OrderUpdater at ./spec/models/spree/order_updater_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order_updater_spec.rb"},{"name":"completed order #update_shipments refreshes shipment rates","suite":"Spree::OrderUpdater at ./spec/models/spree/order_updater_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2:2\"}}","suiteSourceFile":"core/spec/models/spree/order_updater_spec.rb"},{"name":"completed order #update_shipments updates the shipment amount","suite":"Spree::OrderUpdater at ./spec/models/spree/order_updater_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2:3\"}}","suiteSourceFile":"core/spec/models/spree/order_updater_spec.rb"},{"name":"completed order #update_shipments refresh rates keeps the original shipping method","suite":"Spree::OrderUpdater at ./spec/models/spree/order_updater_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2:4:1\"}}","suiteSourceFile":"core/spec/models/spree/order_updater_spec.rb"},{"name":"incomplete order doesnt update payment state","suite":"Spree::OrderUpdater at ./spec/models/spree/order_updater_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","suiteSourceFile":"core/spec/models/spree/order_updater_spec.rb"},{"name":"incomplete order doesnt update shipment state","suite":"Spree::OrderUpdater at ./spec/models/spree/order_updater_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2\"}}","suiteSourceFile":"core/spec/models/spree/order_updater_spec.rb"},{"name":"incomplete order doesnt update each shipment","suite":"Spree::OrderUpdater at ./spec/models/spree/order_updater_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:3\"}}","suiteSourceFile":"core/spec/models/spree/order_updater_spec.rb"},{"name":"incomplete order #update_shipments resets shipping method to frontend-available","suite":"Spree::OrderUpdater at ./spec/models/spree/order_updater_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:4:1\"}}","suiteSourceFile":"core/spec/models/spree/order_updater_spec.rb"},{"name":"payment.paid event publishes payment.paid when payment state changes to completed","suite":"Spree::Payment::CustomEvents at ./spec/models/spree/payment/custom_events_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/payment/custom_events_spec.rb"},{"name":"payment.paid event does not publish payment.paid when state changes to something other than completed","suite":"Spree::Payment::CustomEvents at ./spec/models/spree/payment/custom_events_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/payment/custom_events_spec.rb"},{"name":"payment.paid event does not publish when events are disabled","suite":"Spree::Payment::CustomEvents at ./spec/models/spree/payment/custom_events_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/models/spree/payment/custom_events_spec.rb"},{"name":"order.paid event publishes order.paid when payment completes and order is fully paid","suite":"Spree::Payment::CustomEvents at ./spec/models/spree/payment/custom_events_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/payment/custom_events_spec.rb"},{"name":"order.paid event does not publish order.paid when order still has outstanding balance","suite":"Spree::Payment::CustomEvents at ./spec/models/spree/payment/custom_events_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","suiteSourceFile":"core/spec/models/spree/payment/custom_events_spec.rb"},{"name":"#order example at ./spec/models/spree/payment/gateway_options_spec.rb:50","suite":"Spree::Payment::GatewayOptions at ./spec/models/spree/payment/gateway_options_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/payment/gateway_options_spec.rb"},{"name":"#payment example at ./spec/models/spree/payment/gateway_options_spec.rb:56","suite":"Spree::Payment::GatewayOptions at ./spec/models/spree/payment/gateway_options_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/payment/gateway_options_spec.rb"},{"name":"#payment_id example at ./spec/models/spree/payment/gateway_options_spec.rb:62","suite":"Spree::Payment::GatewayOptions at ./spec/models/spree/payment/gateway_options_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/payment/gateway_options_spec.rb"},{"name":"#email example at ./spec/models/spree/payment/gateway_options_spec.rb:68","suite":"Spree::Payment::GatewayOptions at ./spec/models/spree/payment/gateway_options_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/payment/gateway_options_spec.rb"},{"name":"#customer example at ./spec/models/spree/payment/gateway_options_spec.rb:74","suite":"Spree::Payment::GatewayOptions at ./spec/models/spree/payment/gateway_options_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","suiteSourceFile":"core/spec/models/spree/payment/gateway_options_spec.rb"},{"name":"#customer_id example at ./spec/models/spree/payment/gateway_options_spec.rb:80","suite":"Spree::Payment::GatewayOptions at ./spec/models/spree/payment/gateway_options_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","suiteSourceFile":"core/spec/models/spree/payment/gateway_options_spec.rb"},{"name":"#ip example at ./spec/models/spree/payment/gateway_options_spec.rb:86","suite":"Spree::Payment::GatewayOptions at ./spec/models/spree/payment/gateway_options_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","suiteSourceFile":"core/spec/models/spree/payment/gateway_options_spec.rb"},{"name":"#order_id example at ./spec/models/spree/payment/gateway_options_spec.rb:92","suite":"Spree::Payment::GatewayOptions at ./spec/models/spree/payment/gateway_options_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1\"}}","suiteSourceFile":"core/spec/models/spree/payment/gateway_options_spec.rb"},{"name":"#shipping example at ./spec/models/spree/payment/gateway_options_spec.rb:98","suite":"Spree::Payment::GatewayOptions at ./spec/models/spree/payment/gateway_options_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1\"}}","suiteSourceFile":"core/spec/models/spree/payment/gateway_options_spec.rb"},{"name":"#tax example at ./spec/models/spree/payment/gateway_options_spec.rb:104","suite":"Spree::Payment::GatewayOptions at ./spec/models/spree/payment/gateway_options_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1\"}}","suiteSourceFile":"core/spec/models/spree/payment/gateway_options_spec.rb"},{"name":"#subtotal example at ./spec/models/spree/payment/gateway_options_spec.rb:110","suite":"Spree::Payment::GatewayOptions at ./spec/models/spree/payment/gateway_options_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1\"}}","suiteSourceFile":"core/spec/models/spree/payment/gateway_options_spec.rb"},{"name":"#discount example at ./spec/models/spree/payment/gateway_options_spec.rb:116","suite":"Spree::Payment::GatewayOptions at ./spec/models/spree/payment/gateway_options_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:1\"}}","suiteSourceFile":"core/spec/models/spree/payment/gateway_options_spec.rb"},{"name":"#currency example at ./spec/models/spree/payment/gateway_options_spec.rb:122","suite":"Spree::Payment::GatewayOptions at ./spec/models/spree/payment/gateway_options_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:1\"}}","suiteSourceFile":"core/spec/models/spree/payment/gateway_options_spec.rb"},{"name":"#billing_address example at ./spec/models/spree/payment/gateway_options_spec.rb:128","suite":"Spree::Payment::GatewayOptions at ./spec/models/spree/payment/gateway_options_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:1\"}}","suiteSourceFile":"core/spec/models/spree/payment/gateway_options_spec.rb"},{"name":"#shipping_address example at ./spec/models/spree/payment/gateway_options_spec.rb:134","suite":"Spree::Payment::GatewayOptions at ./spec/models/spree/payment/gateway_options_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:1\"}}","suiteSourceFile":"core/spec/models/spree/payment/gateway_options_spec.rb"},{"name":"#to_hash example at ./spec/models/spree/payment/gateway_options_spec.rb:158","suite":"Spree::Payment::GatewayOptions at ./spec/models/spree/payment/gateway_options_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:1\"}}","suiteSourceFile":"core/spec/models/spree/payment/gateway_options_spec.rb"},{"name":"#cancel! a store credit attempts to cancels the payment","suite":"Payment at ./spec/models/spree/payment/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/payment/store_credit_spec.rb"},{"name":"#cancel! a store credit cancels successfully voids the payment","suite":"Payment at ./spec/models/spree/payment/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/payment/store_credit_spec.rb"},{"name":"#cancel! a store credit does not cancel successfully does not change the payment state","suite":"Payment at ./spec/models/spree/payment/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/payment/store_credit_spec.rb"},{"name":"#authorize without an invalid store credit declines an unknown store credit","suite":"Spree::PaymentMethod::StoreCredit at ./spec/models/spree/payment_method/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_method/store_credit_spec.rb"},{"name":"#authorize with insuffient funds declines a store credit","suite":"Spree::PaymentMethod::StoreCredit at ./spec/models/spree/payment_method/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_method/store_credit_spec.rb"},{"name":"#authorize when the currency does not match the order currency declines the credit","suite":"Spree::PaymentMethod::StoreCredit at ./spec/models/spree/payment_method/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_method/store_credit_spec.rb"},{"name":"#authorize with a valid request authorizes a valid store credit","suite":"Spree::PaymentMethod::StoreCredit at ./spec/models/spree/payment_method/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_method/store_credit_spec.rb"},{"name":"#authorize with a valid request with an originator passes the originator","suite":"Spree::PaymentMethod::StoreCredit at ./spec/models/spree/payment_method/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:2:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_method/store_credit_spec.rb"},{"name":"#capture with an invalid auth code declines an unknown store credit","suite":"Spree::PaymentMethod::StoreCredit at ./spec/models/spree/payment_method/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_method/store_credit_spec.rb"},{"name":"#capture when unable to authorize the amount declines a store credit","suite":"Spree::PaymentMethod::StoreCredit at ./spec/models/spree/payment_method/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_method/store_credit_spec.rb"},{"name":"#capture when the currency does not match the order currency declines the credit","suite":"Spree::PaymentMethod::StoreCredit at ./spec/models/spree/payment_method/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_method/store_credit_spec.rb"},{"name":"#capture with a valid request captures the store credit","suite":"Spree::PaymentMethod::StoreCredit at ./spec/models/spree/payment_method/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:4:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_method/store_credit_spec.rb"},{"name":"#capture with a valid request with an originator passes the originator","suite":"Spree::PaymentMethod::StoreCredit at ./spec/models/spree/payment_method/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:4:2:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_method/store_credit_spec.rb"},{"name":"#void voids a valid store credit void request","suite":"Spree::PaymentMethod::StoreCredit at ./spec/models/spree/payment_method/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3\"}}","suiteSourceFile":"core/spec/models/spree/payment_method/store_credit_spec.rb"},{"name":"#void with an invalid auth code declines an unknown store credit","suite":"Spree::PaymentMethod::StoreCredit at ./spec/models/spree/payment_method/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_method/store_credit_spec.rb"},{"name":"#void when the store credit is not voided successfully returns an error response","suite":"Spree::PaymentMethod::StoreCredit at ./spec/models/spree/payment_method/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_method/store_credit_spec.rb"},{"name":"#void with an originator passes the originator","suite":"Spree::PaymentMethod::StoreCredit at ./spec/models/spree/payment_method/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_method/store_credit_spec.rb"},{"name":"#purchase declines a purchase if it can't find a pending credit for the correct amount","suite":"Spree::PaymentMethod::StoreCredit at ./spec/models/spree/payment_method/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_method/store_credit_spec.rb"},{"name":"#purchase captures a purchase if it can find a pending credit for the correct amount","suite":"Spree::PaymentMethod::StoreCredit at ./spec/models/spree/payment_method/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2\"}}","suiteSourceFile":"core/spec/models/spree/payment_method/store_credit_spec.rb"},{"name":"#credit with an invalid auth code declines an unknown store credit","suite":"Spree::PaymentMethod::StoreCredit at ./spec/models/spree/payment_method/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_method/store_credit_spec.rb"},{"name":"#credit when the store credit isn't credited successfully returns an error response","suite":"Spree::PaymentMethod::StoreCredit at ./spec/models/spree/payment_method/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_method/store_credit_spec.rb"},{"name":"#credit with a valid credit request credits a valid store credit credit request","suite":"Spree::PaymentMethod::StoreCredit at ./spec/models/spree/payment_method/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_method/store_credit_spec.rb"},{"name":"#credit with an originator passes the originator","suite":"Spree::PaymentMethod::StoreCredit at ./spec/models/spree/payment_method/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:4:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_method/store_credit_spec.rb"},{"name":"#cancel store credit event found creates a store credit for the same amount that was captured","suite":"Spree::PaymentMethod::StoreCredit at ./spec/models/spree/payment_method/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_method/store_credit_spec.rb"},{"name":"#cancel store credit event found returns a valid store credit cancel request","suite":"Spree::PaymentMethod::StoreCredit at ./spec/models/spree/payment_method/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1:2\"}}","suiteSourceFile":"core/spec/models/spree/payment_method/store_credit_spec.rb"},{"name":"#cancel store credit event not found returns an error response","suite":"Spree::PaymentMethod::StoreCredit at ./spec/models/spree/payment_method/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_method/store_credit_spec.rb"},{"name":"#available_for_order? when user have store credits example at ./spec/models/spree/payment_method/store_credit_spec.rb:302","suite":"Spree::PaymentMethod::StoreCredit at ./spec/models/spree/payment_method/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_method/store_credit_spec.rb"},{"name":"#available_for_order? when user don't store credits example at ./spec/models/spree/payment_method/store_credit_spec.rb:309","suite":"Spree::PaymentMethod::StoreCredit at ./spec/models/spree/payment_method/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_method/store_credit_spec.rb"},{"name":"#available_for_order? when order has a gift card example at ./spec/models/spree/payment_method/store_credit_spec.rb:316","suite":"Spree::PaymentMethod::StoreCredit at ./spec/models/spree/payment_method/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:3:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_method/store_credit_spec.rb"},{"name":"#source_required? example at ./spec/models/spree/payment_method/store_credit_spec.rb:323","suite":"Spree::PaymentMethod::StoreCredit at ./spec/models/spree/payment_method/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_method/store_credit_spec.rb"},{"name":"#payment_source_class example at ./spec/models/spree/payment_method/store_credit_spec.rb:329","suite":"Spree::PaymentMethod::StoreCredit at ./spec/models/spree/payment_method/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_method/store_credit_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:4","suite":"Spree::PaymentMethod at ./spec/models/spree/payment_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_method_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:5","suite":"Spree::PaymentMethod at ./spec/models/spree/payment_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/payment_method_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:7","suite":"Spree::PaymentMethod at ./spec/models/spree/payment_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/models/spree/payment_method_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:8","suite":"Spree::PaymentMethod at ./spec/models/spree/payment_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","suiteSourceFile":"core/spec/models/spree/payment_method_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:10","suite":"Spree::PaymentMethod at ./spec/models/spree/payment_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","suiteSourceFile":"core/spec/models/spree/payment_method_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:11","suite":"Spree::PaymentMethod at ./spec/models/spree/payment_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","suiteSourceFile":"core/spec/models/spree/payment_method_spec.rb"},{"name":"behaves like metadata reads data as symbolized keys","suite":"Spree::PaymentMethod at ./spec/models/spree/payment_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7\"}}","suiteSourceFile":"core/spec/models/spree/payment_method_spec.rb"},{"name":"behaves like metadata reads data as not symbolized keys","suite":"Spree::PaymentMethod at ./spec/models/spree/payment_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8\"}}","suiteSourceFile":"core/spec/models/spree/payment_method_spec.rb"},{"name":"behaves like metadata can query records by metadata properties","suite":"Spree::PaymentMethod at ./spec/models/spree/payment_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:10\"}}","suiteSourceFile":"core/spec/models/spree/payment_method_spec.rb"},{"name":"visibility scopes has 5 total methods","suite":"Spree::PaymentMethod at ./spec/models/spree/payment_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_method_spec.rb"},{"name":"visibility scopes #available returns all methods available to front-end/back-end","suite":"Spree::PaymentMethod at ./spec/models/spree/payment_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_method_spec.rb"},{"name":"visibility scopes #available_on_front_end returns all methods available to front-end","suite":"Spree::PaymentMethod at ./spec/models/spree/payment_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_method_spec.rb"},{"name":"visibility scopes #available_on_back_end returns all methods available to back-end","suite":"Spree::PaymentMethod at ./spec/models/spree/payment_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:4:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_method_spec.rb"},{"name":"visibility scopes #for_store returns all methods available to front-end/back-end for a store","suite":"Spree::PaymentMethod at ./spec/models/spree/payment_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:5:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_method_spec.rb"},{"name":"#auto_capture? when auto_capture is nil and when Spree::Config[:auto_capture] is false is false","suite":"Spree::PaymentMethod at ./spec/models/spree/payment_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_method_spec.rb"},{"name":"#auto_capture? when auto_capture is nil and when Spree::Config[:auto_capture] is true is true","suite":"Spree::PaymentMethod at ./spec/models/spree/payment_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_method_spec.rb"},{"name":"#auto_capture? when auto_capture is not nil and is true is true","suite":"Spree::PaymentMethod at ./spec/models/spree/payment_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_method_spec.rb"},{"name":"#auto_capture? when auto_capture is not nil and is false is true","suite":"Spree::PaymentMethod at ./spec/models/spree/payment_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_method_spec.rb"},{"name":"#available_for_order? when the order is not covered by store credit example at ./spec/models/spree/payment_method_spec.rb:136","suite":"Spree::PaymentMethod at ./spec/models/spree/payment_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_method_spec.rb"},{"name":"#available_for_order? when the order is partially covered by store credit example at ./spec/models/spree/payment_method_spec.rb:142","suite":"Spree::PaymentMethod at ./spec/models/spree/payment_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_method_spec.rb"},{"name":"#available_for_order? when the order is fully covered by store credit example at ./spec/models/spree/payment_method_spec.rb:148","suite":"Spree::PaymentMethod at ./spec/models/spree/payment_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_method_spec.rb"},{"name":"#available_for_store? returns true when passed a nil value","suite":"Spree::PaymentMethod at ./spec/models/spree/payment_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_method_spec.rb"},{"name":"#available_for_store? returns false if currenct store id is not included","suite":"Spree::PaymentMethod at ./spec/models/spree/payment_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2\"}}","suiteSourceFile":"core/spec/models/spree/payment_method_spec.rb"},{"name":"#available_for_store? returns true if currenct store id is included","suite":"Spree::PaymentMethod at ./spec/models/spree/payment_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3\"}}","suiteSourceFile":"core/spec/models/spree/payment_method_spec.rb"},{"name":"#source_required? example at ./spec/models/spree/payment_method_spec.rb:175","suite":"Spree::PaymentMethod at ./spec/models/spree/payment_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_method_spec.rb"},{"name":"#payment_source_class example at ./spec/models/spree/payment_method_spec.rb:181","suite":"Spree::PaymentMethod at ./spec/models/spree/payment_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_method_spec.rb"},{"name":"#payment_icon_name example at ./spec/models/spree/payment_method_spec.rb:185","suite":"Spree::PaymentMethod at ./spec/models/spree/payment_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_method_spec.rb"},{"name":"when payment method is destroyed destroys the payment method","suite":"Spree::PaymentMethod at ./spec/models/spree/payment_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_method_spec.rb"},{"name":"#gateway_customer when user is present returns the gateway customer for the user","suite":"Spree::PaymentSource at ./spec/models/spree/payment_source_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_source_spec.rb"},{"name":"#gateway_customer when user is not present returns nil","suite":"Spree::PaymentSource at ./spec/models/spree/payment_source_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_source_spec.rb"},{"name":"behaves like lifecycle events lifecycle events payment.created publishes created event when record is created","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"behaves like lifecycle events lifecycle events payment.updated publishes updated event when record is updated","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"behaves like lifecycle events lifecycle events payment.deleted publishes deleted event when record is deleted","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:4","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:5","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:7","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:8","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:4\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:10","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:5\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:11","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:6\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"behaves like metadata reads data as symbolized keys","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:7\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"behaves like metadata reads data as not symbolized keys","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:8\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"behaves like metadata can query records by metadata properties","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:10\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"Constants example at ./spec/models/spree/payment_spec.rb:55","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"Scopes .valid example at ./spec/models/spree/payment_spec.rb:78","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"Scopes .valid example at ./spec/models/spree/payment_spec.rb:79","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:2\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"Scopes .valid example at ./spec/models/spree/payment_spec.rb:80","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:3\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"Scopes .valid example at ./spec/models/spree/payment_spec.rb:81","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:4\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"after_initialize :set_amount when associated with an order sets the amount to the order total minus the payment total","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"after_initialize :set_amount when associated with an order when the amount is already set does not set the amount","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"after_initialize :set_amount when not associated with an order does not set the amount","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":".risky does not return successful responses","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"#captured_amount calculates based on capture events with 0 capture events","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"#captured_amount calculates based on capture events with some capture events","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1:2\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"#uncaptured_amount calculates based on capture events with 0 capture events","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"#uncaptured_amount calculates based on capture events with some capture events","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1:2\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"Validations returns useful error messages when source is invalid","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:3\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"Validations when payment source is not required do not validate source presence","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"Validations with payment source required validate source presence","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:2:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"Validations with payment source required when skip_source_requirement is set to true does not validate source presence","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"Validations amount validation with an associated order when the amount is greater than the max amount is invalid","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:4:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"Validations amount validation with an associated order when the amount is less than the max amount example at ./spec/models/spree/payment_spec.rb:211","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:4:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"Callbacks #update_order when destroying completed payment updates the order","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"Callbacks #update_order when voiding a payment updates the order","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"Callbacks #create_payment_profile when payment method supports profiles when source is a credit card creates a payment profile","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:2:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"Callbacks #create_payment_profile when payment method supports profiles when source is not a credit card creates a payment profile","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:2:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"failure transitions to failed from pending state","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"failure transitions to failed from processing state","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"invalidate transitions from checkout to invalid","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"processing #process! purchases if with auto_capture","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:1:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"processing #process! authorizes without auto_capture","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:1:2\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"processing #process! makes the state 'processing'","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:1:3\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"processing #process! invalidates if payment method doesnt support source","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:1:4\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"processing #process! allows payments with a gateway_customer_profile_id","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:1:5\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"processing #process! allows payments with a gateway_payment_profile_id","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:1:6\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"processing #authorize! calls authorize on the gateway with the payment amount","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:2:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"processing #authorize! calls authorize on the gateway with the currency code","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:2:2\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"processing #authorize! logs the response","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:2:3\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"processing #authorize! if successful stores the response_code, avs_response and cvv_response fields","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:2:4:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"processing #authorize! if successful makes payment pending","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:2:4:2\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"processing #authorize! if unsuccessful when response is returned from gateway marks payment as failed","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:2:5:1:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"processing #authorize! if unsuccessful when there is an error connecting to the gateway raises ActiveMerchant::ConnectionError and marks payment as failed","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:2:5:2:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"processing #purchase! calls purchase on the gateway with the payment amount","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:3:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"processing #purchase! logs the response","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:3:2\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"processing #purchase! if successful stores the response_code and avs_response","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:3:3:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"processing #purchase! if successful makes payment complete","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:3:3:2\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"processing #purchase! if successful logs a capture event","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:3:3:3\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"processing #purchase! if successful sets the uncaptured amount to 0","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:3:3:4\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"processing #purchase! if unsuccessful when response is returned from gateway makes payment failed","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:3:4:1:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"processing #purchase! if unsuccessful when response is returned from gateway does not log a capture event","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:3:4:1:2\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"processing #purchase! if unsuccessful when there is an error connecting to the gateway raises ActiveMerchant::ConnectionError and marks payment as failed","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:3:4:2:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"processing #confirm! for automatically captured payments makes the payment complete","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:4:1:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"processing #confirm! for automatically captured payments logs a capture event","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:4:1:2\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"processing #confirm! for automatically captured payments when payment is already completed keeps the payment completed","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:4:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"processing #confirm! for automatically captured payments when payment is already completed does not log a duplicated capture event","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:4:1:3:2\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"processing #confirm! for manually captured payments makes the payment pending","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:4:2:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"processing #confirm! for manually captured payments when payment is already pending keeps the payment pending","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:4:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"processing #capture! when payment is pending if successful for entire amount makes payment complete","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:5:1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"processing #capture! when payment is pending if successful for entire amount logs capture events","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:5:1:1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"processing #capture! when payment is pending if successful for partial amount makes payment complete & create pending payment for remaining amount","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:5:1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"processing #capture! when payment is pending if successful for partial amount logs capture events","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:5:1:1:2:2\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"processing #capture! when payment is pending if unsuccessful when response is returned from gateway does not make payment complete","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:5:1:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"processing #capture! when payment is pending if unsuccessful when there is an error connecting to the gateway raises ActiveMerchant::ConnectionError and marks payment as failed","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:5:1:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"processing #capture! when payment is completed does nothing","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:5:2:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"processing #void_transaction! logs the response","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:6:3\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"processing #void_transaction! when profiles are supported calls payment_gateway.void with the payment's response_code","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:6:1:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"processing #void_transaction! when profiles are not supported calls payment_gateway.void with the payment's response_code","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:6:2:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"processing #void_transaction! if successful updates the response_code with the authorization from the gateway","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:6:4:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"processing #void_transaction! if unsuccessful when response is returned from gateway does not void the payment","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:6:5:1:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"processing #void_transaction! if unsuccessful when there is an error connecting to the gateway raises ActiveMerchant::ConnectionError and marks payment as failed","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:6:5:2:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"processing #void_transaction! if payment is already voided does not void the payment","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:6:6:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"processing #void_transaction! if response_code is blank voids the payment without calling the gateway","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:6:7:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"when already processing returns nil without trying to process the source","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"with source required raises an error if no source is specified example at ./spec/models/spree/payment_spec.rb:727","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:1:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"with source optional raises no error if source is not specified example at ./spec/models/spree/payment_spec.rb:740","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:1:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"#credit_allowed is the difference between offsets total and payment amount","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:17:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"#can_credit? is true if credit_allowed > 0","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"#can_credit? is false if credit_allowed is 0","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:2\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"#save captured payments update order payment total","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:1:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"#save not completed payments doesn't update order payment total","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:2:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"#save not completed payments requires a payment method","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:2:2\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"#save when the payment was completed but now void updates order payment total","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:3:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"#save completed orders updates payment_state and shipments","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:4:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"#save when profiles are supported when there is an error connecting to the gateway calls gateway_error","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:5:1:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"#save when profiles are supported with multiple payment attempts does not try to create profiles on old failed payment attempts","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:5:2:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"#save when profiles are supported when successfully connecting to the gateway creates a payment profile","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:5:3:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"#save when profiles are not supported does not create a payment profile","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:6:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"#build_source builds the payment's source","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:20:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"#build_source assigns user and gateway to payment source","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:20:2\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"#build_source errors when payment source not valid","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:20:3\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"#build_source does not build a new source when duplicating the model with source_attributes set","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:20:4\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"#build_source existing card assigns the existing card","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:20:5:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"#currency returns the order currency","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:21:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"#display_amount returns a Spree::Money for this amount","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:22:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"#gateway_options contains an IP","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:23:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"#gateway_options contains the email address from a persisted order","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:23:2\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"#amount= when the amount is a string amount is a decimal #amount","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:24:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"#amount= when the amount is a string amount is an integer #amount","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:24:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"#amount= when the amount is a string amount contains a dollar sign #amount","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:24:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"#amount= when the amount is a string amount contains a comma #amount","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:24:1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"#amount= when the amount is a string amount contains a negative sign #amount","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:24:1:5:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"#amount= when the amount is a string amount is invalid #amount","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:24:1:6:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"#amount= when the amount is a string amount is an empty string #amount","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:24:1:7:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"#amount= when the amount is a number #amount","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:24:2:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"#amount= when the locale uses a coma as a decimal separator amount is a decimal #amount","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:24:3:1:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"#amount= when the locale uses a coma as a decimal separator amount contains a $ sign #amount","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:24:3:2:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"#amount= when the locale uses a coma as a decimal separator amount is a number #amount","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:24:3:3:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"#amount= when the locale uses a coma as a decimal separator amount contains a negative sign #amount","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:24:3:4:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"#amount= when the locale uses a coma as a decimal separator amount uses a dot as a decimal separator #amount","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:24:3:5:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"is_avs_risky? returns false if avs_response included in NON_RISKY_AVS_CODES","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:25:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"is_avs_risky? returns false if avs_response.blank?","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:25:2\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"is_avs_risky? returns true if avs_response in RISKY_AVS_CODES","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:25:3\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"is_cvv_risky? returns false if cvv_response_code == 'M'","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:26:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"is_cvv_risky? returns false if cvv_response_code == nil","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:26:2\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"is_cvv_risky? returns false if cvv_response_message == ''","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:26:3\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"is_cvv_risky? returns true if cvv_response_code == [A-Z], omitting D","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:26:4\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"#editable? when the state is 'checkout' example at ./spec/models/spree/payment_spec.rb:1164","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:27:1:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"#editable? when the state is 'pending' example at ./spec/models/spree/payment_spec.rb:1170","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:27:2:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"#editable? when the state is 'processing' example at ./spec/models/spree/payment_spec.rb:1177","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:27:3:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"#editable? when the state is 'completed' example at ./spec/models/spree/payment_spec.rb:1177","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:27:4:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"#editable? when the state is 'failed' example at ./spec/models/spree/payment_spec.rb:1177","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:27:5:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"#editable? when the state is 'void' example at ./spec/models/spree/payment_spec.rb:1177","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:27:6:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"#editable? when the state is 'invalid' example at ./spec/models/spree/payment_spec.rb:1177","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:27:7:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"state changes are logged to the database","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:28:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"#source with source required enabled example at ./spec/models/spree/payment_spec.rb:1207","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:1:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"#source with source required enabled example at ./spec/models/spree/payment_spec.rb:1208","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:1:2\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"#source with source required enabled when credit card is removed example at ./spec/models/spree/payment_spec.rb:1216","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"#source with source required enabled when credit card is removed example at ./spec/models/spree/payment_spec.rb:1217","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:1:3:2\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"#source with source required disabled example at ./spec/models/spree/payment_spec.rb:1224","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:2:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"#display_source_name for source with display_name returns the display name of the source class","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:30:1:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"#display_source_name for source without display_name returns the display name of the source class","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:30:2:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"#gateway_dashboard_payment_url returns nil","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:31:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"#gateway_dashboard_payment_url when implemented returns the url","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:31:2:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"#add_gateway_processing_error adds a gateway processing error","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:32:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"#add_gateway_processing_error when the metafield already exists adds a gateway processing error","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:32:2:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"#has_invalid_state? when the state is invalid example at ./spec/models/spree/payment_spec.rb:1306","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:33:1:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"#has_invalid_state? when the state is valid example at ./spec/models/spree/payment_spec.rb:1312","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:33:2:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"#gateway_processing_error_messages returns the gateway processing error messages","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:34:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"events completed state transition publishes payment.completed event","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:35:1:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"events voided state transition publishes payment.voided event","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:35:2:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"role-based permissions user with single role applies the permission sets for the role","suite":"Permission Sets Integration with Ability at ./spec/models/spree/permission_sets/ability_integration_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/ability_integration_spec.rb"},{"name":"role-based permissions user with multiple roles combines permission sets from all roles","suite":"Permission Sets Integration with Ability at ./spec/models/spree/permission_sets/ability_integration_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/ability_integration_spec.rb"},{"name":"role-based permissions user with unconfigured role falls back to legacy behavior","suite":"Permission Sets Integration with Ability at ./spec/models/spree/permission_sets/ability_integration_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/ability_integration_spec.rb"},{"name":"default role applies default permissions to non-persisted users","suite":"Permission Sets Integration with Ability at ./spec/models/spree/permission_sets/ability_integration_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/ability_integration_spec.rb"},{"name":"admin role applies super user permissions to admin users","suite":"Permission Sets Integration with Ability at ./spec/models/spree/permission_sets/ability_integration_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/ability_integration_spec.rb"},{"name":"permission configuration API allows configuring permissions like Solidus","suite":"Permission Sets Integration with Ability at ./spec/models/spree/permission_sets/ability_integration_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/ability_integration_spec.rb"},{"name":"permission configuration API allows clearing permissions from a role","suite":"Permission Sets Integration with Ability at ./spec/models/spree/permission_sets/ability_integration_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/ability_integration_spec.rb"},{"name":"#initialize stores the ability","suite":"Spree::PermissionSets::Base at ./spec/models/spree/permission_sets/base_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/base_spec.rb"},{"name":"#activate! raises NotImplementedError","suite":"Spree::PermissionSets::Base at ./spec/models/spree/permission_sets/base_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/base_spec.rb"},{"name":"delegation methods #can delegates to ability","suite":"Spree::PermissionSets::Base at ./spec/models/spree/permission_sets/base_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/base_spec.rb"},{"name":"delegation methods #cannot delegates to ability","suite":"Spree::PermissionSets::Base at ./spec/models/spree/permission_sets/base_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/base_spec.rb"},{"name":"delegation methods #can? delegates to ability","suite":"Spree::PermissionSets::Base at ./spec/models/spree/permission_sets/base_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3:1\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/base_spec.rb"},{"name":"delegation methods #user returns the user from the ability","suite":"Spree::PermissionSets::Base at ./spec/models/spree/permission_sets/base_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4:1\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/base_spec.rb"},{"name":"delegation methods #store returns the store from the ability","suite":"Spree::PermissionSets::Base at ./spec/models/spree/permission_sets/base_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:5:1\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/base_spec.rb"},{"name":"#activate! catalog read access grants read access to Country","suite":"Spree::PermissionSets::DefaultCustomer at ./spec/models/spree/permission_sets/default_customer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/default_customer_spec.rb"},{"name":"#activate! catalog read access grants read access to Product","suite":"Spree::PermissionSets::DefaultCustomer at ./spec/models/spree/permission_sets/default_customer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/default_customer_spec.rb"},{"name":"#activate! catalog read access grants read access to Variant","suite":"Spree::PermissionSets::DefaultCustomer at ./spec/models/spree/permission_sets/default_customer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/default_customer_spec.rb"},{"name":"#activate! catalog read access grants read access to Taxon","suite":"Spree::PermissionSets::DefaultCustomer at ./spec/models/spree/permission_sets/default_customer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:4\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/default_customer_spec.rb"},{"name":"#activate! catalog read access grants read access to Store","suite":"Spree::PermissionSets::DefaultCustomer at ./spec/models/spree/permission_sets/default_customer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:5\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/default_customer_spec.rb"},{"name":"#activate! order permissions allows creating orders","suite":"Spree::PermissionSets::DefaultCustomer at ./spec/models/spree/permission_sets/default_customer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/default_customer_spec.rb"},{"name":"#activate! order permissions with user order allows viewing own order","suite":"Spree::PermissionSets::DefaultCustomer at ./spec/models/spree/permission_sets/default_customer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/default_customer_spec.rb"},{"name":"#activate! order permissions with user order allows updating own incomplete order","suite":"Spree::PermissionSets::DefaultCustomer at ./spec/models/spree/permission_sets/default_customer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:2\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/default_customer_spec.rb"},{"name":"#activate! order permissions with user order prevents updating own completed order","suite":"Spree::PermissionSets::DefaultCustomer at ./spec/models/spree/permission_sets/default_customer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:3\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/default_customer_spec.rb"},{"name":"#activate! order permissions with token allows viewing order with correct token","suite":"Spree::PermissionSets::DefaultCustomer at ./spec/models/spree/permission_sets/default_customer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:3:1\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/default_customer_spec.rb"},{"name":"#activate! order permissions with token allows updating incomplete order with correct token","suite":"Spree::PermissionSets::DefaultCustomer at ./spec/models/spree/permission_sets/default_customer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:3:2\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/default_customer_spec.rb"},{"name":"#activate! order permissions with token prevents viewing order with incorrect token","suite":"Spree::PermissionSets::DefaultCustomer at ./spec/models/spree/permission_sets/default_customer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:3:3\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/default_customer_spec.rb"},{"name":"#activate! user account permissions allows viewing own user","suite":"Spree::PermissionSets::DefaultCustomer at ./spec/models/spree/permission_sets/default_customer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/default_customer_spec.rb"},{"name":"#activate! user account permissions allows updating own user","suite":"Spree::PermissionSets::DefaultCustomer at ./spec/models/spree/permission_sets/default_customer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:2\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/default_customer_spec.rb"},{"name":"#activate! user account permissions allows destroying own user","suite":"Spree::PermissionSets::DefaultCustomer at ./spec/models/spree/permission_sets/default_customer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:3\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/default_customer_spec.rb"},{"name":"#activate! user account permissions prevents viewing other user","suite":"Spree::PermissionSets::DefaultCustomer at ./spec/models/spree/permission_sets/default_customer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:4\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/default_customer_spec.rb"},{"name":"#activate! user account permissions allows creating new user","suite":"Spree::PermissionSets::DefaultCustomer at ./spec/models/spree/permission_sets/default_customer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:5\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/default_customer_spec.rb"},{"name":"#activate! with non-persisted user allows viewing self","suite":"Spree::PermissionSets::DefaultCustomer at ./spec/models/spree/permission_sets/default_customer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/default_customer_spec.rb"},{"name":"#activate! with non-persisted user allows updating self","suite":"Spree::PermissionSets::DefaultCustomer at ./spec/models/spree/permission_sets/default_customer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:2\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/default_customer_spec.rb"},{"name":"#activate! address permissions allows managing own address","suite":"Spree::PermissionSets::DefaultCustomer at ./spec/models/spree/permission_sets/default_customer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5:1\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/default_customer_spec.rb"},{"name":"#activate! address permissions prevents managing other user address","suite":"Spree::PermissionSets::DefaultCustomer at ./spec/models/spree/permission_sets/default_customer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5:2\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/default_customer_spec.rb"},{"name":"#activate! address permissions with guest user (non-persisted) prevents guest user from managing addresses with nil user_id (IDOR protection)","suite":"Spree::PermissionSets::DefaultCustomer at ./spec/models/spree/permission_sets/default_customer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5:3:1\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/default_customer_spec.rb"},{"name":"#activate! address permissions with guest user (non-persisted) prevents guest user from editing other guest addresses (IDOR protection)","suite":"Spree::PermissionSets::DefaultCustomer at ./spec/models/spree/permission_sets/default_customer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5:3:2\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/default_customer_spec.rb"},{"name":"#activate! address permissions with guest user (non-persisted) prevents guest user from updating other guest addresses (IDOR protection)","suite":"Spree::PermissionSets::DefaultCustomer at ./spec/models/spree/permission_sets/default_customer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5:3:3\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/default_customer_spec.rb"},{"name":"#activate! address permissions with guest user (non-persisted) prevents guest user from reading other guest addresses (IDOR protection)","suite":"Spree::PermissionSets::DefaultCustomer at ./spec/models/spree/permission_sets/default_customer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5:3:4\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/default_customer_spec.rb"},{"name":"#activate! credit card permissions allows reading own credit card","suite":"Spree::PermissionSets::DefaultCustomer at ./spec/models/spree/permission_sets/default_customer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6:1\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/default_customer_spec.rb"},{"name":"#activate! credit card permissions allows destroying own credit card","suite":"Spree::PermissionSets::DefaultCustomer at ./spec/models/spree/permission_sets/default_customer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6:2\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/default_customer_spec.rb"},{"name":"#activate! credit card permissions prevents reading other user credit card","suite":"Spree::PermissionSets::DefaultCustomer at ./spec/models/spree/permission_sets/default_customer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6:3\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/default_customer_spec.rb"},{"name":"#activate! wishlist permissions allows managing own wishlist","suite":"Spree::PermissionSets::DefaultCustomer at ./spec/models/spree/permission_sets/default_customer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7:1\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/default_customer_spec.rb"},{"name":"#activate! wishlist permissions allows viewing public wishlist","suite":"Spree::PermissionSets::DefaultCustomer at ./spec/models/spree/permission_sets/default_customer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7:2\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/default_customer_spec.rb"},{"name":"#activate! wishlist permissions prevents viewing private wishlist","suite":"Spree::PermissionSets::DefaultCustomer at ./spec/models/spree/permission_sets/default_customer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7:3\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/default_customer_spec.rb"},{"name":"#activate! admin permissions does not grant admin access","suite":"Spree::PermissionSets::DefaultCustomer at ./spec/models/spree/permission_sets/default_customer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8:1\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/default_customer_spec.rb"},{"name":"#activate! admin permissions does not grant manage access to Product","suite":"Spree::PermissionSets::DefaultCustomer at ./spec/models/spree/permission_sets/default_customer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8:2\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/default_customer_spec.rb"},{"name":"#activate! grants manage access to Order","suite":"Spree::PermissionSets::OrderManagement at ./spec/models/spree/permission_sets/order_management_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/order_management_spec.rb"},{"name":"#activate! grants manage access to Payment","suite":"Spree::PermissionSets::OrderManagement at ./spec/models/spree/permission_sets/order_management_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/order_management_spec.rb"},{"name":"#activate! grants manage access to Shipment","suite":"Spree::PermissionSets::OrderManagement at ./spec/models/spree/permission_sets/order_management_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/order_management_spec.rb"},{"name":"#activate! grants manage access to Adjustment","suite":"Spree::PermissionSets::OrderManagement at ./spec/models/spree/permission_sets/order_management_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/order_management_spec.rb"},{"name":"#activate! grants manage access to LineItem","suite":"Spree::PermissionSets::OrderManagement at ./spec/models/spree/permission_sets/order_management_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/order_management_spec.rb"},{"name":"#activate! grants manage access to ReturnAuthorization","suite":"Spree::PermissionSets::OrderManagement at ./spec/models/spree/permission_sets/order_management_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/order_management_spec.rb"},{"name":"#activate! grants manage access to CustomerReturn","suite":"Spree::PermissionSets::OrderManagement at ./spec/models/spree/permission_sets/order_management_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/order_management_spec.rb"},{"name":"#activate! grants manage access to Reimbursement","suite":"Spree::PermissionSets::OrderManagement at ./spec/models/spree/permission_sets/order_management_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/order_management_spec.rb"},{"name":"#activate! grants manage access to Refund","suite":"Spree::PermissionSets::OrderManagement at ./spec/models/spree/permission_sets/order_management_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:9\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/order_management_spec.rb"},{"name":"#activate! does not grant manage access to Product","suite":"Spree::PermissionSets::OrderManagement at ./spec/models/spree/permission_sets/order_management_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:10\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/order_management_spec.rb"},{"name":"#activate! order restrictions allows canceling orders that allow cancellation","suite":"Spree::PermissionSets::OrderManagement at ./spec/models/spree/permission_sets/order_management_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:11:1\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/order_management_spec.rb"},{"name":"#activate! order restrictions prevents canceling orders that do not allow cancellation","suite":"Spree::PermissionSets::OrderManagement at ./spec/models/spree/permission_sets/order_management_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:11:2\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/order_management_spec.rb"},{"name":"#activate! order restrictions allows destroying orders that can be deleted","suite":"Spree::PermissionSets::OrderManagement at ./spec/models/spree/permission_sets/order_management_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:11:3\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/order_management_spec.rb"},{"name":"#activate! order restrictions prevents destroying orders that cannot be deleted","suite":"Spree::PermissionSets::OrderManagement at ./spec/models/spree/permission_sets/order_management_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:11:4\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/order_management_spec.rb"},{"name":"#activate! grants manage access to Product","suite":"Spree::PermissionSets::ProductManagement at ./spec/models/spree/permission_sets/product_management_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/product_management_spec.rb"},{"name":"#activate! grants manage access to Variant","suite":"Spree::PermissionSets::ProductManagement at ./spec/models/spree/permission_sets/product_management_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/product_management_spec.rb"},{"name":"#activate! grants manage access to OptionType","suite":"Spree::PermissionSets::ProductManagement at ./spec/models/spree/permission_sets/product_management_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/product_management_spec.rb"},{"name":"#activate! grants manage access to OptionValue","suite":"Spree::PermissionSets::ProductManagement at ./spec/models/spree/permission_sets/product_management_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/product_management_spec.rb"},{"name":"#activate! grants manage access to Property","suite":"Spree::PermissionSets::ProductManagement at ./spec/models/spree/permission_sets/product_management_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/product_management_spec.rb"},{"name":"#activate! grants manage access to ProductProperty","suite":"Spree::PermissionSets::ProductManagement at ./spec/models/spree/permission_sets/product_management_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/product_management_spec.rb"},{"name":"#activate! grants manage access to Taxon","suite":"Spree::PermissionSets::ProductManagement at ./spec/models/spree/permission_sets/product_management_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/product_management_spec.rb"},{"name":"#activate! grants manage access to Taxonomy","suite":"Spree::PermissionSets::ProductManagement at ./spec/models/spree/permission_sets/product_management_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/product_management_spec.rb"},{"name":"#activate! grants manage access to Classification","suite":"Spree::PermissionSets::ProductManagement at ./spec/models/spree/permission_sets/product_management_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:9\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/product_management_spec.rb"},{"name":"#activate! grants manage access to Price","suite":"Spree::PermissionSets::ProductManagement at ./spec/models/spree/permission_sets/product_management_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:10\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/product_management_spec.rb"},{"name":"#activate! does not grant manage access to Order","suite":"Spree::PermissionSets::ProductManagement at ./spec/models/spree/permission_sets/product_management_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:11\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/product_management_spec.rb"},{"name":"#activate! does not grant manage access to User","suite":"Spree::PermissionSets::ProductManagement at ./spec/models/spree/permission_sets/product_management_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:12\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/product_management_spec.rb"},{"name":"#activate! grants manage access to all resources","suite":"Spree::PermissionSets::SuperUser at ./spec/models/spree/permission_sets/super_user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/super_user_spec.rb"},{"name":"#activate! grants manage access to Order","suite":"Spree::PermissionSets::SuperUser at ./spec/models/spree/permission_sets/super_user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/super_user_spec.rb"},{"name":"#activate! grants manage access to Product","suite":"Spree::PermissionSets::SuperUser at ./spec/models/spree/permission_sets/super_user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/super_user_spec.rb"},{"name":"#activate! order restrictions allows canceling orders that allow cancellation","suite":"Spree::PermissionSets::SuperUser at ./spec/models/spree/permission_sets/super_user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/super_user_spec.rb"},{"name":"#activate! order restrictions prevents canceling orders that do not allow cancellation","suite":"Spree::PermissionSets::SuperUser at ./spec/models/spree/permission_sets/super_user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:2\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/super_user_spec.rb"},{"name":"#activate! order restrictions allows destroying orders that can be deleted","suite":"Spree::PermissionSets::SuperUser at ./spec/models/spree/permission_sets/super_user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:3\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/super_user_spec.rb"},{"name":"#activate! order restrictions prevents destroying orders that cannot be deleted","suite":"Spree::PermissionSets::SuperUser at ./spec/models/spree/permission_sets/super_user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:4\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/super_user_spec.rb"},{"name":"#activate! immutable types allows editing mutable refund reasons","suite":"Spree::PermissionSets::SuperUser at ./spec/models/spree/permission_sets/super_user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5:1\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/super_user_spec.rb"},{"name":"#activate! immutable types prevents editing immutable refund reasons","suite":"Spree::PermissionSets::SuperUser at ./spec/models/spree/permission_sets/super_user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5:2\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/super_user_spec.rb"},{"name":"#activate! admin role protection prevents updating the admin role","suite":"Spree::PermissionSets::SuperUser at ./spec/models/spree/permission_sets/super_user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6:1\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/super_user_spec.rb"},{"name":"#activate! admin role protection prevents destroying the admin role","suite":"Spree::PermissionSets::SuperUser at ./spec/models/spree/permission_sets/super_user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6:2\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/super_user_spec.rb"},{"name":"#activate! admin role protection allows updating other roles","suite":"Spree::PermissionSets::SuperUser at ./spec/models/spree/permission_sets/super_user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6:3\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/super_user_spec.rb"},{"name":"#activate! admin role protection allows destroying other roles","suite":"Spree::PermissionSets::SuperUser at ./spec/models/spree/permission_sets/super_user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6:4\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/super_user_spec.rb"},{"name":"Validations slug uniqueness allows same slug for different stores","suite":"Spree::Policy at ./spec/models/spree/policy_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/policy_spec.rb"},{"name":"Validations owner presence is invalid without an owner","suite":"Spree::Policy at ./spec/models/spree/policy_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/policy_spec.rb"},{"name":"friendly_id generates friendly URLs from slug","suite":"Spree::Policy at ./spec/models/spree/policy_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/policy_spec.rb"},{"name":"friendly_id maintains slug history","suite":"Spree::Policy at ./spec/models/spree/policy_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","suiteSourceFile":"core/spec/models/spree/policy_spec.rb"},{"name":"friendly_id when the policy is destroyed fully destroys the slug","suite":"Spree::Policy at ./spec/models/spree/policy_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:1\"}}","suiteSourceFile":"core/spec/models/spree/policy_spec.rb"},{"name":"Translations has translatable name field","suite":"Spree::Policy at ./spec/models/spree/policy_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/policy_spec.rb"},{"name":"Translations supports translations for name","suite":"Spree::Policy at ./spec/models/spree/policy_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","suiteSourceFile":"core/spec/models/spree/policy_spec.rb"},{"name":"Translations when always_use_translations is enabled allows creating policies with translations","suite":"Spree::Policy at ./spec/models/spree/policy_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3:1\"}}","suiteSourceFile":"core/spec/models/spree/policy_spec.rb"},{"name":"Scopes .for_store returns policies for specific store","suite":"Spree::Policy at ./spec/models/spree/policy_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1\"}}","suiteSourceFile":"core/spec/models/spree/policy_spec.rb"},{"name":"Scopes .for_store for policies with a different owner type returns policies for the store and the user policy","suite":"Spree::Policy at ./spec/models/spree/policy_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/policy_spec.rb"},{"name":"Scopes .with_matching_name finds policy by exact name match (case insensitive)","suite":"Spree::Policy at ./spec/models/spree/policy_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1\"}}","suiteSourceFile":"core/spec/models/spree/policy_spec.rb"},{"name":"Scopes .with_matching_name does not find policy with partial match","suite":"Spree::Policy at ./spec/models/spree/policy_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:2\"}}","suiteSourceFile":"core/spec/models/spree/policy_spec.rb"},{"name":"Scopes .with_matching_name strips whitespace from search term","suite":"Spree::Policy at ./spec/models/spree/policy_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:3\"}}","suiteSourceFile":"core/spec/models/spree/policy_spec.rb"},{"name":"Scopes .with_matching_name returns empty when no match found","suite":"Spree::Policy at ./spec/models/spree/policy_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:4\"}}","suiteSourceFile":"core/spec/models/spree/policy_spec.rb"},{"name":"behaves like lifecycle events lifecycle events post_category.created publishes created event when record is created","suite":"Spree::PostCategory at ./spec/models/spree/post_category_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/post_category_spec.rb"},{"name":"behaves like lifecycle events lifecycle events post_category.updated publishes updated event when record is updated","suite":"Spree::PostCategory at ./spec/models/spree/post_category_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/post_category_spec.rb"},{"name":"behaves like lifecycle events lifecycle events post_category.deleted publishes deleted event when record is deleted","suite":"Spree::PostCategory at ./spec/models/spree/post_category_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/post_category_spec.rb"},{"name":"Associations posts has many posts","suite":"Spree::PostCategory at ./spec/models/spree/post_category_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/post_category_spec.rb"},{"name":"Associations posts nullifies posts when destroyed","suite":"Spree::PostCategory at ./spec/models/spree/post_category_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:2\"}}","suiteSourceFile":"core/spec/models/spree/post_category_spec.rb"},{"name":"FriendlyId #should_generate_new_friendly_id? returns true when slug is blank","suite":"Spree::PostCategory at ./spec/models/spree/post_category_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","suiteSourceFile":"core/spec/models/spree/post_category_spec.rb"},{"name":"FriendlyId #should_generate_new_friendly_id? returns true when title has changed","suite":"Spree::PostCategory at ./spec/models/spree/post_category_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:2\"}}","suiteSourceFile":"core/spec/models/spree/post_category_spec.rb"},{"name":"FriendlyId #should_generate_new_friendly_id? returns false when slug is present and title unchanged","suite":"Spree::PostCategory at ./spec/models/spree/post_category_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:3\"}}","suiteSourceFile":"core/spec/models/spree/post_category_spec.rb"},{"name":"FriendlyId #slug_candidates returns correct slug candidates","suite":"Spree::PostCategory at ./spec/models/spree/post_category_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","suiteSourceFile":"core/spec/models/spree/post_category_spec.rb"},{"name":"behaves like lifecycle events lifecycle events post.created publishes created event when record is created","suite":"Spree::Post at ./spec/models/spree/post_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/post_spec.rb"},{"name":"behaves like lifecycle events lifecycle events post.updated publishes updated event when record is updated","suite":"Spree::Post at ./spec/models/spree/post_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/post_spec.rb"},{"name":"behaves like lifecycle events lifecycle events post.deleted publishes deleted event when record is deleted","suite":"Spree::Post at ./spec/models/spree/post_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/post_spec.rb"},{"name":"Validations image validates content type","suite":"Spree::Post at ./spec/models/spree/post_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/post_spec.rb"},{"name":"Validations slug validates uniqueness","suite":"Spree::Post at ./spec/models/spree/post_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/post_spec.rb"},{"name":"#author_name returns the author name","suite":"Spree::Post at ./spec/models/spree/post_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/post_spec.rb"},{"name":"#author_name when author is deleted returns the author name","suite":"Spree::Post at ./spec/models/spree/post_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","suiteSourceFile":"core/spec/models/spree/post_spec.rb"},{"name":"requires a key","suite":"Spree::Preference at ./spec/models/spree/preference_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","suiteSourceFile":"core/spec/models/spree/preference_spec.rb"},{"name":"type conversion for values :boolean","suite":"Spree::Preference at ./spec/models/spree/preference_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/preference_spec.rb"},{"name":"type conversion for values false :boolean","suite":"Spree::Preference at ./spec/models/spree/preference_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","suiteSourceFile":"core/spec/models/spree/preference_spec.rb"},{"name":"type conversion for values :integer","suite":"Spree::Preference at ./spec/models/spree/preference_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3\"}}","suiteSourceFile":"core/spec/models/spree/preference_spec.rb"},{"name":"type conversion for values :decimal","suite":"Spree::Preference at ./spec/models/spree/preference_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:4\"}}","suiteSourceFile":"core/spec/models/spree/preference_spec.rb"},{"name":"type conversion for values :string","suite":"Spree::Preference at ./spec/models/spree/preference_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:5\"}}","suiteSourceFile":"core/spec/models/spree/preference_spec.rb"},{"name":"type conversion for values :text","suite":"Spree::Preference at ./spec/models/spree/preference_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:6\"}}","suiteSourceFile":"core/spec/models/spree/preference_spec.rb"},{"name":"type conversion for values :password","suite":"Spree::Preference at ./spec/models/spree/preference_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:7\"}}","suiteSourceFile":"core/spec/models/spree/preference_spec.rb"},{"name":"type conversion for values :any","suite":"Spree::Preference at ./spec/models/spree/preference_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:8\"}}","suiteSourceFile":"core/spec/models/spree/preference_spec.rb"},{"name":"has named methods to access preferences","suite":"Spree::Preferences::Configuration at ./spec/models/spree/preferences/configuration_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","suiteSourceFile":"core/spec/models/spree/preferences/configuration_spec.rb"},{"name":"uses [ ] to access preferences","suite":"Spree::Preferences::Configuration at ./spec/models/spree/preferences/configuration_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2\"}}","suiteSourceFile":"core/spec/models/spree/preferences/configuration_spec.rb"},{"name":"uses set/get to access preferences","suite":"Spree::Preferences::Configuration at ./spec/models/spree/preferences/configuration_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3\"}}","suiteSourceFile":"core/spec/models/spree/preferences/configuration_spec.rb"},{"name":"preference definitions parent should not see child definitions","suite":"Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/preferences/preferable_spec.rb"},{"name":"preference definitions child should have parent and own definitions","suite":"Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/preferences/preferable_spec.rb"},{"name":"preference definitions instances have defaults","suite":"Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/models/spree/preferences/preferable_spec.rb"},{"name":"preference definitions can be asked if it has a preference definition","suite":"Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","suiteSourceFile":"core/spec/models/spree/preferences/preferable_spec.rb"},{"name":"preference definitions can be asked and raises","suite":"Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","suiteSourceFile":"core/spec/models/spree/preferences/preferable_spec.rb"},{"name":"preference definitions has a type","suite":"Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","suiteSourceFile":"core/spec/models/spree/preferences/preferable_spec.rb"},{"name":"preference definitions has a default","suite":"Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7\"}}","suiteSourceFile":"core/spec/models/spree/preferences/preferable_spec.rb"},{"name":"preference definitions can have a deprecation message","suite":"Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8\"}}","suiteSourceFile":"core/spec/models/spree/preferences/preferable_spec.rb"},{"name":"preference definitions raises if not defined","suite":"Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:9\"}}","suiteSourceFile":"core/spec/models/spree/preferences/preferable_spec.rb"},{"name":"preference access handles ghost methods for preferences","suite":"Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/preferences/preferable_spec.rb"},{"name":"preference access parent and child instances have their own prefs","suite":"Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","suiteSourceFile":"core/spec/models/spree/preferences/preferable_spec.rb"},{"name":"preference access raises when preference not defined","suite":"Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3\"}}","suiteSourceFile":"core/spec/models/spree/preferences/preferable_spec.rb"},{"name":"preference access builds a hash of preferences","suite":"Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:4\"}}","suiteSourceFile":"core/spec/models/spree/preferences/preferable_spec.rb"},{"name":"preference access builds a hash of preference defaults","suite":"Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:5\"}}","suiteSourceFile":"core/spec/models/spree/preferences/preferable_spec.rb"},{"name":"preference access builds a array of deprecated preferences","suite":"Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:6\"}}","suiteSourceFile":"core/spec/models/spree/preferences/preferable_spec.rb"},{"name":"preference access converts integer preferences to integer values with strings","suite":"Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:7:1\"}}","suiteSourceFile":"core/spec/models/spree/preferences/preferable_spec.rb"},{"name":"preference access converts nullable integer preferences stores nil when set to empty string","suite":"Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:8:1\"}}","suiteSourceFile":"core/spec/models/spree/preferences/preferable_spec.rb"},{"name":"preference access converts nullable integer preferences stores nil when set to nil","suite":"Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:8:2\"}}","suiteSourceFile":"core/spec/models/spree/preferences/preferable_spec.rb"},{"name":"preference access converts nullable integer preferences converts string to integer when present","suite":"Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:8:3\"}}","suiteSourceFile":"core/spec/models/spree/preferences/preferable_spec.rb"},{"name":"preference access converts nullable integer preferences preserves integer values","suite":"Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:8:4\"}}","suiteSourceFile":"core/spec/models/spree/preferences/preferable_spec.rb"},{"name":"preference access converts decimal preferences to BigDecimal values returns a BigDecimal","suite":"Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:9:1\"}}","suiteSourceFile":"core/spec/models/spree/preferences/preferable_spec.rb"},{"name":"preference access converts decimal preferences to BigDecimal values with strings","suite":"Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:9:2\"}}","suiteSourceFile":"core/spec/models/spree/preferences/preferable_spec.rb"},{"name":"preference access converts nullable decimal preferences stores nil when set to empty string","suite":"Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:10:1\"}}","suiteSourceFile":"core/spec/models/spree/preferences/preferable_spec.rb"},{"name":"preference access converts nullable decimal preferences stores nil when set to nil","suite":"Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:10:2\"}}","suiteSourceFile":"core/spec/models/spree/preferences/preferable_spec.rb"},{"name":"preference access converts nullable decimal preferences converts string to BigDecimal when present","suite":"Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:10:3\"}}","suiteSourceFile":"core/spec/models/spree/preferences/preferable_spec.rb"},{"name":"preference access converts nullable decimal preferences preserves decimal values","suite":"Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:10:4\"}}","suiteSourceFile":"core/spec/models/spree/preferences/preferable_spec.rb"},{"name":"preference access converts boolean preferences to boolean values with strings","suite":"Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:11:1\"}}","suiteSourceFile":"core/spec/models/spree/preferences/preferable_spec.rb"},{"name":"preference access converts boolean preferences to boolean values with integers","suite":"Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:11:2\"}}","suiteSourceFile":"core/spec/models/spree/preferences/preferable_spec.rb"},{"name":"preference access converts boolean preferences to boolean values with an empty string","suite":"Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:11:3\"}}","suiteSourceFile":"core/spec/models/spree/preferences/preferable_spec.rb"},{"name":"preference access converts boolean preferences to boolean values with an empty hash","suite":"Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:11:4\"}}","suiteSourceFile":"core/spec/models/spree/preferences/preferable_spec.rb"},{"name":"preference access converts array preferences to array values with arrays","suite":"Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:12:1\"}}","suiteSourceFile":"core/spec/models/spree/preferences/preferable_spec.rb"},{"name":"preference access converts array preferences to array values with string","suite":"Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:12:2\"}}","suiteSourceFile":"core/spec/models/spree/preferences/preferable_spec.rb"},{"name":"preference access converts array preferences to array values with hash","suite":"Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:12:3\"}}","suiteSourceFile":"core/spec/models/spree/preferences/preferable_spec.rb"},{"name":"preference access converts hash preferences to hash values with hash","suite":"Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:13:1\"}}","suiteSourceFile":"core/spec/models/spree/preferences/preferable_spec.rb"},{"name":"preference access converts hash preferences to hash values with hash and keys are integers","suite":"Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:13:2\"}}","suiteSourceFile":"core/spec/models/spree/preferences/preferable_spec.rb"},{"name":"preference access converts hash preferences to hash values with string","suite":"Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:13:3\"}}","suiteSourceFile":"core/spec/models/spree/preferences/preferable_spec.rb"},{"name":"preference access converts hash preferences to hash values with boolean","suite":"Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:13:4\"}}","suiteSourceFile":"core/spec/models/spree/preferences/preferable_spec.rb"},{"name":"preference access converts hash preferences to hash values with simple array","suite":"Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:13:5\"}}","suiteSourceFile":"core/spec/models/spree/preferences/preferable_spec.rb"},{"name":"preference access converts hash preferences to hash values with a nested array","suite":"Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:13:6\"}}","suiteSourceFile":"core/spec/models/spree/preferences/preferable_spec.rb"},{"name":"preference access converts hash preferences to hash values with single array","suite":"Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:13:7\"}}","suiteSourceFile":"core/spec/models/spree/preferences/preferable_spec.rb"},{"name":"preference access converts any preferences to any values with array","suite":"Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:14:1\"}}","suiteSourceFile":"core/spec/models/spree/preferences/preferable_spec.rb"},{"name":"preference access converts any preferences to any values with hash","suite":"Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:14:2\"}}","suiteSourceFile":"core/spec/models/spree/preferences/preferable_spec.rb"},{"name":"persisted preferables clear preferences","suite":"Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","suiteSourceFile":"core/spec/models/spree/preferences/preferable_spec.rb"},{"name":"persisted preferables clear preferences when record is deleted","suite":"Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3\"}}","suiteSourceFile":"core/spec/models/spree/preferences/preferable_spec.rb"},{"name":"persisted preferables pending preferences for new activerecord objects saves preferences after record is saved","suite":"Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","suiteSourceFile":"core/spec/models/spree/preferences/preferable_spec.rb"},{"name":"persisted preferables pending preferences for new activerecord objects saves preferences for serialized object","suite":"Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:2\"}}","suiteSourceFile":"core/spec/models/spree/preferences/preferable_spec.rb"},{"name":"persisted preferables preference change tracking methods tracks changes to preferences","suite":"Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4:1\"}}","suiteSourceFile":"core/spec/models/spree/preferences/preferable_spec.rb"},{"name":"persisted preferables preference change tracking methods tracks previous changes after save","suite":"Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4:2\"}}","suiteSourceFile":"core/spec/models/spree/preferences/preferable_spec.rb"},{"name":"persisted preferables preference change tracking methods reports no changes when preference is set to same value","suite":"Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4:3\"}}","suiteSourceFile":"core/spec/models/spree/preferences/preferable_spec.rb"},{"name":"persisted preferables preference change tracking methods tracks changes to array preferences","suite":"Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4:4\"}}","suiteSourceFile":"core/spec/models/spree/preferences/preferable_spec.rb"},{"name":"#get returns default value if present","suite":"Spree::Preferences::RuntimeConfiguration at ./spec/models/spree/preferences/runtime_configuration_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/preferences/runtime_configuration_spec.rb"},{"name":"#get returns nil if not present","suite":"Spree::Preferences::RuntimeConfiguration at ./spec/models/spree/preferences/runtime_configuration_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/preferences/runtime_configuration_spec.rb"},{"name":"#get returns value via an attribute accessor","suite":"Spree::Preferences::RuntimeConfiguration at ./spec/models/spree/preferences/runtime_configuration_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/models/spree/preferences/runtime_configuration_spec.rb"},{"name":"#get returns value via a hash accessor","suite":"Spree::Preferences::RuntimeConfiguration at ./spec/models/spree/preferences/runtime_configuration_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","suiteSourceFile":"core/spec/models/spree/preferences/runtime_configuration_spec.rb"},{"name":"#set overrides the default value","suite":"Spree::Preferences::RuntimeConfiguration at ./spec/models/spree/preferences/runtime_configuration_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/preferences/runtime_configuration_spec.rb"},{"name":"#set sets value if not set previously","suite":"Spree::Preferences::RuntimeConfiguration at ./spec/models/spree/preferences/runtime_configuration_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","suiteSourceFile":"core/spec/models/spree/preferences/runtime_configuration_spec.rb"},{"name":"#set sets the value via an attribute accessor","suite":"Spree::Preferences::RuntimeConfiguration at ./spec/models/spree/preferences/runtime_configuration_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3\"}}","suiteSourceFile":"core/spec/models/spree/preferences/runtime_configuration_spec.rb"},{"name":"#set sets value via a hash accessor","suite":"Spree::Preferences::RuntimeConfiguration at ./spec/models/spree/preferences/runtime_configuration_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:4\"}}","suiteSourceFile":"core/spec/models/spree/preferences/runtime_configuration_spec.rb"},{"name":"#store example at ./spec/models/spree/preferences/scoped_store_spec.rb:14","suite":"Spree::Preferences::ScopedStore at ./spec/models/spree/preferences/scoped_store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/preferences/scoped_store_spec.rb"},{"name":"stubbed store with a prefix can fetch","suite":"Spree::Preferences::ScopedStore at ./spec/models/spree/preferences/scoped_store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/preferences/scoped_store_spec.rb"},{"name":"stubbed store with a prefix can assign","suite":"Spree::Preferences::ScopedStore at ./spec/models/spree/preferences/scoped_store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:2\"}}","suiteSourceFile":"core/spec/models/spree/preferences/scoped_store_spec.rb"},{"name":"stubbed store with a prefix can delete","suite":"Spree::Preferences::ScopedStore at ./spec/models/spree/preferences/scoped_store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:3\"}}","suiteSourceFile":"core/spec/models/spree/preferences/scoped_store_spec.rb"},{"name":"stubbed store with a prefix and suffix can fetch","suite":"Spree::Preferences::ScopedStore at ./spec/models/spree/preferences/scoped_store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/preferences/scoped_store_spec.rb"},{"name":"stubbed store with a prefix and suffix can assign","suite":"Spree::Preferences::ScopedStore at ./spec/models/spree/preferences/scoped_store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:4:2\"}}","suiteSourceFile":"core/spec/models/spree/preferences/scoped_store_spec.rb"},{"name":"stubbed store with a prefix and suffix can delete","suite":"Spree::Preferences::ScopedStore at ./spec/models/spree/preferences/scoped_store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:4:3\"}}","suiteSourceFile":"core/spec/models/spree/preferences/scoped_store_spec.rb"},{"name":"sets and gets a key","suite":"Spree::Preferences::Store at ./spec/models/spree/preferences/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","suiteSourceFile":"core/spec/models/spree/preferences/store_spec.rb"},{"name":"can set and get false values when cache return nil","suite":"Spree::Preferences::Store at ./spec/models/spree/preferences/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2\"}}","suiteSourceFile":"core/spec/models/spree/preferences/store_spec.rb"},{"name":"returns nil when key can't be found and fallback value is not supplied","suite":"Spree::Preferences::Store at ./spec/models/spree/preferences/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6\"}}","suiteSourceFile":"core/spec/models/spree/preferences/store_spec.rb"},{"name":"Validations date range validation validates starts_at is before ends_at","suite":"Spree::PriceList at ./spec/models/spree/price_list_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/price_list_spec.rb"},{"name":"state_machine has initial status of draft","suite":"Spree::PriceList at ./spec/models/spree/price_list_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/price_list_spec.rb"},{"name":"state_machine #activate transitions to active","suite":"Spree::PriceList at ./spec/models/spree/price_list_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/price_list_spec.rb"},{"name":"state_machine #deactivate transitions to inactive","suite":"Spree::PriceList at ./spec/models/spree/price_list_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:1\"}}","suiteSourceFile":"core/spec/models/spree/price_list_spec.rb"},{"name":"state_machine #schedule transitions to scheduled","suite":"Spree::PriceList at ./spec/models/spree/price_list_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:4:1\"}}","suiteSourceFile":"core/spec/models/spree/price_list_spec.rb"},{"name":"scopes .with_status(:active) returns only active price lists","suite":"Spree::PriceList at ./spec/models/spree/price_list_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","suiteSourceFile":"core/spec/models/spree/price_list_spec.rb"},{"name":"scopes .with_status(:inactive) returns only inactive price lists","suite":"Spree::PriceList at ./spec/models/spree/price_list_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","suiteSourceFile":"core/spec/models/spree/price_list_spec.rb"},{"name":"scopes .with_status(:scheduled) returns only scheduled price lists","suite":"Spree::PriceList at ./spec/models/spree/price_list_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3:1\"}}","suiteSourceFile":"core/spec/models/spree/price_list_spec.rb"},{"name":"scopes .by_position returns price lists ordered by position ascending","suite":"Spree::PriceList at ./spec/models/spree/price_list_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4:1\"}}","suiteSourceFile":"core/spec/models/spree/price_list_spec.rb"},{"name":"scopes .for_store returns only price lists for the specified store","suite":"Spree::PriceList at ./spec/models/spree/price_list_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:5:1\"}}","suiteSourceFile":"core/spec/models/spree/price_list_spec.rb"},{"name":"scopes .current returns only price lists within date range","suite":"Spree::PriceList at ./spec/models/spree/price_list_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:6:1\"}}","suiteSourceFile":"core/spec/models/spree/price_list_spec.rb"},{"name":"scopes .current accepts a timezone parameter","suite":"Spree::PriceList at ./spec/models/spree/price_list_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:6:2\"}}","suiteSourceFile":"core/spec/models/spree/price_list_spec.rb"},{"name":"#applicable? when price list is inactive returns false","suite":"Spree::PriceList at ./spec/models/spree/price_list_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1\"}}","suiteSourceFile":"core/spec/models/spree/price_list_spec.rb"},{"name":"#applicable? when price list is outside date range returns false","suite":"Spree::PriceList at ./spec/models/spree/price_list_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1\"}}","suiteSourceFile":"core/spec/models/spree/price_list_spec.rb"},{"name":"#applicable? with rules and match_policy = all returns false if any rule fails","suite":"Spree::PriceList at ./spec/models/spree/price_list_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3:1\"}}","suiteSourceFile":"core/spec/models/spree/price_list_spec.rb"},{"name":"#applicable? with rules and match_policy = any returns true if any rule passes","suite":"Spree::PriceList at ./spec/models/spree/price_list_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:4:1\"}}","suiteSourceFile":"core/spec/models/spree/price_list_spec.rb"},{"name":"#active? returns true when status is active","suite":"Spree::PriceList at ./spec/models/spree/price_list_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","suiteSourceFile":"core/spec/models/spree/price_list_spec.rb"},{"name":"#active? returns false when status is not active","suite":"Spree::PriceList at ./spec/models/spree/price_list_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2\"}}","suiteSourceFile":"core/spec/models/spree/price_list_spec.rb"},{"name":"#add_products creates prices for all variants of the given products","suite":"Spree::PriceList at ./spec/models/spree/price_list_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","suiteSourceFile":"core/spec/models/spree/price_list_spec.rb"},{"name":"#add_products creates prices for all supported currencies","suite":"Spree::PriceList at ./spec/models/spree/price_list_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2\"}}","suiteSourceFile":"core/spec/models/spree/price_list_spec.rb"},{"name":"#add_products creates prices with nil amount","suite":"Spree::PriceList at ./spec/models/spree/price_list_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:3\"}}","suiteSourceFile":"core/spec/models/spree/price_list_spec.rb"},{"name":"#add_products does not create duplicate prices for existing variants","suite":"Spree::PriceList at ./spec/models/spree/price_list_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:4\"}}","suiteSourceFile":"core/spec/models/spree/price_list_spec.rb"},{"name":"#add_products enqueues a job to touch affected variants","suite":"Spree::PriceList at ./spec/models/spree/price_list_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:5\"}}","suiteSourceFile":"core/spec/models/spree/price_list_spec.rb"},{"name":"#add_products touches the price list to bust cache","suite":"Spree::PriceList at ./spec/models/spree/price_list_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:6\"}}","suiteSourceFile":"core/spec/models/spree/price_list_spec.rb"},{"name":"#add_products handles empty product_ids","suite":"Spree::PriceList at ./spec/models/spree/price_list_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:7\"}}","suiteSourceFile":"core/spec/models/spree/price_list_spec.rb"},{"name":"#add_products handles nil product_ids","suite":"Spree::PriceList at ./spec/models/spree/price_list_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:8\"}}","suiteSourceFile":"core/spec/models/spree/price_list_spec.rb"},{"name":"#add_products with products having multiple variants creates prices for all eligible variants","suite":"Spree::PriceList at ./spec/models/spree/price_list_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:9:1\"}}","suiteSourceFile":"core/spec/models/spree/price_list_spec.rb"},{"name":"#add_products with non-existent product IDs handles gracefully without error","suite":"Spree::PriceList at ./spec/models/spree/price_list_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:10:1\"}}","suiteSourceFile":"core/spec/models/spree/price_list_spec.rb"},{"name":"#add_products with non-existent product IDs creates prices only for existing products","suite":"Spree::PriceList at ./spec/models/spree/price_list_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:10:2\"}}","suiteSourceFile":"core/spec/models/spree/price_list_spec.rb"},{"name":"#add_products when price already has amount set does not overwrite existing price with amount","suite":"Spree::PriceList at ./spec/models/spree/price_list_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:11:1\"}}","suiteSourceFile":"core/spec/models/spree/price_list_spec.rb"},{"name":"#add_products when price already has amount set only creates prices for missing currencies","suite":"Spree::PriceList at ./spec/models/spree/price_list_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:11:2\"}}","suiteSourceFile":"core/spec/models/spree/price_list_spec.rb"},{"name":"#add_products with deleted variants only creates prices for non-deleted variants","suite":"Spree::PriceList at ./spec/models/spree/price_list_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:12:1\"}}","suiteSourceFile":"core/spec/models/spree/price_list_spec.rb"},{"name":"#remove_products removes all prices for the given products","suite":"Spree::PriceList at ./spec/models/spree/price_list_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","suiteSourceFile":"core/spec/models/spree/price_list_spec.rb"},{"name":"#remove_products removes prices for all currencies","suite":"Spree::PriceList at ./spec/models/spree/price_list_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2\"}}","suiteSourceFile":"core/spec/models/spree/price_list_spec.rb"},{"name":"#remove_products does not remove prices for other products","suite":"Spree::PriceList at ./spec/models/spree/price_list_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:3\"}}","suiteSourceFile":"core/spec/models/spree/price_list_spec.rb"},{"name":"#remove_products handles empty product_ids","suite":"Spree::PriceList at ./spec/models/spree/price_list_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:4\"}}","suiteSourceFile":"core/spec/models/spree/price_list_spec.rb"},{"name":"#remove_products handles nil product_ids","suite":"Spree::PriceList at ./spec/models/spree/price_list_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:5\"}}","suiteSourceFile":"core/spec/models/spree/price_list_spec.rb"},{"name":"#remove_products removes prices for multiple products at once","suite":"Spree::PriceList at ./spec/models/spree/price_list_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:6\"}}","suiteSourceFile":"core/spec/models/spree/price_list_spec.rb"},{"name":"#remove_products enqueues a job to touch affected variants","suite":"Spree::PriceList at ./spec/models/spree/price_list_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:7\"}}","suiteSourceFile":"core/spec/models/spree/price_list_spec.rb"},{"name":"#remove_products touches the price list to bust cache","suite":"Spree::PriceList at ./spec/models/spree/price_list_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:8\"}}","suiteSourceFile":"core/spec/models/spree/price_list_spec.rb"},{"name":"#remove_products when re-adding a previously removed product allows re-adding a product with empty prices","suite":"Spree::PriceList at ./spec/models/spree/price_list_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:9:1\"}}","suiteSourceFile":"core/spec/models/spree/price_list_spec.rb"},{"name":"#remove_products when re-adding a previously removed product allows re-adding a product that had prices with amounts set","suite":"Spree::PriceList at ./spec/models/spree/price_list_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:9:2\"}}","suiteSourceFile":"core/spec/models/spree/price_list_spec.rb"},{"name":"#bulk_update_prices updates prices in bulk using upsert_all","suite":"Spree::PriceList at ./spec/models/spree/price_list_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1\"}}","suiteSourceFile":"core/spec/models/spree/price_list_spec.rb"},{"name":"#bulk_update_prices clears compare_at_amount when it equals amount","suite":"Spree::PriceList at ./spec/models/spree/price_list_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2\"}}","suiteSourceFile":"core/spec/models/spree/price_list_spec.rb"},{"name":"#bulk_update_prices clears amount when user removes existing value","suite":"Spree::PriceList at ./spec/models/spree/price_list_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:3\"}}","suiteSourceFile":"core/spec/models/spree/price_list_spec.rb"},{"name":"#bulk_update_prices skips prices where nothing changed","suite":"Spree::PriceList at ./spec/models/spree/price_list_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:4\"}}","suiteSourceFile":"core/spec/models/spree/price_list_spec.rb"},{"name":"#bulk_update_prices updates when only compare_at_amount changed","suite":"Spree::PriceList at ./spec/models/spree/price_list_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:5\"}}","suiteSourceFile":"core/spec/models/spree/price_list_spec.rb"},{"name":"#bulk_update_prices enqueues a job to touch affected variants","suite":"Spree::PriceList at ./spec/models/spree/price_list_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:6\"}}","suiteSourceFile":"core/spec/models/spree/price_list_spec.rb"},{"name":"#bulk_update_prices returns true for empty attributes","suite":"Spree::PriceList at ./spec/models/spree/price_list_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:7\"}}","suiteSourceFile":"core/spec/models/spree/price_list_spec.rb"},{"name":"#bulk_update_prices skips entries without id","suite":"Spree::PriceList at ./spec/models/spree/price_list_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:8\"}}","suiteSourceFile":"core/spec/models/spree/price_list_spec.rb"},{"name":"#applicable? when customer_group_ids preference is empty returns true when user is present","suite":"Spree::PriceRules::CustomerGroupRule at ./spec/models/spree/price_rules/customer_group_rule_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/price_rules/customer_group_rule_spec.rb"},{"name":"#applicable? when customer_group_ids preference is empty returns false when user is not present","suite":"Spree::PriceRules::CustomerGroupRule at ./spec/models/spree/price_rules/customer_group_rule_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/price_rules/customer_group_rule_spec.rb"},{"name":"#applicable? when customer_group_ids preference is set returns true when context user is in the customer group","suite":"Spree::PriceRules::CustomerGroupRule at ./spec/models/spree/price_rules/customer_group_rule_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/price_rules/customer_group_rule_spec.rb"},{"name":"#applicable? when customer_group_ids preference is set returns false when context user is not in the customer group","suite":"Spree::PriceRules::CustomerGroupRule at ./spec/models/spree/price_rules/customer_group_rule_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2\"}}","suiteSourceFile":"core/spec/models/spree/price_rules/customer_group_rule_spec.rb"},{"name":"#applicable? when customer_group_ids preference is set returns false when context has no user","suite":"Spree::PriceRules::CustomerGroupRule at ./spec/models/spree/price_rules/customer_group_rule_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:3\"}}","suiteSourceFile":"core/spec/models/spree/price_rules/customer_group_rule_spec.rb"},{"name":"#applicable? when customer_group_ids preference contains strings returns true when context user is in the customer group","suite":"Spree::PriceRules::CustomerGroupRule at ./spec/models/spree/price_rules/customer_group_rule_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/price_rules/customer_group_rule_spec.rb"},{"name":"#applicable? with multiple customer groups configured returns true when context user is in any of the customer groups","suite":"Spree::PriceRules::CustomerGroupRule at ./spec/models/spree/price_rules/customer_group_rule_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/price_rules/customer_group_rule_spec.rb"},{"name":"#applicable? with multiple customer groups configured returns false when context user is not in any of the customer groups","suite":"Spree::PriceRules::CustomerGroupRule at ./spec/models/spree/price_rules/customer_group_rule_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:2\"}}","suiteSourceFile":"core/spec/models/spree/price_rules/customer_group_rule_spec.rb"},{"name":".description returns the translated description","suite":"Spree::PriceRules::CustomerGroupRule at ./spec/models/spree/price_rules/customer_group_rule_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/price_rules/customer_group_rule_spec.rb"},{"name":"#applicable? when user_ids preference is empty returns true when user is present","suite":"Spree::PriceRules::UserRule at ./spec/models/spree/price_rules/user_rule_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/price_rules/user_rule_spec.rb"},{"name":"#applicable? when user_ids preference is set returns true when context user matches","suite":"Spree::PriceRules::UserRule at ./spec/models/spree/price_rules/user_rule_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/price_rules/user_rule_spec.rb"},{"name":"#applicable? when user_ids preference is set returns false when context user does not match","suite":"Spree::PriceRules::UserRule at ./spec/models/spree/price_rules/user_rule_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2\"}}","suiteSourceFile":"core/spec/models/spree/price_rules/user_rule_spec.rb"},{"name":"#applicable? when user_ids preference is set returns false when context has no user","suite":"Spree::PriceRules::UserRule at ./spec/models/spree/price_rules/user_rule_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:3\"}}","suiteSourceFile":"core/spec/models/spree/price_rules/user_rule_spec.rb"},{"name":"#applicable? when user_ids preference contains strings returns true when context user matches","suite":"Spree::PriceRules::UserRule at ./spec/models/spree/price_rules/user_rule_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/price_rules/user_rule_spec.rb"},{"name":"#applicable? when user_ids preference contains strings returns false when context user does not match","suite":"Spree::PriceRules::UserRule at ./spec/models/spree/price_rules/user_rule_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:2\"}}","suiteSourceFile":"core/spec/models/spree/price_rules/user_rule_spec.rb"},{"name":"max_quantity preference stores nil when set to empty string","suite":"Spree::PriceRules::VolumeRule at ./spec/models/spree/price_rules/volume_rule_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/price_rules/volume_rule_spec.rb"},{"name":"max_quantity preference preserves non-zero max_quantity","suite":"Spree::PriceRules::VolumeRule at ./spec/models/spree/price_rules/volume_rule_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/price_rules/volume_rule_spec.rb"},{"name":"max_quantity preference preserves nil max_quantity","suite":"Spree::PriceRules::VolumeRule at ./spec/models/spree/price_rules/volume_rule_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/models/spree/price_rules/volume_rule_spec.rb"},{"name":"#applicable? returns true when quantity meets minimum","suite":"Spree::PriceRules::VolumeRule at ./spec/models/spree/price_rules/volume_rule_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/price_rules/volume_rule_spec.rb"},{"name":"#applicable? returns false when quantity is below minimum","suite":"Spree::PriceRules::VolumeRule at ./spec/models/spree/price_rules/volume_rule_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","suiteSourceFile":"core/spec/models/spree/price_rules/volume_rule_spec.rb"},{"name":"#applicable? returns false when quantity is nil","suite":"Spree::PriceRules::VolumeRule at ./spec/models/spree/price_rules/volume_rule_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:4\"}}","suiteSourceFile":"core/spec/models/spree/price_rules/volume_rule_spec.rb"},{"name":"#applicable? with max_quantity set returns true when quantity is within range","suite":"Spree::PriceRules::VolumeRule at ./spec/models/spree/price_rules/volume_rule_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:1\"}}","suiteSourceFile":"core/spec/models/spree/price_rules/volume_rule_spec.rb"},{"name":"#applicable? with max_quantity set returns false when quantity exceeds maximum","suite":"Spree::PriceRules::VolumeRule at ./spec/models/spree/price_rules/volume_rule_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:2\"}}","suiteSourceFile":"core/spec/models/spree/price_rules/volume_rule_spec.rb"},{"name":"#applicable? when zone_ids preference is empty returns true for any zone","suite":"Spree::PriceRules::ZoneRule at ./spec/models/spree/price_rules/zone_rule_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/price_rules/zone_rule_spec.rb"},{"name":"#applicable? when zone_ids preference is set returns true when context zone matches","suite":"Spree::PriceRules::ZoneRule at ./spec/models/spree/price_rules/zone_rule_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/price_rules/zone_rule_spec.rb"},{"name":"#applicable? when zone_ids preference is set returns false when context zone does not match","suite":"Spree::PriceRules::ZoneRule at ./spec/models/spree/price_rules/zone_rule_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2\"}}","suiteSourceFile":"core/spec/models/spree/price_rules/zone_rule_spec.rb"},{"name":"#applicable? when zone_ids preference is set returns false when context has no zone","suite":"Spree::PriceRules::ZoneRule at ./spec/models/spree/price_rules/zone_rule_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:3\"}}","suiteSourceFile":"core/spec/models/spree/price_rules/zone_rule_spec.rb"},{"name":"#applicable? when zone_ids preference contains strings returns true when context zone matches","suite":"Spree::PriceRules::ZoneRule at ./spec/models/spree/price_rules/zone_rule_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/price_rules/zone_rule_spec.rb"},{"name":"#applicable? when zone_ids preference contains strings returns false when context zone does not match","suite":"Spree::PriceRules::ZoneRule at ./spec/models/spree/price_rules/zone_rule_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:2\"}}","suiteSourceFile":"core/spec/models/spree/price_rules/zone_rule_spec.rb"},{"name":"behaves like lifecycle events lifecycle events price.created publishes created event when record is created","suite":"Spree::Price at ./spec/models/spree/price_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/price_spec.rb"},{"name":"behaves like lifecycle events lifecycle events price.updated publishes updated event when record is updated","suite":"Spree::Price at ./spec/models/spree/price_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/price_spec.rb"},{"name":"behaves like lifecycle events lifecycle events price.deleted publishes deleted event when record is deleted","suite":"Spree::Price at ./spec/models/spree/price_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/price_spec.rb"},{"name":"Callbacks when compare_at_amount is equal to amount sets compare_at_amount to nil","suite":"Spree::Price at ./spec/models/spree/price_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/price_spec.rb"},{"name":"Callbacks after_commit :auto_match_taxons when price is discounted on create auto matches taxons","suite":"Spree::Price at ./spec/models/spree/price_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/price_spec.rb"},{"name":"Callbacks after_commit :auto_match_taxons when price is discounted on update and changed to not be discounted auto matches taxons","suite":"Spree::Price at ./spec/models/spree/price_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/price_spec.rb"},{"name":"Callbacks after_commit :auto_match_taxons when price is discounted on update and is still discounted does not touch shop product","suite":"Spree::Price at ./spec/models/spree/price_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/price_spec.rb"},{"name":"Callbacks after_commit :auto_match_taxons when price is not discounted on create auto matches taxons","suite":"Spree::Price at ./spec/models/spree/price_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/price_spec.rb"},{"name":"Callbacks after_commit :auto_match_taxons when price is not discounted on update and changed to be discounted auto matches taxons","suite":"Spree::Price at ./spec/models/spree/price_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:2:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/price_spec.rb"},{"name":"Callbacks after_commit :auto_match_taxons when price is not discounted on update and is still not discounted does not touch shop product","suite":"Spree::Price at ./spec/models/spree/price_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:2:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/price_spec.rb"},{"name":"#amount= is expected to equal to localized number","suite":"Spree::Price at ./spec/models/spree/price_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/price_spec.rb"},{"name":"#compare_at_amount= is expected to equal to localized number","suite":"Spree::Price at ./spec/models/spree/price_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/price_spec.rb"},{"name":"#compare_at_amount= with empty string being passed as value casts value to nil","suite":"Spree::Price at ./spec/models/spree/price_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1\"}}","suiteSourceFile":"core/spec/models/spree/price_spec.rb"},{"name":"#price when amount is changed is expected to equal to price","suite":"Spree::Price at ./spec/models/spree/price_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:1\"}}","suiteSourceFile":"core/spec/models/spree/price_spec.rb"},{"name":"#compare_at_price when amount is changed is expected to equal to price","suite":"Spree::Price at ./spec/models/spree/price_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1:1\"}}","suiteSourceFile":"core/spec/models/spree/price_spec.rb"},{"name":"validations when the amount is nil legacy behavior example at ./spec/models/spree/price_spec.rb:164","suite":"Spree::Price at ./spec/models/spree/price_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/price_spec.rb"},{"name":"validations when the amount is nil new behavior example at ./spec/models/spree/price_spec.rb:168","suite":"Spree::Price at ./spec/models/spree/price_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/price_spec.rb"},{"name":"validations when the amount is less than 0 has 1 error on amount","suite":"Spree::Price at ./spec/models/spree/price_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2:1\"}}","suiteSourceFile":"core/spec/models/spree/price_spec.rb"},{"name":"validations when the amount is less than 0 populates errors","suite":"Spree::Price at ./spec/models/spree/price_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2:2\"}}","suiteSourceFile":"core/spec/models/spree/price_spec.rb"},{"name":"validations when the amount is greater than maximum amount has 1 error on amount","suite":"Spree::Price at ./spec/models/spree/price_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:3:1\"}}","suiteSourceFile":"core/spec/models/spree/price_spec.rb"},{"name":"validations when the amount is greater than maximum amount populates errors","suite":"Spree::Price at ./spec/models/spree/price_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:3:2\"}}","suiteSourceFile":"core/spec/models/spree/price_spec.rb"},{"name":"validations when the amount is between 0 and the maximum amount example at ./spec/models/spree/price_spec.rb:199","suite":"Spree::Price at ./spec/models/spree/price_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:4:1\"}}","suiteSourceFile":"core/spec/models/spree/price_spec.rb"},{"name":"#price_including_vat_for(zone) when called with a non-default zone returns the correct price including another VAT to two digits","suite":"Spree::Price at ./spec/models/spree/price_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1:1\"}}","suiteSourceFile":"core/spec/models/spree/price_spec.rb"},{"name":"#price_including_vat_for(zone) when called from the default zone returns the correct price","suite":"Spree::Price at ./spec/models/spree/price_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2:1\"}}","suiteSourceFile":"core/spec/models/spree/price_spec.rb"},{"name":"#price_including_vat_for(zone) when no default zone is set returns the correct price","suite":"Spree::Price at ./spec/models/spree/price_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:3:1\"}}","suiteSourceFile":"core/spec/models/spree/price_spec.rb"},{"name":"#compare_at_price_including_vat_for(zone) when called with a non-default zone returns the correct price including another VAT to two digits","suite":"Spree::Price at ./spec/models/spree/price_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1:1\"}}","suiteSourceFile":"core/spec/models/spree/price_spec.rb"},{"name":"#compare_at_price_including_vat_for(zone) when called from the default zone returns the correct price","suite":"Spree::Price at ./spec/models/spree/price_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:2:1\"}}","suiteSourceFile":"core/spec/models/spree/price_spec.rb"},{"name":"#compare_at_price_including_vat_for(zone) when no default zone is set returns the correct price","suite":"Spree::Price at ./spec/models/spree/price_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:3:1\"}}","suiteSourceFile":"core/spec/models/spree/price_spec.rb"},{"name":"#display_price_including_vat_for(zone) calls #price_including_vat_for","suite":"Spree::Price at ./spec/models/spree/price_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1\"}}","suiteSourceFile":"core/spec/models/spree/price_spec.rb"},{"name":"#display_compare_at_price_including_vat_for(zone) calls #price_including_vat_for","suite":"Spree::Price at ./spec/models/spree/price_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1\"}}","suiteSourceFile":"core/spec/models/spree/price_spec.rb"},{"name":"#discounted? when compare at amount is higher example at ./spec/models/spree/price_spec.rb:329","suite":"Spree::Price at ./spec/models/spree/price_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:1:1\"}}","suiteSourceFile":"core/spec/models/spree/price_spec.rb"},{"name":"#discounted? when compare at amount is lower example at ./spec/models/spree/price_spec.rb:334","suite":"Spree::Price at ./spec/models/spree/price_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:2:1\"}}","suiteSourceFile":"core/spec/models/spree/price_spec.rb"},{"name":"#discounted? when compare at amount is the same example at ./spec/models/spree/price_spec.rb:339","suite":"Spree::Price at ./spec/models/spree/price_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:3:1\"}}","suiteSourceFile":"core/spec/models/spree/price_spec.rb"},{"name":"#discounted? when there is no compare at amount example at ./spec/models/spree/price_spec.rb:344","suite":"Spree::Price at ./spec/models/spree/price_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:4:1\"}}","suiteSourceFile":"core/spec/models/spree/price_spec.rb"},{"name":"normalizes :name strips leading and trailing whitespace","suite":"Spree::Product at ./spec/models/spree/product/normalizes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/product/normalizes_spec.rb"},{"name":"normalizes :name squishes multiple spaces","suite":"Spree::Product at ./spec/models/spree/product/normalizes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/product/normalizes_spec.rb"},{"name":"normalizes :name converts empty string to nil","suite":"Spree::Product at ./spec/models/spree/product/normalizes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/models/spree/product/normalizes_spec.rb"},{"name":"normalizes :name handles nil value","suite":"Spree::Product at ./spec/models/spree/product/normalizes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","suiteSourceFile":"core/spec/models/spree/product/normalizes_spec.rb"},{"name":"normalizes :name with always_use_translations enabled creates a product with translated name without NotNullViolation","suite":"Spree::Product at ./spec/models/spree/product/normalizes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5:1\"}}","suiteSourceFile":"core/spec/models/spree/product/normalizes_spec.rb"},{"name":"normalizes :name with always_use_translations enabled normalizes translated names across locales","suite":"Spree::Product at ./spec/models/spree/product/normalizes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5:2\"}}","suiteSourceFile":"core/spec/models/spree/product/normalizes_spec.rb"},{"name":"#available when discontinued example at ./spec/models/spree/product/scopes_spec.rb:11","suite":"Product scopes at ./spec/models/spree/product/scopes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/product/scopes_spec.rb"},{"name":"#available when not discontinued example at ./spec/models/spree/product/scopes_spec.rb:17","suite":"Product scopes at ./spec/models/spree/product/scopes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/product/scopes_spec.rb"},{"name":"#available when available example at ./spec/models/spree/product/scopes_spec.rb:23","suite":"Product scopes at ./spec/models/spree/product/scopes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/product/scopes_spec.rb"},{"name":"#available when not available example at ./spec/models/spree/product/scopes_spec.rb:29","suite":"Product scopes at ./spec/models/spree/product/scopes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/product/scopes_spec.rb"},{"name":"#available different currency example at ./spec/models/spree/product/scopes_spec.rb:36","suite":"Product scopes at ./spec/models/spree/product/scopes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5:1\"}}","suiteSourceFile":"core/spec/models/spree/product/scopes_spec.rb"},{"name":"#available different currency example at ./spec/models/spree/product/scopes_spec.rb:37","suite":"Product scopes at ./spec/models/spree/product/scopes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5:2\"}}","suiteSourceFile":"core/spec/models/spree/product/scopes_spec.rb"},{"name":".for_filters when giving a taxon example at ./spec/models/spree/product/scopes_spec.rb:55","suite":"Product scopes at ./spec/models/spree/product/scopes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/product/scopes_spec.rb"},{"name":".for_filters when giving a currency with no products example at ./spec/models/spree/product/scopes_spec.rb:59","suite":"Product scopes at ./spec/models/spree/product/scopes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/product/scopes_spec.rb"},{"name":"A product assigned to parent and child taxons calling Product.in_taxon returns products in child taxons","suite":"Product scopes at ./spec/models/spree/product/scopes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/product/scopes_spec.rb"},{"name":"A product assigned to parent and child taxons calling Product.in_taxon should not return duplicate records","suite":"Product scopes at ./spec/models/spree/product/scopes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","suiteSourceFile":"core/spec/models/spree/product/scopes_spec.rb"},{"name":"A product assigned to parent and child taxons orders products based on their ordering within the classifications by initial ordering","suite":"Product scopes at ./spec/models/spree/product/scopes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3:1\"}}","suiteSourceFile":"core/spec/models/spree/product/scopes_spec.rb"},{"name":"A product assigned to parent and child taxons orders products based on their ordering within the classifications after ordering changed","suite":"Product scopes at ./spec/models/spree/product/scopes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3:2\"}}","suiteSourceFile":"core/spec/models/spree/product/scopes_spec.rb"},{"name":"property scopes with_property finds by a property's name","suite":"Product scopes at ./spec/models/spree/product/scopes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1\"}}","suiteSourceFile":"core/spec/models/spree/product/scopes_spec.rb"},{"name":"property scopes with_property doesn't find any properties with an unknown name","suite":"Product scopes at ./spec/models/spree/product/scopes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:2\"}}","suiteSourceFile":"core/spec/models/spree/product/scopes_spec.rb"},{"name":"property scopes with_property finds by a property","suite":"Product scopes at ./spec/models/spree/product/scopes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:3\"}}","suiteSourceFile":"core/spec/models/spree/product/scopes_spec.rb"},{"name":"property scopes with_property finds by an id","suite":"Product scopes at ./spec/models/spree/product/scopes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:4\"}}","suiteSourceFile":"core/spec/models/spree/product/scopes_spec.rb"},{"name":"property scopes with_property cannot find a property with an unknown id","suite":"Product scopes at ./spec/models/spree/product/scopes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:5\"}}","suiteSourceFile":"core/spec/models/spree/product/scopes_spec.rb"},{"name":"property scopes with_property_value finds by a property's name","suite":"Product scopes at ./spec/models/spree/product/scopes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1\"}}","suiteSourceFile":"core/spec/models/spree/product/scopes_spec.rb"},{"name":"property scopes with_property_value cannot find by an unknown property's name","suite":"Product scopes at ./spec/models/spree/product/scopes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:2\"}}","suiteSourceFile":"core/spec/models/spree/product/scopes_spec.rb"},{"name":"property scopes with_property_value cannot find with a name by an incorrect value","suite":"Product scopes at ./spec/models/spree/product/scopes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:3\"}}","suiteSourceFile":"core/spec/models/spree/product/scopes_spec.rb"},{"name":"property scopes with_property_value finds by a property","suite":"Product scopes at ./spec/models/spree/product/scopes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:4\"}}","suiteSourceFile":"core/spec/models/spree/product/scopes_spec.rb"},{"name":"property scopes with_property_value cannot find with a property by an incorrect value","suite":"Product scopes at ./spec/models/spree/product/scopes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:5\"}}","suiteSourceFile":"core/spec/models/spree/product/scopes_spec.rb"},{"name":"property scopes with_property_value finds by an id with a value","suite":"Product scopes at ./spec/models/spree/product/scopes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:6\"}}","suiteSourceFile":"core/spec/models/spree/product/scopes_spec.rb"},{"name":"property scopes with_property_value cannot find with an invalid id","suite":"Product scopes at ./spec/models/spree/product/scopes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:7\"}}","suiteSourceFile":"core/spec/models/spree/product/scopes_spec.rb"},{"name":"property scopes with_property_value cannot find with an invalid value","suite":"Product scopes at ./spec/models/spree/product/scopes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:8\"}}","suiteSourceFile":"core/spec/models/spree/product/scopes_spec.rb"},{"name":"property scopes with_property_values finds by property values","suite":"Product scopes at ./spec/models/spree/product/scopes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3:1\"}}","suiteSourceFile":"core/spec/models/spree/product/scopes_spec.rb"},{"name":"property scopes with_property_values cannot find with an invalid property name","suite":"Product scopes at ./spec/models/spree/product/scopes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3:2\"}}","suiteSourceFile":"core/spec/models/spree/product/scopes_spec.rb"},{"name":"property scopes with_property_values cannot find with invalid property values","suite":"Product scopes at ./spec/models/spree/product/scopes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3:3\"}}","suiteSourceFile":"core/spec/models/spree/product/scopes_spec.rb"},{"name":"#add_simple_scopes define scope ascend_by_updated_at on class example at ./spec/models/spree/product/scopes_spec.rb:213","suite":"Product scopes at ./spec/models/spree/product/scopes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/product/scopes_spec.rb"},{"name":"#add_simple_scopes define scope ascend_by_updated_at on ActiveRecord::Relation example at ./spec/models/spree/product/scopes_spec.rb:217","suite":"Product scopes at ./spec/models/spree/product/scopes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/product/scopes_spec.rb"},{"name":"#add_simple_scopes define scope ascend_by_updated_at on ActiveRecord::Relation example at ./spec/models/spree/product/scopes_spec.rb:218","suite":"Product scopes at ./spec/models/spree/product/scopes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:1:2:2\"}}","suiteSourceFile":"core/spec/models/spree/product/scopes_spec.rb"},{"name":"#add_simple_scopes define scope descend_by_name on class example at ./spec/models/spree/product/scopes_spec.rb:224","suite":"Product scopes at ./spec/models/spree/product/scopes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/product/scopes_spec.rb"},{"name":"#add_simple_scopes define scope descend_by_name on ActiveRecord::Relation example at ./spec/models/spree/product/scopes_spec.rb:228","suite":"Product scopes at ./spec/models/spree/product/scopes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/product/scopes_spec.rb"},{"name":"#add_simple_scopes define scope descend_by_name on ActiveRecord::Relation example at ./spec/models/spree/product/scopes_spec.rb:229","suite":"Product scopes at ./spec/models/spree/product/scopes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:2:2:2\"}}","suiteSourceFile":"core/spec/models/spree/product/scopes_spec.rb"},{"name":"#search_by_name shows product whose name contains phrase","suite":"Product scopes at ./spec/models/spree/product/scopes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","suiteSourceFile":"core/spec/models/spree/product/scopes_spec.rb"},{"name":"#search_by_name shows multiple products whose names contain phrase","suite":"Product scopes at ./spec/models/spree/product/scopes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2\"}}","suiteSourceFile":"core/spec/models/spree/product/scopes_spec.rb"},{"name":"#search_by_name is case insensitive for search phrases","suite":"Product scopes at ./spec/models/spree/product/scopes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:3\"}}","suiteSourceFile":"core/spec/models/spree/product/scopes_spec.rb"},{"name":"#ascend_by_taxons_min_position orders products by ascending taxons minimum position","suite":"Product scopes at ./spec/models/spree/product/scopes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","suiteSourceFile":"core/spec/models/spree/product/scopes_spec.rb"},{"name":"#for_store returns products assigned to a store","suite":"Product scopes at ./spec/models/spree/product/scopes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1\"}}","suiteSourceFile":"core/spec/models/spree/product/scopes_spec.rb"},{"name":"#in_stock.in_stock_or_backorderable example at ./spec/models/spree/product/scopes_spec.rb:325","suite":"Product scopes at ./spec/models/spree/product/scopes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1\"}}","suiteSourceFile":"core/spec/models/spree/product/scopes_spec.rb"},{"name":".by_best_selling with completed orders orders products by units_sold_count in descending order by default","suite":"Product scopes at ./spec/models/spree/product/scopes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1:1\"}}","suiteSourceFile":"core/spec/models/spree/product/scopes_spec.rb"},{"name":".by_best_selling with completed orders orders products by units_sold_count in ascending order when specified","suite":"Product scopes at ./spec/models/spree/product/scopes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1:2\"}}","suiteSourceFile":"core/spec/models/spree/product/scopes_spec.rb"},{"name":".by_best_selling with incomplete orders only counts units from completed orders","suite":"Product scopes at ./spec/models/spree/product/scopes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:2:1\"}}","suiteSourceFile":"core/spec/models/spree/product/scopes_spec.rb"},{"name":".by_best_selling when products have same units_sold_count uses revenue as secondary sort criteria","suite":"Product scopes at ./spec/models/spree/product/scopes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:3:1\"}}","suiteSourceFile":"core/spec/models/spree/product/scopes_spec.rb"},{"name":".by_best_selling with varying quantities sums line item quantities for units_sold_count","suite":"Product scopes at ./spec/models/spree/product/scopes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:4:1\"}}","suiteSourceFile":"core/spec/models/spree/product/scopes_spec.rb"},{"name":".by_best_selling with multiple orders containing multiple line items ranks by total units sold across all orders","suite":"Product scopes at ./spec/models/spree/product/scopes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:5:1\"}}","suiteSourceFile":"core/spec/models/spree/product/scopes_spec.rb"},{"name":".by_best_selling with products having no orders includes products with no orders at the end","suite":"Product scopes at ./spec/models/spree/product/scopes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:6:1\"}}","suiteSourceFile":"core/spec/models/spree/product/scopes_spec.rb"},{"name":".by_best_selling with products having only pending orders (no completed_at) includes products with only pending orders with units_sold_count = 0","suite":"Product scopes at ./spec/models/spree/product/scopes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:7:1\"}}","suiteSourceFile":"core/spec/models/spree/product/scopes_spec.rb"},{"name":".by_best_selling with products having only pending orders (no completed_at) orders products correctly with pending orders included","suite":"Product scopes at ./spec/models/spree/product/scopes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:7:2\"}}","suiteSourceFile":"core/spec/models/spree/product/scopes_spec.rb"},{"name":"options scopes .with_option finds by a option type's name","suite":"Product scopes at ./spec/models/spree/product/scopes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1:1\"}}","suiteSourceFile":"core/spec/models/spree/product/scopes_spec.rb"},{"name":"options scopes .with_option doesn't find any option types with an unknown name","suite":"Product scopes at ./spec/models/spree/product/scopes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1:2\"}}","suiteSourceFile":"core/spec/models/spree/product/scopes_spec.rb"},{"name":"options scopes .with_option finds by a option type","suite":"Product scopes at ./spec/models/spree/product/scopes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1:3\"}}","suiteSourceFile":"core/spec/models/spree/product/scopes_spec.rb"},{"name":"options scopes .with_option finds by an id","suite":"Product scopes at ./spec/models/spree/product/scopes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1:4\"}}","suiteSourceFile":"core/spec/models/spree/product/scopes_spec.rb"},{"name":"options scopes .with_option cannot find an option type with an unknown id","suite":"Product scopes at ./spec/models/spree/product/scopes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1:5\"}}","suiteSourceFile":"core/spec/models/spree/product/scopes_spec.rb"},{"name":"options scopes .with_option_value finds by a option type's name","suite":"Product scopes at ./spec/models/spree/product/scopes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2:1\"}}","suiteSourceFile":"core/spec/models/spree/product/scopes_spec.rb"},{"name":"options scopes .with_option_value doesn't find any option types with an unknown name","suite":"Product scopes at ./spec/models/spree/product/scopes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2:2\"}}","suiteSourceFile":"core/spec/models/spree/product/scopes_spec.rb"},{"name":"options scopes .with_option_value finds by a option type","suite":"Product scopes at ./spec/models/spree/product/scopes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2:3\"}}","suiteSourceFile":"core/spec/models/spree/product/scopes_spec.rb"},{"name":"options scopes .with_option_value finds by an id","suite":"Product scopes at ./spec/models/spree/product/scopes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2:4\"}}","suiteSourceFile":"core/spec/models/spree/product/scopes_spec.rb"},{"name":"options scopes .with_option_value cannot find an option type with an unknown id","suite":"Product scopes at ./spec/models/spree/product/scopes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2:5\"}}","suiteSourceFile":"core/spec/models/spree/product/scopes_spec.rb"},{"name":"options scopes .with_option_value can return product ids","suite":"Product scopes at ./spec/models/spree/product/scopes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2:6\"}}","suiteSourceFile":"core/spec/models/spree/product/scopes_spec.rb"},{"name":"stores old slugs in FriendlyIds history","suite":"Spree::Product::Slugs at ./spec/models/spree/product/slugs_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4\"}}","suiteSourceFile":"core/spec/models/spree/product/slugs_spec.rb"},{"name":"validates slug uniqueness","suite":"Spree::Product::Slugs at ./spec/models/spree/product/slugs_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6\"}}","suiteSourceFile":"core/spec/models/spree/product/slugs_spec.rb"},{"name":"falls back to 'name-sku' for slug if regular name-based slug already in use","suite":"Spree::Product::Slugs at ./spec/models/spree/product/slugs_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7\"}}","suiteSourceFile":"core/spec/models/spree/product/slugs_spec.rb"},{"name":"with not normalized slug normalizes slug on update validation","suite":"Spree::Product::Slugs at ./spec/models/spree/product/slugs_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/product/slugs_spec.rb"},{"name":"with slug history updates slugs with deleted-{id} prefix to ensure uniqueness","suite":"Spree::Product::Slugs at ./spec/models/spree/product/slugs_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/product/slugs_spec.rb"},{"name":"with slug history soft deletes slug record","suite":"Spree::Product::Slugs at ./spec/models/spree/product/slugs_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","suiteSourceFile":"core/spec/models/spree/product/slugs_spec.rb"},{"name":"with slug history allows re-using the slug from history","suite":"Spree::Product::Slugs at ./spec/models/spree/product/slugs_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3\"}}","suiteSourceFile":"core/spec/models/spree/product/slugs_spec.rb"},{"name":"ability to retake a slug of deleted record with the same name can use original slug","suite":"Spree::Product::Slugs at ./spec/models/spree/product/slugs_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/product/slugs_spec.rb"},{"name":"ability to retake a slug of deleted record with the same name can delete the product again and then create a new product with the original slug","suite":"Spree::Product::Slugs at ./spec/models/spree/product/slugs_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","suiteSourceFile":"core/spec/models/spree/product/slugs_spec.rb"},{"name":"when product destroyed renames slug","suite":"Spree::Product::Slugs at ./spec/models/spree/product/slugs_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","suiteSourceFile":"core/spec/models/spree/product/slugs_spec.rb"},{"name":"when product destroyed when more than one translation exists renames slug for all translations","suite":"Spree::Product::Slugs at ./spec/models/spree/product/slugs_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1\"}}","suiteSourceFile":"core/spec/models/spree/product/slugs_spec.rb"},{"name":"when product destroyed when slug is already at or near max length truncates renamed slug to ensure it remains within length limit","suite":"Spree::Product::Slugs at ./spec/models/spree/product/slugs_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3:1\"}}","suiteSourceFile":"core/spec/models/spree/product/slugs_spec.rb"},{"name":"history when product is destroyed keeps the history","suite":"Spree::Product::Slugs at ./spec/models/spree/product/slugs_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1:1\"}}","suiteSourceFile":"core/spec/models/spree/product/slugs_spec.rb"},{"name":"history when product is restored updates the history","suite":"Spree::Product::Slugs at ./spec/models/spree/product/slugs_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2:1\"}}","suiteSourceFile":"core/spec/models/spree/product/slugs_spec.rb"},{"name":"history when product is restored regenerates the product slug","suite":"Spree::Product::Slugs at ./spec/models/spree/product/slugs_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2:2\"}}","suiteSourceFile":"core/spec/models/spree/product/slugs_spec.rb"},{"name":"#localized_slugs_for_store when there are slugs in locales not supported by the store returns only slugs in locales supported by the store","suite":"Spree::Product::Slugs at ./spec/models/spree/product/slugs_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1:1\"}}","suiteSourceFile":"core/spec/models/spree/product/slugs_spec.rb"},{"name":"#localized_slugs_for_store when one of the supported locales does not have a translation falls back to store's default locale","suite":"Spree::Product::Slugs at ./spec/models/spree/product/slugs_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:2:1\"}}","suiteSourceFile":"core/spec/models/spree/product/slugs_spec.rb"},{"name":"#localized_slugs_for_store the slugs are generated from name when slug field is empty saves slugs generated from name","suite":"Spree::Product::Slugs at ./spec/models/spree/product/slugs_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:3:1\"}}","suiteSourceFile":"core/spec/models/spree/product/slugs_spec.rb"},{"name":"#localized_slugs_for_store the slugs are generated from default locale name when name and slug for translation is empty saves slugs generated from fallback name","suite":"Spree::Product::Slugs at ./spec/models/spree/product/slugs_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:4:1\"}}","suiteSourceFile":"core/spec/models/spree/product/slugs_spec.rb"},{"name":"#localized_slugs_for_store the slugs are generated from invalid slug format saves slugs in valid format","suite":"Spree::Product::Slugs at ./spec/models/spree/product/slugs_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:5:1\"}}","suiteSourceFile":"core/spec/models/spree/product/slugs_spec.rb"},{"name":"translated slugs generating slugs when a translated product has no name and slug generates slug from the product name","suite":"Spree::Product::Slugs at ./spec/models/spree/product/slugs_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/product/slugs_spec.rb"},{"name":"translated slugs generating slugs when a translated product has no slug generates slug from the translated product name","suite":"Spree::Product::Slugs at ./spec/models/spree/product/slugs_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/product/slugs_spec.rb"},{"name":"translated slugs generating slugs when a translated product has a slug normalizes the existing slug","suite":"Spree::Product::Slugs at ./spec/models/spree/product/slugs_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/product/slugs_spec.rb"},{"name":"translated slugs ensuring slug uniqueness when the slug is unique in the same locale keeps the original slug","suite":"Spree::Product::Slugs at ./spec/models/spree/product/slugs_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/product/slugs_spec.rb"},{"name":"translated slugs ensuring slug uniqueness when the slug is not unique in the same locale appends a UUID to make it unique","suite":"Spree::Product::Slugs at ./spec/models/spree/product/slugs_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/product/slugs_spec.rb"},{"name":"translated slugs ensuring slug uniqueness when the slug is unique in a different locale allows the same slug in different locales","suite":"Spree::Product::Slugs at ./spec/models/spree/product/slugs_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:2:3:1\"}}","suiteSourceFile":"core/spec/models/spree/product/slugs_spec.rb"},{"name":"finds products filtered by brand does not attempt to call value method on Arel::Table","suite":"product filters at ./spec/models/spree/product_filter_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/product_filter_spec.rb"},{"name":"finds products filtered by brand can find products in the 'Nike' brand","suite":"product filters at ./spec/models/spree/product_filter_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/product_filter_spec.rb"},{"name":"#validations should not create duplicated property for product","suite":"Spree::ProductProperty at ./spec/models/spree/product_property_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/product_property_spec.rb"},{"name":"#validations value field validates presence","suite":"Spree::ProductProperty at ./spec/models/spree/product_property_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/product_property_spec.rb"},{"name":"translations translates product property fields","suite":"Spree::ProductProperty at ./spec/models/spree/product_property_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/product_property_spec.rb"},{"name":"touching updates product","suite":"Spree::ProductProperty at ./spec/models/spree/product_property_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/product_property_spec.rb"},{"name":"touching updates property","suite":"Spree::ProductProperty at ./spec/models/spree/product_property_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","suiteSourceFile":"core/spec/models/spree/product_property_spec.rb"},{"name":"ransackable_associations example at ./spec/models/spree/product_property_spec.rb:58","suite":"Spree::ProductProperty at ./spec/models/spree/product_property_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/product_property_spec.rb"},{"name":"setting param example at ./spec/models/spree/product_property_spec.rb:64","suite":"Spree::ProductProperty at ./spec/models/spree/product_property_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","suiteSourceFile":"core/spec/models/spree/product_property_spec.rb"},{"name":"setting value normalizes value by stripping whitespace","suite":"Spree::ProductProperty at ./spec/models/spree/product_property_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","suiteSourceFile":"core/spec/models/spree/product_property_spec.rb"},{"name":"initializes a master variant when building a product","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:4","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:5","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:7","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:8","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:10","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:11","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"behaves like metadata reads data as symbolized keys","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"behaves like metadata reads data as not symbolized keys","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"behaves like metadata can query records by metadata properties","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:10\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"behaves like lifecycle events lifecycle events product.created publishes created event when record is created","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"behaves like lifecycle events lifecycle events product.updated publishes updated event when record is updated","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"behaves like lifecycle events lifecycle events product.deleted publishes deleted event when record is deleted","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"after_initialize :assign_default_tax_category when product is new assigns default tax category","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"after_initialize :assign_default_tax_category when product is persisted does not assign default tax category","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"before_validation :ensure_default_shipping_category assigns the default shipping category","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"before_validation :ensure_default_shipping_category when product has a shipping category keeps the assigned shipping category","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"before_validation :ensure_default_shipping_category when product is persisted does not assign the default shipping category","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"product instance purchasable? with variants returns false if no variant is purchasable even if master is","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"product instance purchasable? with variants returns true if variant is purchasable","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"product instance purchasable? without variants returns false if master is not purchasable","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"product instance purchasable? without variants returns true if master is purchasable","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:2:2\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"product instance backorderable? with variants returns false if no variant is backorderable even if master is","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"product instance backorderable? with variants returns true if variant is backorderable","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1:2\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"product instance backorderable? without variants returns false if master is not backorderable","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"product instance backorderable? without variants returns true if master is backorderable","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:2:2\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"product instance in_stock? with variants returns false if no variant is in stock even if master is","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3:1:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"product instance in_stock? with variants returns true if variant is in stock","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3:1:2\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"product instance in_stock? without variants returns false if master is not in stock","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3:2:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"product instance in_stock? without variants returns true if master is in stock","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3:2:2\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"product instance #duplicate duplicates product","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:4:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"product instance #duplicate calls #duplicate_extra","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:4:3\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"product instance #duplicate when translations exist for another locale duplicates translations for all locales","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:4:2:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"product instance master variant when master variant changed saves the master","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:5:1:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"product instance master variant when master default price changed saves the master","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:5:2:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"product instance master variant when master default price changed saves the default price","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:5:2:2\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"product instance master variant when master variant and price haven't changed does not save the master","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:5:3:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"product instance product has no variants #destroy sets deleted_at value","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:6:1:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"product instance product has variants #destroy sets deleted_at value","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:7:1:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"product instance #price strips non-price characters","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:8:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"product instance #display_price shows the amount","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:9:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"product instance #display_price with currency set to JPY displays the currency in yen","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:9:2:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"product instance #available? is available if status is set to active","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:10:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"product instance #available? is not available if destroyed","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:10:2\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"product instance #available? is not available when available_on is in the future","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:10:3\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"product instance #can_supply? is true","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:11:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"product instance #can_supply? is false","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:11:2\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"product instance variants_and_option_values returns only variants with option values","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:12:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"product instance has stock movements doesnt raise ReadOnlyRecord error","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:13:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"product instance has stock items can retrieve stock items","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:14:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"product instance #discontinue_on_must_be_later_than_make_active_at make_active_at is a date earlier than discontinue_on is valid","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:15:1:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"product instance #discontinue_on_must_be_later_than_make_active_at make_active_at is a date earlier than discontinue_on is not valid example at ./spec/models/spree/product_spec.rb:321","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:15:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"product instance #discontinue_on_must_be_later_than_make_active_at make_active_at is a date earlier than discontinue_on is not valid example at ./spec/models/spree/product_spec.rb:322","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:15:2:1:2\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"product instance #discontinue_on_must_be_later_than_make_active_at make_active_at and discontinue_on are nil is valid","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:15:3:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"product instance hard deletion doesnt raise ActiveRecordError error","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:16:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"product instance history keeps translations when product is destroyed","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:17:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"product instance memoized data without action keeps data","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:18:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"product instance memoized data resets memoized data after save","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:18:2\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"product instance memoized data resets memoized data reload","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:18:3\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"product instance when using another locale translates product fields","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:19:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"properties properly assigns properties","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"properties does not create duplicate properties when set_property is called","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"properties does not overwrite properties' presentation names","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:4\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"properties optional property_presentation is not used example at ./spec/models/spree/product_spec.rb:456","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:3:1:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"properties optional property_presentation is used example at ./spec/models/spree/product_spec.rb:462","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:3:2:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"properties #possible_promotions lists the promotion as a possible promotion","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:5:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#create when prototype is supplied creates properties based on the prototype","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#create when prototype with option types is supplied creates option types based on the prototype","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#create when prototype with option types is supplied creates product option types based on the prototype","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2:2\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#create when prototype with option types is supplied creates variants from an option values hash with one option type","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2:3\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#create when prototype with option types is supplied stills create variants when option_values_hash is given but prototype id is nil","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2:4\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#create when prototype with option types is supplied creates variants from an option values hash with multiple option types","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2:5\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#create when track inventory is disabled creates a default stock item","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:3:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#images only looks for variant images","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#images is sorted by position","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"classifications and taxons is joined through classifications","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"classifications and taxons will delete all classifications","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:2\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#total_on_hand is infinite if track_inventory_levels is false","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#total_on_hand is infinite if variant is on demand","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:2\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#total_on_hand returns sum of stock items count_on_hand","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:3\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#total_on_hand returns sum of stock items count_on_hand when variants_including_master is not loaded","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:4\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#validate_master when duplicate SKUs entered example at ./spec/models/spree/product_spec.rb:653","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#discontinue! sets the discontinued","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#discontinue! sets the status to archived","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:2\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#discontinue! changes updated_at","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:3\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#discontinued? is false","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#discontinued? is true","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:2\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#brand_taxon fetches Brand Taxon","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#brand when brand association is not defined falls back to brand_taxon","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:1:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#brand when brand association is not defined returns brand name via brand_name method","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:1:2\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#brand when brand association is defined uses the brand association","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:2:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#category_taxon fetches Category Taxon","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:17:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#category when category association is not defined falls back to category_taxon","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:1:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#category when category association is defined checks for the category association","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:2:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#backordered? returns true when out of stock and backorderable","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#backordered? returns false when out of stock and not backorderable","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:2\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#backordered? returns false when there is available item in stock","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:3\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#ensure_not_in_complete_orders adds error on product destroy","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:20:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#default_variant track inventory levels product has variants in stock returns first non-master in stock variant","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:21:1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#default_variant track inventory levels product has variants backorderable returns first non-master backorderable variant","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:21:1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#default_variant track inventory levels product has variants product without variants in stock or backorerable returns first non-master variant","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:21:1:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#default_variant track inventory levels without tracking inventory levels returns first non-master variant","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:21:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#default_variant track inventory levels product without variants returns master variant","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:21:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#default_variant_id product has variants returns first non-master variant ID","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:22:1:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#default_variant_id product without variants returns master variant ID","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:22:2:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#default_image when master has images returns the master image","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:23:1:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#default_image when master has images with variants that also have images returns the master image (master takes priority)","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:23:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#default_image when master has no images but variant does returns the variant image","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:23:2:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#default_image when no variants have images returns nil","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:23:3:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#has_variant_images? when no variants have images returns false","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:24:1:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#has_variant_images? when master has images returns true","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:24:2:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#has_variant_images? when a variant has images returns true","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:24:3:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#has_variant_images? when variant_images are preloaded uses loaded association","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:24:4:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#has_variant_images? when variant_images are preloaded but empty returns false","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:24:5:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#has_images? when no variants have images returns false","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:25:1:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#has_images? when master has images but default_variant does not returns true (checks all variants)","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:25:2:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#has_images? when any variant has images returns true","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:25:3:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#image_count when no variants have images returns 0","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:26:1:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#image_count when master has images returns the master image count","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:26:2:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#image_count when master has images when variant also has images returns master image count (master takes priority)","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:26:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#image_count when only variant has images returns the variant image count","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:26:3:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#variant_for_images when no variants have images returns nil","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:27:1:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#variant_for_images when master has images returns master","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:27:2:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#variant_for_images when only default_variant has images returns default_variant","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:27:3:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#variant_for_images when only a non-default variant has images returns the variant with images","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:27:4:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#secondary_image when no variants have images returns nil","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:28:1:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#secondary_image when variant has only one image returns nil","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:28:2:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#secondary_image when variant has multiple images returns the second image","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:28:3:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#secondary_image when images are on a non-master variant returns the second image from that variant","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:28:4:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"image methods with eager loading returns correct images with storefront includes","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"image methods with eager loading when image is on non-default variant returns image from non-default variant","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:2:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#ensure_store_presence no store passed auto-assigns store","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:30:1:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#ensure_store_presence store passed does not auto-assign store","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:30:2:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#ensure_store_presence validation disabled preference set example at ./spec/models/spree/product_spec.rb:1177","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:30:3:1:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#taxons_for_store returns product taxons for specified store","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:31:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#any_variant_in_stock_or_backorderable? when only master variant is in stock or backorderable example at ./spec/models/spree/product_spec.rb:1204","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:32:1:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#any_variant_in_stock_or_backorderable? with more variants aside from the master variant with at least one non-master variant stock items count_on_hand > 0 example at ./spec/models/spree/product_spec.rb:1222","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:32:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#any_variant_in_stock_or_backorderable? with more variants aside from the master variant when all non-master variant stock items have count_on_hand <= 0 example at ./spec/models/spree/product_spec.rb:1228","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:32:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#any_variant_in_stock_or_backorderable? with more variants aside from the master variant when all non-master variant stock items have count_on_hand <= 0 when all non-master variant stock items have track_inventory = false example at ./spec/models/spree/product_spec.rb:1233","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:32:2:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#any_variant_in_stock_or_backorderable? with more variants aside from the master variant when all non-master variant stock items have count_on_hand <= 0 when all non-master variant stock items have track_inventory = true example at ./spec/models/spree/product_spec.rb:1237","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:32:2:2:3:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#any_variant_in_stock_or_backorderable? with more variants aside from the master variant when all non-master variant stock items have count_on_hand <= 0 when all non-master variant stock items have track_inventory = true when all non-master variant stock items have backorderable = true example at ./spec/models/spree/product_spec.rb:1242","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:32:2:2:3:2:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#any_variant_in_stock_or_backorderable? #digital? when product has a shipping method with DigitalDelivery calculator example at ./spec/models/spree/product_spec.rb:1255","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:32:3:1:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#any_variant_in_stock_or_backorderable? #digital? when product does not have a shipping method with DigitalDelivery calculator example at ./spec/models/spree/product_spec.rb:1261","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:32:3:2:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#to_csv when product has no variants returns an array with one line of CSV data","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:33:1:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#to_csv when product has variants returns an array with CSV data for each variant including the master variant","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:33:2:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#to_csv when store is not provided uses default store","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:33:3:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#to_csv when store is not provided falls back to first store if no default","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:33:3:2\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#on_sale? when at least one variant is on sale returns true","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:34:1:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#on_sale? when no variant is on sale returns false","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:34:2:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#first_or_default_variant without variants returns the default variant","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:35:1:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#first_or_default_variant with a variant in the given currency returns the available variant in the given currency","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:35:2:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#first_or_default_variant with all variants in different currencies returns the first variant","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:35:3:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#first_available_variant returns the first available variant","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:36:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#price_varies? when all variants have the same price in the given currency example at ./spec/models/spree/product_spec.rb:1447","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:37:1:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#price_varies? when variants have different prices in the given currency example at ./spec/models/spree/product_spec.rb:1456","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:37:2:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#any_variant_available? without variants when master variant is available example at ./spec/models/spree/product_spec.rb:1474","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:38:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#any_variant_available? without variants when master variant is not available example at ./spec/models/spree/product_spec.rb:1480","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:38:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#any_variant_available? with variants when all variants are available example at ./spec/models/spree/product_spec.rb:1498","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:38:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#any_variant_available? with variants when no variants are available example at ./spec/models/spree/product_spec.rb:1504","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:38:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#lowest_price returns the lowest price","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:39:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"scopes .not_discontinued when nothing is passed as an argument returns only not discontinued products","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:40:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"scopes .not_discontinued when false is passed as an argument returns all products","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:40:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"scopes .available when available_on is specified returns products available before or on the specified date","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:40:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"scopes .available when available_on is not specified returns active, not discontinued products","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:40:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"scopes .available when show_products_without_price is false only returns products with prices in the specified currency","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:40:2:3:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"scopes .available when show_products_without_price is true returns products regardless of price","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:40:2:4:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"scopes .ascend_by_price orders products by minimum price ascending","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:40:3:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"scopes .ascend_by_price places products without prices at the end","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:40:3:2\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"scopes .ascend_by_price with variant prices uses minimum variant price for sorting","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:40:3:3:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"scopes .descend_by_price orders products by maximum price descending","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:40:4:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"scopes .descend_by_price places products without prices at the end","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:40:4:2\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"scopes .descend_by_price with variant prices uses maximum variant price for sorting","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:40:4:3:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"after_touch :touch_taxons without taxons skips enqueuing a job for touching the taxons","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:41:1:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"after_touch :touch_taxons with taxons enqueues a job for touching the taxons","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:41:2:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"custom events product.activated publishes product.activated event when activated","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:42:1:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"custom events product.archived publishes product.archived event when archived","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:42:2:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#has_variants? without variants returns false","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:43:1:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#has_variants? without variants has variant_count of 0","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:43:1:2\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#has_variants? with variants returns true","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:43:2:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#has_variants? with variants has variant_count of 1","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:43:2:2\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#has_variants? when variants are loaded in memory uses the loaded association instead of variant_count","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:43:3:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"behaves like an adjustment source #destroy when order incomplete example at ./spec/support/concerns/adjustment_source.rb:21","suite":"Spree::Promotion::Actions::CreateAdjustment at ./spec/models/spree/promotion/actions/create_adjustment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/actions/create_adjustment_spec.rb"},{"name":"behaves like an adjustment source #destroy when order is complete example at ./spec/support/concerns/adjustment_source.rb:27","suite":"Spree::Promotion::Actions::CreateAdjustment at ./spec/models/spree/promotion/actions/create_adjustment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/actions/create_adjustment_spec.rb"},{"name":"behaves like an adjustment source #destroy when order is complete example at ./spec/support/concerns/adjustment_source.rb:28","suite":"Spree::Promotion::Actions::CreateAdjustment at ./spec/models/spree/promotion/actions/create_adjustment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:2\"}}","suiteSourceFile":"core/spec/models/spree/promotion/actions/create_adjustment_spec.rb"},{"name":"#compute_amount when shipping_discount is applied and total is less than discount returns discount amount eq to total","suite":"Spree::Promotion::Actions::CreateAdjustment at ./spec/models/spree/promotion/actions/create_adjustment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/actions/create_adjustment_spec.rb"},{"name":"#compute_amount when shipping_discount is applied and total is equal to discount returns discount amount","suite":"Spree::Promotion::Actions::CreateAdjustment at ./spec/models/spree/promotion/actions/create_adjustment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/actions/create_adjustment_spec.rb"},{"name":"#compute_amount when shipping_discount is applied and total is greater than discount returns discount amount","suite":"Spree::Promotion::Actions::CreateAdjustment at ./spec/models/spree/promotion/actions/create_adjustment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/actions/create_adjustment_spec.rb"},{"name":"#compute_amount when shipping_discount is not applied and total is less than discount returns discount amount eq to total","suite":"Spree::Promotion::Actions::CreateAdjustment at ./spec/models/spree/promotion/actions/create_adjustment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/actions/create_adjustment_spec.rb"},{"name":"#compute_amount when shipping_discount is not applied and total is equal to discount returns discount amount","suite":"Spree::Promotion::Actions::CreateAdjustment at ./spec/models/spree/promotion/actions/create_adjustment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/actions/create_adjustment_spec.rb"},{"name":"#compute_amount when shipping_discount is not applied and total is greater than discount returns discount amount","suite":"Spree::Promotion::Actions::CreateAdjustment at ./spec/models/spree/promotion/actions/create_adjustment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:3:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/actions/create_adjustment_spec.rb"},{"name":"#perform does not apply an adjustment if the amount is 0","suite":"Spree::Promotion::Actions::CreateAdjustment at ./spec/models/spree/promotion/actions/create_adjustment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/actions/create_adjustment_spec.rb"},{"name":"#perform creates a discount with correct negative amount","suite":"Spree::Promotion::Actions::CreateAdjustment at ./spec/models/spree/promotion/actions/create_adjustment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","suiteSourceFile":"core/spec/models/spree/promotion/actions/create_adjustment_spec.rb"},{"name":"#perform creates a discount accessible through both order_id and adjustable_id","suite":"Spree::Promotion::Actions::CreateAdjustment at ./spec/models/spree/promotion/actions/create_adjustment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3\"}}","suiteSourceFile":"core/spec/models/spree/promotion/actions/create_adjustment_spec.rb"},{"name":"#perform does not create a discount when order already has one from this promotion","suite":"Spree::Promotion::Actions::CreateAdjustment at ./spec/models/spree/promotion/actions/create_adjustment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4\"}}","suiteSourceFile":"core/spec/models/spree/promotion/actions/create_adjustment_spec.rb"},{"name":"behaves like an adjustment source #destroy when order incomplete example at ./spec/support/concerns/adjustment_source.rb:21","suite":"Spree::Promotion::Actions::CreateItemAdjustments at ./spec/models/spree/promotion/actions/create_item_adjustments_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/actions/create_item_adjustments_spec.rb"},{"name":"behaves like an adjustment source #destroy when order is complete example at ./spec/support/concerns/adjustment_source.rb:27","suite":"Spree::Promotion::Actions::CreateItemAdjustments at ./spec/models/spree/promotion/actions/create_item_adjustments_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/actions/create_item_adjustments_spec.rb"},{"name":"behaves like an adjustment source #destroy when order is complete example at ./spec/support/concerns/adjustment_source.rb:28","suite":"Spree::Promotion::Actions::CreateItemAdjustments at ./spec/models/spree/promotion/actions/create_item_adjustments_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:2\"}}","suiteSourceFile":"core/spec/models/spree/promotion/actions/create_item_adjustments_spec.rb"},{"name":"#perform when calculator computes 0 does not create an adjustment when calculator returns 0","suite":"Spree::Promotion::Actions::CreateItemAdjustments at ./spec/models/spree/promotion/actions/create_item_adjustments_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/actions/create_item_adjustments_spec.rb"},{"name":"#perform when calculator returns a non-zero value creates adjustment with item as adjustable","suite":"Spree::Promotion::Actions::CreateItemAdjustments at ./spec/models/spree/promotion/actions/create_item_adjustments_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/actions/create_item_adjustments_spec.rb"},{"name":"#perform when calculator returns a non-zero value creates adjustment with self as source","suite":"Spree::Promotion::Actions::CreateItemAdjustments at ./spec/models/spree/promotion/actions/create_item_adjustments_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:2\"}}","suiteSourceFile":"core/spec/models/spree/promotion/actions/create_item_adjustments_spec.rb"},{"name":"#perform when calculator returns a non-zero value does not perform twice on the same item","suite":"Spree::Promotion::Actions::CreateItemAdjustments at ./spec/models/spree/promotion/actions/create_item_adjustments_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:3\"}}","suiteSourceFile":"core/spec/models/spree/promotion/actions/create_item_adjustments_spec.rb"},{"name":"#perform when calculator returns a non-zero value with products rules does not create adjustments for line_items not in product rule","suite":"Spree::Promotion::Actions::CreateItemAdjustments at ./spec/models/spree/promotion/actions/create_item_adjustments_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:4:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/actions/create_item_adjustments_spec.rb"},{"name":"#compute_amount when the adjustable is actionable calls compute on the calculator","suite":"Spree::Promotion::Actions::CreateItemAdjustments at ./spec/models/spree/promotion/actions/create_item_adjustments_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/actions/create_item_adjustments_spec.rb"},{"name":"#compute_amount when the adjustable is actionable calculator returns amount greater than item total does not exceed it","suite":"Spree::Promotion::Actions::CreateItemAdjustments at ./spec/models/spree/promotion/actions/create_item_adjustments_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/actions/create_item_adjustments_spec.rb"},{"name":"#compute_amount when the adjustable is actionable given other promotions with order adjustment should not consider not eligible adjustments","suite":"Spree::Promotion::Actions::CreateItemAdjustments at ./spec/models/spree/promotion/actions/create_item_adjustments_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/actions/create_item_adjustments_spec.rb"},{"name":"#compute_amount when the adjustable is actionable given other promotions with order adjustment when adjustments total is greater than item total does not exceed it","suite":"Spree::Promotion::Actions::CreateItemAdjustments at ./spec/models/spree/promotion/actions/create_item_adjustments_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:3:2:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/actions/create_item_adjustments_spec.rb"},{"name":"#compute_amount when the adjustable is not actionable returns 0","suite":"Spree::Promotion::Actions::CreateItemAdjustments at ./spec/models/spree/promotion/actions/create_item_adjustments_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/actions/create_item_adjustments_spec.rb"},{"name":"#destroy destroys adjustments for incompleted orders","suite":"Spree::Promotion::Actions::CreateItemAdjustments at ./spec/models/spree/promotion/actions/create_item_adjustments_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/actions/create_item_adjustments_spec.rb"},{"name":"#destroy nullifies adjustments for completed orders","suite":"Spree::Promotion::Actions::CreateItemAdjustments at ./spec/models/spree/promotion/actions/create_item_adjustments_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2\"}}","suiteSourceFile":"core/spec/models/spree/promotion/actions/create_item_adjustments_spec.rb"},{"name":"#destroy doesnt mess with unrelated adjustments","suite":"Spree::Promotion::Actions::CreateItemAdjustments at ./spec/models/spree/promotion/actions/create_item_adjustments_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3\"}}","suiteSourceFile":"core/spec/models/spree/promotion/actions/create_item_adjustments_spec.rb"},{"name":"#perform order is eligible adds line items to order with correct variant and quantity","suite":"Spree::Promotion::Actions::CreateLineItems at ./spec/models/spree/promotion/actions/create_line_items_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/actions/create_line_items_spec.rb"},{"name":"#perform order is eligible only adds the delta of quantity to an order","suite":"Spree::Promotion::Actions::CreateLineItems at ./spec/models/spree/promotion/actions/create_line_items_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/promotion/actions/create_line_items_spec.rb"},{"name":"#perform order is eligible doesn't add if the quantity is greater","suite":"Spree::Promotion::Actions::CreateLineItems at ./spec/models/spree/promotion/actions/create_line_items_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3\"}}","suiteSourceFile":"core/spec/models/spree/promotion/actions/create_line_items_spec.rb"},{"name":"#perform order is eligible doesn't try to add an item if it's out of stock","suite":"Spree::Promotion::Actions::CreateLineItems at ./spec/models/spree/promotion/actions/create_line_items_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:4\"}}","suiteSourceFile":"core/spec/models/spree/promotion/actions/create_line_items_spec.rb"},{"name":"#item_available? returns false if the item is out of stock","suite":"Spree::Promotion::Actions::CreateLineItems at ./spec/models/spree/promotion/actions/create_line_items_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/actions/create_line_items_spec.rb"},{"name":"#item_available? returns true if the item is in stock","suite":"Spree::Promotion::Actions::CreateLineItems at ./spec/models/spree/promotion/actions/create_line_items_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","suiteSourceFile":"core/spec/models/spree/promotion/actions/create_line_items_spec.rb"},{"name":"#handle_promotion_action_line_items creates new promotion action line items","suite":"Spree::Promotion::Actions::CreateLineItems at ./spec/models/spree/promotion/actions/create_line_items_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/actions/create_line_items_spec.rb"},{"name":"#handle_promotion_action_line_items with existing promotion action line items updates existing promotion action line items","suite":"Spree::Promotion::Actions::CreateLineItems at ./spec/models/spree/promotion/actions/create_line_items_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/actions/create_line_items_spec.rb"},{"name":"#handle_promotion_action_line_items with items marked for destruction removes items marked for destruction","suite":"Spree::Promotion::Actions::CreateLineItems at ./spec/models/spree/promotion/actions/create_line_items_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/actions/create_line_items_spec.rb"},{"name":"behaves like an adjustment source #destroy when order incomplete example at ./spec/support/concerns/adjustment_source.rb:21","suite":"Spree::Promotion::Actions::FreeShipping at ./spec/models/spree/promotion/actions/free_shipping_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/actions/free_shipping_spec.rb"},{"name":"behaves like an adjustment source #destroy when order is complete example at ./spec/support/concerns/adjustment_source.rb:27","suite":"Spree::Promotion::Actions::FreeShipping at ./spec/models/spree/promotion/actions/free_shipping_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/actions/free_shipping_spec.rb"},{"name":"behaves like an adjustment source #destroy when order is complete example at ./spec/support/concerns/adjustment_source.rb:28","suite":"Spree::Promotion::Actions::FreeShipping at ./spec/models/spree/promotion/actions/free_shipping_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:2\"}}","suiteSourceFile":"core/spec/models/spree/promotion/actions/free_shipping_spec.rb"},{"name":"#perform creates a discount with correct negative amount","suite":"Spree::Promotion::Actions::FreeShipping at ./spec/models/spree/promotion/actions/free_shipping_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/actions/free_shipping_spec.rb"},{"name":"#perform does not create a discount when order already has one from this promotion","suite":"Spree::Promotion::Actions::FreeShipping at ./spec/models/spree/promotion/actions/free_shipping_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","suiteSourceFile":"core/spec/models/spree/promotion/actions/free_shipping_spec.rb"},{"name":"#perform when shipping methods are configured to be free can create adjustment with amount equal to 0","suite":"Spree::Promotion::Actions::FreeShipping at ./spec/models/spree/promotion/actions/free_shipping_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/actions/free_shipping_spec.rb"},{"name":"preferred country_id is set is eligible for correct country","suite":"Spree::Promotion::Rules::Country at ./spec/models/spree/promotion/rules/country_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/country_spec.rb"},{"name":"preferred country_id is set is not eligible for incorrect country","suite":"Spree::Promotion::Rules::Country at ./spec/models/spree/promotion/rules/country_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/country_spec.rb"},{"name":"preferred country_iso is set is eligible for correct country","suite":"Spree::Promotion::Rules::Country at ./spec/models/spree/promotion/rules/country_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/country_spec.rb"},{"name":"preferred country_iso is set is not eligible for incorrect country","suite":"Spree::Promotion::Rules::Country at ./spec/models/spree/promotion/rules/country_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/country_spec.rb"},{"name":"preferred country is not set is eligible for default country","suite":"Spree::Promotion::Rules::Country at ./spec/models/spree/promotion/rules/country_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/country_spec.rb"},{"name":"preferred country is not set is not eligible for incorrect country","suite":"Spree::Promotion::Rules::Country at ./spec/models/spree/promotion/rules/country_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/country_spec.rb"},{"name":"preferred currency is set is eligible for correct currency","suite":"Spree::Promotion::Rules::Currency at ./spec/models/spree/promotion/rules/currency_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/currency_spec.rb"},{"name":"preferred currency is set is not eligible for incorrect currency","suite":"Spree::Promotion::Rules::Currency at ./spec/models/spree/promotion/rules/currency_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/currency_spec.rb"},{"name":"#applicable? when promotable is an order example at ./spec/models/spree/promotion/rules/currency_spec.rb:31","suite":"Spree::Promotion::Rules::Currency at ./spec/models/spree/promotion/rules/currency_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/currency_spec.rb"},{"name":"#applicable? when promotable is not an order example at ./spec/models/spree/promotion/rules/currency_spec.rb:36","suite":"Spree::Promotion::Rules::Currency at ./spec/models/spree/promotion/rules/currency_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/currency_spec.rb"},{"name":"#applicable? returns true for orders","suite":"Spree::Promotion::Rules::CustomerGroup at ./spec/models/spree/promotion/rules/customer_group_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/customer_group_spec.rb"},{"name":"#applicable? returns false for non-orders","suite":"Spree::Promotion::Rules::CustomerGroup at ./spec/models/spree/promotion/rules/customer_group_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/customer_group_spec.rb"},{"name":"#eligible? when no customer groups are configured is not eligible","suite":"Spree::Promotion::Rules::CustomerGroup at ./spec/models/spree/promotion/rules/customer_group_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/customer_group_spec.rb"},{"name":"#eligible? when order has no user is not eligible","suite":"Spree::Promotion::Rules::CustomerGroup at ./spec/models/spree/promotion/rules/customer_group_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/customer_group_spec.rb"},{"name":"#eligible? when user is in the customer group is eligible","suite":"Spree::Promotion::Rules::CustomerGroup at ./spec/models/spree/promotion/rules/customer_group_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/customer_group_spec.rb"},{"name":"#eligible? when user is not in any configured customer group is not eligible","suite":"Spree::Promotion::Rules::CustomerGroup at ./spec/models/spree/promotion/rules/customer_group_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:4:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/customer_group_spec.rb"},{"name":"#eligible? when user is in one of multiple configured customer groups is eligible","suite":"Spree::Promotion::Rules::CustomerGroup at ./spec/models/spree/promotion/rules/customer_group_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:5:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/customer_group_spec.rb"},{"name":"#eligible? when customer_group_ids contains strings is eligible","suite":"Spree::Promotion::Rules::CustomerGroup at ./spec/models/spree/promotion/rules/customer_group_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:6:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/customer_group_spec.rb"},{"name":"without a user or email example at ./spec/models/spree/promotion/rules/first_order_spec.rb:11","suite":"Spree::Promotion::Rules::FirstOrder at ./spec/models/spree/promotion/rules/first_order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/first_order_spec.rb"},{"name":"without a user or email sets an error message","suite":"Spree::Promotion::Rules::FirstOrder at ./spec/models/spree/promotion/rules/first_order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/first_order_spec.rb"},{"name":"first order for a signed user with no completed orders example at ./spec/models/spree/promotion/rules/first_order_spec.rb:25","suite":"Spree::Promotion::Rules::FirstOrder at ./spec/models/spree/promotion/rules/first_order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/first_order_spec.rb"},{"name":"first order for a signed user with no completed orders is eligible when user passed in payload data","suite":"Spree::Promotion::Rules::FirstOrder at ./spec/models/spree/promotion/rules/first_order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/first_order_spec.rb"},{"name":"first order for a signed user with completed orders is eligible when checked against first completed order","suite":"Spree::Promotion::Rules::FirstOrder at ./spec/models/spree/promotion/rules/first_order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/first_order_spec.rb"},{"name":"first order for a signed user with completed orders with another order example at ./spec/models/spree/promotion/rules/first_order_spec.rb:47","suite":"Spree::Promotion::Rules::FirstOrder at ./spec/models/spree/promotion/rules/first_order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/first_order_spec.rb"},{"name":"first order for a signed user with completed orders with another order sets an error message","suite":"Spree::Promotion::Rules::FirstOrder at ./spec/models/spree/promotion/rules/first_order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:2:2:2\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/first_order_spec.rb"},{"name":"first order for a guest user with no other orders example at ./spec/models/spree/promotion/rules/first_order_spec.rb:64","suite":"Spree::Promotion::Rules::FirstOrder at ./spec/models/spree/promotion/rules/first_order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/first_order_spec.rb"},{"name":"first order for a guest user with another order example at ./spec/models/spree/promotion/rules/first_order_spec.rb:70","suite":"Spree::Promotion::Rules::FirstOrder at ./spec/models/spree/promotion/rules/first_order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/first_order_spec.rb"},{"name":"first order for a guest user with another order sets an error message","suite":"Spree::Promotion::Rules::FirstOrder at ./spec/models/spree/promotion/rules/first_order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:2:2\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/first_order_spec.rb"},{"name":"preferred operator_min set to gt and preferred operator_max set to lt and item total is lower than preferred maximum amount and item total is higher than preferred minimum amount is eligible","suite":"Spree::Promotion::Rules::ItemTotal at ./spec/models/spree/promotion/rules/item_total_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/item_total_spec.rb"},{"name":"preferred operator_min set to gt and preferred operator_max set to lt and item total is lower than preferred maximum amount and item total is equal to the preferred minimum amount is not eligible","suite":"Spree::Promotion::Rules::ItemTotal at ./spec/models/spree/promotion/rules/item_total_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/item_total_spec.rb"},{"name":"preferred operator_min set to gt and preferred operator_max set to lt and item total is lower than preferred maximum amount and item total is equal to the preferred minimum amount set an error message","suite":"Spree::Promotion::Rules::ItemTotal at ./spec/models/spree/promotion/rules/item_total_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:2\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/item_total_spec.rb"},{"name":"preferred operator_min set to gt and preferred operator_max set to lt and item total is lower than preferred maximum amount and item total is lower to the preferred minimum amount is not eligible","suite":"Spree::Promotion::Rules::ItemTotal at ./spec/models/spree/promotion/rules/item_total_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/item_total_spec.rb"},{"name":"preferred operator_min set to gt and preferred operator_max set to lt and item total is lower than preferred maximum amount and item total is lower to the preferred minimum amount set an error message","suite":"Spree::Promotion::Rules::ItemTotal at ./spec/models/spree/promotion/rules/item_total_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:2\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/item_total_spec.rb"},{"name":"preferred operator_min set to gt and preferred operator_max set to lt and item total is equal to the preferred maximum amount is not eligible","suite":"Spree::Promotion::Rules::ItemTotal at ./spec/models/spree/promotion/rules/item_total_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/item_total_spec.rb"},{"name":"preferred operator_min set to gt and preferred operator_max set to lt and item total is equal to the preferred maximum amount set an error message","suite":"Spree::Promotion::Rules::ItemTotal at ./spec/models/spree/promotion/rules/item_total_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/item_total_spec.rb"},{"name":"preferred operator_min set to gt and preferred operator_max set to lt and item total is higher than the preferred maximum amount is not eligible","suite":"Spree::Promotion::Rules::ItemTotal at ./spec/models/spree/promotion/rules/item_total_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/item_total_spec.rb"},{"name":"preferred operator_min set to gt and preferred operator_max set to lt and item total is higher than the preferred maximum amount set an error message","suite":"Spree::Promotion::Rules::ItemTotal at ./spec/models/spree/promotion/rules/item_total_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:2\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/item_total_spec.rb"},{"name":"preferred operator set to gt and preferred operator_max set to lte and item total is lower than preferred maximum amount and item total is higher than preferred minimum amount is eligible","suite":"Spree::Promotion::Rules::ItemTotal at ./spec/models/spree/promotion/rules/item_total_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/item_total_spec.rb"},{"name":"preferred operator set to gt and preferred operator_max set to lte and item total is lower than preferred maximum amount and item total is equal to the preferred minimum amount is not eligible","suite":"Spree::Promotion::Rules::ItemTotal at ./spec/models/spree/promotion/rules/item_total_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/item_total_spec.rb"},{"name":"preferred operator set to gt and preferred operator_max set to lte and item total is lower than preferred maximum amount and item total is equal to the preferred minimum amount set an error message","suite":"Spree::Promotion::Rules::ItemTotal at ./spec/models/spree/promotion/rules/item_total_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:2:2\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/item_total_spec.rb"},{"name":"preferred operator set to gt and preferred operator_max set to lte and item total is lower than preferred maximum amount and item total is lower to the preferred minimum amount is not eligible","suite":"Spree::Promotion::Rules::ItemTotal at ./spec/models/spree/promotion/rules/item_total_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/item_total_spec.rb"},{"name":"preferred operator set to gt and preferred operator_max set to lte and item total is lower than preferred maximum amount and item total is lower to the preferred minimum amount set an error message","suite":"Spree::Promotion::Rules::ItemTotal at ./spec/models/spree/promotion/rules/item_total_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:3:2\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/item_total_spec.rb"},{"name":"preferred operator set to gt and preferred operator_max set to lte and item total is equal to the preferred maximum amount is not eligible","suite":"Spree::Promotion::Rules::ItemTotal at ./spec/models/spree/promotion/rules/item_total_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/item_total_spec.rb"},{"name":"preferred operator set to gt and preferred operator_max set to lte and item total is higher than the preferred maximum amount is not eligible","suite":"Spree::Promotion::Rules::ItemTotal at ./spec/models/spree/promotion/rules/item_total_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/item_total_spec.rb"},{"name":"preferred operator set to gt and preferred operator_max set to lte and item total is higher than the preferred maximum amount set an error message","suite":"Spree::Promotion::Rules::ItemTotal at ./spec/models/spree/promotion/rules/item_total_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:2\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/item_total_spec.rb"},{"name":"preferred operator set to gte and preferred operator_max set to lt and item total is lower than preferred maximum amount and item total is higher than preferred minimum amount is eligible","suite":"Spree::Promotion::Rules::ItemTotal at ./spec/models/spree/promotion/rules/item_total_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/item_total_spec.rb"},{"name":"preferred operator set to gte and preferred operator_max set to lt and item total is lower than preferred maximum amount and item total is equal to the preferred minimum amount is not eligible","suite":"Spree::Promotion::Rules::ItemTotal at ./spec/models/spree/promotion/rules/item_total_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/item_total_spec.rb"},{"name":"preferred operator set to gte and preferred operator_max set to lt and item total is lower than preferred maximum amount and item total is lower to the preferred minimum amount is not eligible","suite":"Spree::Promotion::Rules::ItemTotal at ./spec/models/spree/promotion/rules/item_total_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/item_total_spec.rb"},{"name":"preferred operator set to gte and preferred operator_max set to lt and item total is lower than preferred maximum amount and item total is lower to the preferred minimum amount set an error message","suite":"Spree::Promotion::Rules::ItemTotal at ./spec/models/spree/promotion/rules/item_total_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:3:2\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/item_total_spec.rb"},{"name":"preferred operator set to gte and preferred operator_max set to lt and item total is equal to the preferred maximum amount is not eligible","suite":"Spree::Promotion::Rules::ItemTotal at ./spec/models/spree/promotion/rules/item_total_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/item_total_spec.rb"},{"name":"preferred operator set to gte and preferred operator_max set to lt and item total is equal to the preferred maximum amount set an error message","suite":"Spree::Promotion::Rules::ItemTotal at ./spec/models/spree/promotion/rules/item_total_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:2\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/item_total_spec.rb"},{"name":"preferred operator set to gte and preferred operator_max set to lt and item total is higher than the preferred maximum amount is not eligible","suite":"Spree::Promotion::Rules::ItemTotal at ./spec/models/spree/promotion/rules/item_total_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/item_total_spec.rb"},{"name":"preferred operator set to gte and preferred operator_max set to lt and item total is higher than the preferred maximum amount set an error message","suite":"Spree::Promotion::Rules::ItemTotal at ./spec/models/spree/promotion/rules/item_total_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3:2\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/item_total_spec.rb"},{"name":"preferred operator set to gte and preferred operator_max set to lte and item total is lower than preferred maximum amount and item total is higher than preferred minimum amount is eligible","suite":"Spree::Promotion::Rules::ItemTotal at ./spec/models/spree/promotion/rules/item_total_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/item_total_spec.rb"},{"name":"preferred operator set to gte and preferred operator_max set to lte and item total is lower than preferred maximum amount and item total is equal to the preferred minimum amount is not eligible","suite":"Spree::Promotion::Rules::ItemTotal at ./spec/models/spree/promotion/rules/item_total_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/item_total_spec.rb"},{"name":"preferred operator set to gte and preferred operator_max set to lte and item total is lower than preferred maximum amount and item total is lower to the preferred minimum amount is not eligible","suite":"Spree::Promotion::Rules::ItemTotal at ./spec/models/spree/promotion/rules/item_total_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/item_total_spec.rb"},{"name":"preferred operator set to gte and preferred operator_max set to lte and item total is lower than preferred maximum amount and item total is lower to the preferred minimum amount set an error message","suite":"Spree::Promotion::Rules::ItemTotal at ./spec/models/spree/promotion/rules/item_total_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:3:2\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/item_total_spec.rb"},{"name":"preferred operator set to gte and preferred operator_max set to lte and item total is equal to the preferred maximum amount is not eligible","suite":"Spree::Promotion::Rules::ItemTotal at ./spec/models/spree/promotion/rules/item_total_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/item_total_spec.rb"},{"name":"preferred operator set to gte and preferred operator_max set to lte and item total is higher than the preferred maximum amount is not eligible","suite":"Spree::Promotion::Rules::ItemTotal at ./spec/models/spree/promotion/rules/item_total_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/item_total_spec.rb"},{"name":"preferred operator set to gte and preferred operator_max set to lte and item total is higher than the preferred maximum amount set an error message","suite":"Spree::Promotion::Rules::ItemTotal at ./spec/models/spree/promotion/rules/item_total_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3:2\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/item_total_spec.rb"},{"name":"when preferred amount max is not set and item total is higher than preferred minimum amount is eligible","suite":"Spree::Promotion::Rules::ItemTotal at ./spec/models/spree/promotion/rules/item_total_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/item_total_spec.rb"},{"name":"when preferred amount max is not set and item total is equal to the preferred minimum amount is not eligible","suite":"Spree::Promotion::Rules::ItemTotal at ./spec/models/spree/promotion/rules/item_total_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/item_total_spec.rb"},{"name":"when preferred amount max is not set and item total is equal to the preferred minimum amount set an error message","suite":"Spree::Promotion::Rules::ItemTotal at ./spec/models/spree/promotion/rules/item_total_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:2\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/item_total_spec.rb"},{"name":"when preferred amount max is not set and item total is lower than preferred minimum amount is not eligible","suite":"Spree::Promotion::Rules::ItemTotal at ./spec/models/spree/promotion/rules/item_total_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/item_total_spec.rb"},{"name":"when preferred amount max is not set and item total is lower than preferred minimum amount set an error message","suite":"Spree::Promotion::Rules::ItemTotal at ./spec/models/spree/promotion/rules/item_total_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3:2\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/item_total_spec.rb"},{"name":"#eligible?(order) when the order is assigned to a user when the user has used this promotion before example at ./spec/models/spree/promotion/rules/one_use_per_user_spec.rb:23","suite":"Spree::Promotion::Rules::OneUsePerUser at ./spec/models/spree/promotion/rules/one_use_per_user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/one_use_per_user_spec.rb"},{"name":"#eligible?(order) when the order is assigned to a user when the user has used this promotion before sets an error message","suite":"Spree::Promotion::Rules::OneUsePerUser at ./spec/models/spree/promotion/rules/one_use_per_user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/one_use_per_user_spec.rb"},{"name":"#eligible?(order) when the order is assigned to a user when the user has not used this promotion before example at ./spec/models/spree/promotion/rules/one_use_per_user_spec.rb:32","suite":"Spree::Promotion::Rules::OneUsePerUser at ./spec/models/spree/promotion/rules/one_use_per_user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/one_use_per_user_spec.rb"},{"name":"#eligible?(order) when the order is not assigned to a user example at ./spec/models/spree/promotion/rules/one_use_per_user_spec.rb:39","suite":"Spree::Promotion::Rules::OneUsePerUser at ./spec/models/spree/promotion/rules/one_use_per_user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/one_use_per_user_spec.rb"},{"name":"#eligible?(order) when the order is not assigned to a user sets an error message","suite":"Spree::Promotion::Rules::OneUsePerUser at ./spec/models/spree/promotion/rules/one_use_per_user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/one_use_per_user_spec.rb"},{"name":"setting eligible values parses ids","suite":"Spree::Promotion::Rules::OptionValue at ./spec/models/spree/promotion/rules/option_value_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/option_value_spec.rb"},{"name":"#applicable? when promotable is an order example at ./spec/models/spree/promotion/rules/option_value_spec.rb:26","suite":"Spree::Promotion::Rules::OptionValue at ./spec/models/spree/promotion/rules/option_value_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/option_value_spec.rb"},{"name":"#applicable? when promotable is not an order example at ./spec/models/spree/promotion/rules/option_value_spec.rb:32","suite":"Spree::Promotion::Rules::OptionValue at ./spec/models/spree/promotion/rules/option_value_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/option_value_spec.rb"},{"name":"#eligible? when there are any applicable line items example at ./spec/models/spree/promotion/rules/option_value_spec.rb:48","suite":"Spree::Promotion::Rules::OptionValue at ./spec/models/spree/promotion/rules/option_value_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/option_value_spec.rb"},{"name":"#eligible? when there are no applicable line items example at ./spec/models/spree/promotion/rules/option_value_spec.rb:56","suite":"Spree::Promotion::Rules::OptionValue at ./spec/models/spree/promotion/rules/option_value_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/option_value_spec.rb"},{"name":"#actionable? when the line item has the correct product when all of the option values match example at ./spec/models/spree/promotion/rules/option_value_spec.rb:99","suite":"Spree::Promotion::Rules::OptionValue at ./spec/models/spree/promotion/rules/option_value_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/option_value_spec.rb"},{"name":"#actionable? when the line item has the correct product when not all of the option values match example at ./spec/models/spree/promotion/rules/option_value_spec.rb:110","suite":"Spree::Promotion::Rules::OptionValue at ./spec/models/spree/promotion/rules/option_value_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/option_value_spec.rb"},{"name":"#actionable? when the line item's product doesn't match example at ./spec/models/spree/promotion/rules/option_value_spec.rb:122","suite":"Spree::Promotion::Rules::OptionValue at ./spec/models/spree/promotion/rules/option_value_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/option_value_spec.rb"},{"name":"#eligible?(order) is eligible if there are no products","suite":"Spree::Promotion::Rules::Product at ./spec/models/spree/promotion/rules/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/product_spec.rb"},{"name":"#eligible?(order) with 'any' match policy is eligible if any of the products is in eligible products","suite":"Spree::Promotion::Rules::Product at ./spec/models/spree/promotion/rules/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/product_spec.rb"},{"name":"#eligible?(order) with 'any' match policy when none of the products are eligible products example at ./spec/models/spree/promotion/rules/product_spec.rb:34","suite":"Spree::Promotion::Rules::Product at ./spec/models/spree/promotion/rules/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/product_spec.rb"},{"name":"#eligible?(order) with 'any' match policy when none of the products are eligible products sets an error message","suite":"Spree::Promotion::Rules::Product at ./spec/models/spree/promotion/rules/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:2\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/product_spec.rb"},{"name":"#eligible?(order) with 'all' match policy is eligible if all of the eligible products are ordered","suite":"Spree::Promotion::Rules::Product at ./spec/models/spree/promotion/rules/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/product_spec.rb"},{"name":"#eligible?(order) with 'all' match policy when any of the eligible products is not ordered example at ./spec/models/spree/promotion/rules/product_spec.rb:58","suite":"Spree::Promotion::Rules::Product at ./spec/models/spree/promotion/rules/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:2:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/product_spec.rb"},{"name":"#eligible?(order) with 'all' match policy when any of the eligible products is not ordered sets an error message","suite":"Spree::Promotion::Rules::Product at ./spec/models/spree/promotion/rules/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:2:2\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/product_spec.rb"},{"name":"#eligible?(order) with 'none' match policy is eligible if none of the order's products are in eligible products","suite":"Spree::Promotion::Rules::Product at ./spec/models/spree/promotion/rules/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/product_spec.rb"},{"name":"#eligible?(order) with 'none' match policy when any of the order's products are in eligible products example at ./spec/models/spree/promotion/rules/product_spec.rb:82","suite":"Spree::Promotion::Rules::Product at ./spec/models/spree/promotion/rules/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:2:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/product_spec.rb"},{"name":"#eligible?(order) with 'none' match policy when any of the order's products are in eligible products sets an error message","suite":"Spree::Promotion::Rules::Product at ./spec/models/spree/promotion/rules/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:2:2\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/product_spec.rb"},{"name":"#actionable? with 'any' match policy for product in rule example at ./spec/models/spree/promotion/rules/product_spec.rb:112","suite":"Spree::Promotion::Rules::Product at ./spec/models/spree/promotion/rules/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/product_spec.rb"},{"name":"#actionable? with 'any' match policy for product not in rule example at ./spec/models/spree/promotion/rules/product_spec.rb:118","suite":"Spree::Promotion::Rules::Product at ./spec/models/spree/promotion/rules/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/product_spec.rb"},{"name":"#actionable? with 'all' match policy for product in rule example at ./spec/models/spree/promotion/rules/product_spec.rb:128","suite":"Spree::Promotion::Rules::Product at ./spec/models/spree/promotion/rules/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/product_spec.rb"},{"name":"#actionable? with 'all' match policy for product not in rule example at ./spec/models/spree/promotion/rules/product_spec.rb:134","suite":"Spree::Promotion::Rules::Product at ./spec/models/spree/promotion/rules/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/product_spec.rb"},{"name":"#actionable? with 'none' match policy for product in rule example at ./spec/models/spree/promotion/rules/product_spec.rb:144","suite":"Spree::Promotion::Rules::Product at ./spec/models/spree/promotion/rules/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:1:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/product_spec.rb"},{"name":"#actionable? with 'none' match policy for product not in rule example at ./spec/models/spree/promotion/rules/product_spec.rb:150","suite":"Spree::Promotion::Rules::Product at ./spec/models/spree/promotion/rules/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:2:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/product_spec.rb"},{"name":"#add_products adds the products to the rule","suite":"Spree::Promotion::Rules::Product at ./spec/models/spree/promotion/rules/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/product_spec.rb"},{"name":"#add_products removes the products from the rule","suite":"Spree::Promotion::Rules::Product at ./spec/models/spree/promotion/rules/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/product_spec.rb"},{"name":"#add_products does not remove the products when nil is passed","suite":"Spree::Promotion::Rules::Product at ./spec/models/spree/promotion/rules/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/product_spec.rb"},{"name":"#add_products touches the record to invalidate cache","suite":"Spree::Promotion::Rules::Product at ./spec/models/spree/promotion/rules/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/product_spec.rb"},{"name":"#eligible?(order) with any match policy is eligible if order does has any preferred taxon","suite":"Spree::Promotion::Rules::Taxon at ./spec/models/spree/promotion/rules/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/taxon_spec.rb"},{"name":"#eligible?(order) with any match policy when order contains items from different taxons acts on a product within the eligible taxon","suite":"Spree::Promotion::Rules::Taxon at ./spec/models/spree/promotion/rules/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/taxon_spec.rb"},{"name":"#eligible?(order) with any match policy when order contains items from different taxons does not act on a product in another taxon","suite":"Spree::Promotion::Rules::Taxon at ./spec/models/spree/promotion/rules/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:2\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/taxon_spec.rb"},{"name":"#eligible?(order) with any match policy when order does not have any preferred taxon example at ./spec/models/spree/promotion/rules/taxon_spec.rb:44","suite":"Spree::Promotion::Rules::Taxon at ./spec/models/spree/promotion/rules/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/taxon_spec.rb"},{"name":"#eligible?(order) with any match policy when order does not have any preferred taxon sets an error message","suite":"Spree::Promotion::Rules::Taxon at ./spec/models/spree/promotion/rules/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:2\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/taxon_spec.rb"},{"name":"#eligible?(order) with any match policy when a product has a taxon child of a taxon rule example at ./spec/models/spree/promotion/rules/taxon_spec.rb:59","suite":"Spree::Promotion::Rules::Taxon at ./spec/models/spree/promotion/rules/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/taxon_spec.rb"},{"name":"#eligible?(order) with all match policy is eligible order has all preferred taxons","suite":"Spree::Promotion::Rules::Taxon at ./spec/models/spree/promotion/rules/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/taxon_spec.rb"},{"name":"#eligible?(order) with all match policy when order does not have all preferred taxons example at ./spec/models/spree/promotion/rules/taxon_spec.rb:80","suite":"Spree::Promotion::Rules::Taxon at ./spec/models/spree/promotion/rules/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/taxon_spec.rb"},{"name":"#eligible?(order) with all match policy when order does not have all preferred taxons sets an error message","suite":"Spree::Promotion::Rules::Taxon at ./spec/models/spree/promotion/rules/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:2\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/taxon_spec.rb"},{"name":"#eligible?(order) with all match policy when a product has a taxon child of a taxon rule example at ./spec/models/spree/promotion/rules/taxon_spec.rb:99","suite":"Spree::Promotion::Rules::Taxon at ./spec/models/spree/promotion/rules/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:3:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/taxon_spec.rb"},{"name":"#add_taxons adds the taxons to the rule","suite":"Spree::Promotion::Rules::Taxon at ./spec/models/spree/promotion/rules/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/taxon_spec.rb"},{"name":"#add_taxons removes the taxons from the rule","suite":"Spree::Promotion::Rules::Taxon at ./spec/models/spree/promotion/rules/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/taxon_spec.rb"},{"name":"#add_taxons does not remove the taxons when nil is passed","suite":"Spree::Promotion::Rules::Taxon at ./spec/models/spree/promotion/rules/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/taxon_spec.rb"},{"name":"#eligible?(order) is eligible if order has an associated user","suite":"Spree::Promotion::Rules::UserLoggedIn at ./spec/models/spree/promotion/rules/user_logged_in_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/user_logged_in_spec.rb"},{"name":"#eligible?(order) when user is not logged in example at ./spec/models/spree/promotion/rules/user_logged_in_spec.rb:19","suite":"Spree::Promotion::Rules::UserLoggedIn at ./spec/models/spree/promotion/rules/user_logged_in_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/user_logged_in_spec.rb"},{"name":"#eligible?(order) when user is not logged in sets an error message","suite":"Spree::Promotion::Rules::UserLoggedIn at ./spec/models/spree/promotion/rules/user_logged_in_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/user_logged_in_spec.rb"},{"name":"#eligible? is not eligible if users are not provided","suite":"Spree::Promotion::Rules::User at ./spec/models/spree/promotion/rules/user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/user_spec.rb"},{"name":"#eligible? can assign to user_ids","suite":"Spree::Promotion::Rules::User at ./spec/models/spree/promotion/rules/user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/user_spec.rb"},{"name":"#eligible? when users include user placing the order is eligible if users include user placing the order","suite":"Spree::Promotion::Rules::User at ./spec/models/spree/promotion/rules/user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/user_spec.rb"},{"name":"#eligible? when users does not include user placing the order is not eligible if user placing the order is not listed","suite":"Spree::Promotion::Rules::User at ./spec/models/spree/promotion/rules/user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/user_spec.rb"},{"name":"#add_users adds users to the promotion rule","suite":"Spree::Promotion::Rules::User at ./spec/models/spree/promotion/rules/user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/user_spec.rb"},{"name":"#add_users removes users from the promotion rule","suite":"Spree::Promotion::Rules::User at ./spec/models/spree/promotion/rules/user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/user_spec.rb"},{"name":"#add_users does not remove the users when nil is passed","suite":"Spree::Promotion::Rules::User at ./spec/models/spree/promotion/rules/user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/user_spec.rb"},{"name":"#add_users touches the record to invalidate cache","suite":"Spree::Promotion::Rules::User at ./spec/models/spree/promotion/rules/user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:4\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/user_spec.rb"},{"name":"forces developer to implement 'perform' method","suite":"Spree::PromotionAction at ./spec/models/spree/promotion_action_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_action_spec.rb"},{"name":"validation when all required attributes are specified example at ./spec/models/spree/promotion_category_spec.rb:10","suite":"Spree::PromotionCategory at ./spec/models/spree/promotion_category_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_category_spec.rb"},{"name":"validation when name is missing example at ./spec/models/spree/promotion_category_spec.rb:16","suite":"Spree::PromotionCategory at ./spec/models/spree/promotion_category_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_category_spec.rb"},{"name":"activates in LineItem level promotion with no rules creates the adjustment","suite":"Spree::PromotionHandler::Cart at ./spec/models/spree/promotion_handler/cart_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_handler/cart_spec.rb"},{"name":"activates in LineItem level promotion includes item involved creates the adjustment","suite":"Spree::PromotionHandler::Cart at ./spec/models/spree/promotion_handler/cart_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_handler/cart_spec.rb"},{"name":"activates in LineItem level promotion has item total rule creates the adjustment","suite":"Spree::PromotionHandler::Cart at ./spec/models/spree/promotion_handler/cart_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_handler/cart_spec.rb"},{"name":"activates in Order level promotion with no rules creates the adjustment","suite":"Spree::PromotionHandler::Cart at ./spec/models/spree/promotion_handler/cart_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_handler/cart_spec.rb"},{"name":"activates in Order level promotion has item total rule creates the adjustment","suite":"Spree::PromotionHandler::Cart at ./spec/models/spree/promotion_handler/cart_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_handler/cart_spec.rb"},{"name":"activates promotions associated with the order creates the adjustment","suite":"Spree::PromotionHandler::Cart at ./spec/models/spree/promotion_handler/cart_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_handler/cart_spec.rb"},{"name":"returns self in apply","suite":"Spree::PromotionHandler::Coupon at ./spec/models/spree/promotion_handler/coupon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_handler/coupon_spec.rb"},{"name":"status messages #set_success_code has status_code","suite":"Spree::PromotionHandler::Coupon at ./spec/models/spree/promotion_handler/coupon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_handler/coupon_spec.rb"},{"name":"status messages #set_success_code has success message","suite":"Spree::PromotionHandler::Coupon at ./spec/models/spree/promotion_handler/coupon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:2\"}}","suiteSourceFile":"core/spec/models/spree/promotion_handler/coupon_spec.rb"},{"name":"status messages #set_error_code has status_code","suite":"Spree::PromotionHandler::Coupon at ./spec/models/spree/promotion_handler/coupon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_handler/coupon_spec.rb"},{"name":"status messages #set_error_code has error message","suite":"Spree::PromotionHandler::Coupon at ./spec/models/spree/promotion_handler/coupon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:2\"}}","suiteSourceFile":"core/spec/models/spree/promotion_handler/coupon_spec.rb"},{"name":"coupon code promotion doesnt exist doesnt fetch any promotion","suite":"Spree::PromotionHandler::Coupon at ./spec/models/spree/promotion_handler/coupon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_handler/coupon_spec.rb"},{"name":"coupon code promotion doesnt exist with no actions defined populates error message","suite":"Spree::PromotionHandler::Coupon at ./spec/models/spree/promotion_handler/coupon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_handler/coupon_spec.rb"},{"name":"existing coupon code promotion fetches with given code","suite":"Spree::PromotionHandler::Coupon at ./spec/models/spree/promotion_handler/coupon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_handler/coupon_spec.rb"},{"name":"existing coupon code promotion with a per-item adjustment action right coupon given with correct coupon code casing successfully activates promo","suite":"Spree::PromotionHandler::Coupon at ./spec/models/spree/promotion_handler/coupon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_handler/coupon_spec.rb"},{"name":"existing coupon code promotion with a per-item adjustment action right coupon given with correct coupon code casing calls update_with_updater!","suite":"Spree::PromotionHandler::Coupon at ./spec/models/spree/promotion_handler/coupon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/promotion_handler/coupon_spec.rb"},{"name":"existing coupon code promotion with a per-item adjustment action right coupon given with correct coupon code casing coupon already applied to the order","suite":"Spree::PromotionHandler::Coupon at ./spec/models/spree/promotion_handler/coupon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1:1:3\"}}","suiteSourceFile":"core/spec/models/spree/promotion_handler/coupon_spec.rb"},{"name":"existing coupon code promotion with a per-item adjustment action right coupon given with incorrect coupon code casing successfully activates promo","suite":"Spree::PromotionHandler::Coupon at ./spec/models/spree/promotion_handler/coupon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_handler/coupon_spec.rb"},{"name":"existing coupon code promotion with a per-item adjustment action coexists with a non coupon code promo successfully activates promo","suite":"Spree::PromotionHandler::Coupon at ./spec/models/spree/promotion_handler/coupon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_handler/coupon_spec.rb"},{"name":"existing coupon code promotion with a free-shipping adjustment action right coupon code given successfully activates promo","suite":"Spree::PromotionHandler::Coupon at ./spec/models/spree/promotion_handler/coupon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3:1:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_handler/coupon_spec.rb"},{"name":"existing coupon code promotion with a free-shipping adjustment action right coupon code given coupon already applied to the order","suite":"Spree::PromotionHandler::Coupon at ./spec/models/spree/promotion_handler/coupon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3:1:2\"}}","suiteSourceFile":"core/spec/models/spree/promotion_handler/coupon_spec.rb"},{"name":"existing coupon code promotion with a whole-order adjustment action right coupon given successfully activates promo","suite":"Spree::PromotionHandler::Coupon at ./spec/models/spree/promotion_handler/coupon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:4:1:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_handler/coupon_spec.rb"},{"name":"existing coupon code promotion with a whole-order adjustment action right coupon given coupon already applied to the order","suite":"Spree::PromotionHandler::Coupon at ./spec/models/spree/promotion_handler/coupon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:4:1:2\"}}","suiteSourceFile":"core/spec/models/spree/promotion_handler/coupon_spec.rb"},{"name":"existing coupon code promotion with a whole-order adjustment action right coupon given coupon fails to activate","suite":"Spree::PromotionHandler::Coupon at ./spec/models/spree/promotion_handler/coupon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:4:1:3\"}}","suiteSourceFile":"core/spec/models/spree/promotion_handler/coupon_spec.rb"},{"name":"existing coupon code promotion with a whole-order adjustment action right coupon given coupon code hit max usage","suite":"Spree::PromotionHandler::Coupon at ./spec/models/spree/promotion_handler/coupon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:4:1:4\"}}","suiteSourceFile":"core/spec/models/spree/promotion_handler/coupon_spec.rb"},{"name":"existing coupon code promotion with a whole-order adjustment action right coupon given when the a new coupon is less good notifies of better deal","suite":"Spree::PromotionHandler::Coupon at ./spec/models/spree/promotion_handler/coupon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:4:1:5:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_handler/coupon_spec.rb"},{"name":"existing coupon code promotion for an order with taxable line items and the product price is less than promo discount successfully applies the promo","suite":"Spree::PromotionHandler::Coupon at ./spec/models/spree/promotion_handler/coupon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:5:1:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_handler/coupon_spec.rb"},{"name":"existing coupon code promotion for an order with taxable line items and the product price is greater than promo discount successfully applies the promo","suite":"Spree::PromotionHandler::Coupon at ./spec/models/spree/promotion_handler/coupon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:5:2:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_handler/coupon_spec.rb"},{"name":"existing coupon code promotion for an order with taxable line items and multiple quantity per line item successfully applies the promo","suite":"Spree::PromotionHandler::Coupon at ./spec/models/spree/promotion_handler/coupon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:5:3:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_handler/coupon_spec.rb"},{"name":"existing coupon code promotion with a CreateLineItems action successfully activates promo","suite":"Spree::PromotionHandler::Coupon at ./spec/models/spree/promotion_handler/coupon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:6:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_handler/coupon_spec.rb"},{"name":"with coupon codes valid coupon successfully activates promo","suite":"Spree::PromotionHandler::Coupon at ./spec/models/spree/promotion_handler/coupon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_handler/coupon_spec.rb"},{"name":"with coupon codes valid coupon coupon already applied to the order","suite":"Spree::PromotionHandler::Coupon at ./spec/models/spree/promotion_handler/coupon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:2\"}}","suiteSourceFile":"core/spec/models/spree/promotion_handler/coupon_spec.rb"},{"name":"with coupon codes valid coupon with used coupon code does not activate promo","suite":"Spree::PromotionHandler::Coupon at ./spec/models/spree/promotion_handler/coupon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_handler/coupon_spec.rb"},{"name":"with coupon codes valid coupon #remove removes the promotion","suite":"Spree::PromotionHandler::Coupon at ./spec/models/spree/promotion_handler/coupon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_handler/coupon_spec.rb"},{"name":"with coupon codes valid coupon #remove touches the promotion","suite":"Spree::PromotionHandler::Coupon at ./spec/models/spree/promotion_handler/coupon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:4:2\"}}","suiteSourceFile":"core/spec/models/spree/promotion_handler/coupon_spec.rb"},{"name":"number of usages for one common promotion code hits max usage","suite":"Spree::PromotionHandler::Coupon at ./spec/models/spree/promotion_handler/coupon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_handler/coupon_spec.rb"},{"name":"number of usages for one-time unique promotion codes promotion can be used as many times as it has coupon codes","suite":"Spree::PromotionHandler::Coupon at ./spec/models/spree/promotion_handler/coupon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2:3\"}}","suiteSourceFile":"core/spec/models/spree/promotion_handler/coupon_spec.rb"},{"name":"number of usages for one-time unique promotion codes behaves like allows to use coupon code one time only example at ./spec/models/spree/promotion_handler/coupon_spec.rb:442","suite":"Spree::PromotionHandler::Coupon at ./spec/models/spree/promotion_handler/coupon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_handler/coupon_spec.rb"},{"name":"number of usages for one-time unique promotion codes behaves like allows to use coupon code one time only example at ./spec/models/spree/promotion_handler/coupon_spec.rb:442","suite":"Spree::PromotionHandler::Coupon at ./spec/models/spree/promotion_handler/coupon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_handler/coupon_spec.rb"},{"name":"for a gift card apply when gift card is not applied applies gift card","suite":"Spree::PromotionHandler::Coupon at ./spec/models/spree/promotion_handler/coupon_with_gift_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_handler/coupon_with_gift_card_spec.rb"},{"name":"for a gift card apply when the gift card is applied to another order doesn't apply the gift card to a new order","suite":"Spree::PromotionHandler::Coupon at ./spec/models/spree/promotion_handler/coupon_with_gift_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_handler/coupon_with_gift_card_spec.rb"},{"name":"for a gift card apply when gift card is expired returns error code","suite":"Spree::PromotionHandler::Coupon at ./spec/models/spree/promotion_handler/coupon_with_gift_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_handler/coupon_with_gift_card_spec.rb"},{"name":"for a gift card apply when gift card is already redeemed returns error code","suite":"Spree::PromotionHandler::Coupon at ./spec/models/spree/promotion_handler/coupon_with_gift_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_handler/coupon_with_gift_card_spec.rb"},{"name":"#remove when gift card is applied removes gift card","suite":"Spree::PromotionHandler::Coupon at ./spec/models/spree/promotion_handler/coupon_with_gift_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_handler/coupon_with_gift_card_spec.rb"},{"name":"activates in Shipment level creates the adjustment","suite":"Spree::PromotionHandler::FreeShipping at ./spec/models/spree/promotion_handler/free_shipping_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_handler/free_shipping_spec.rb"},{"name":"if promo has a code does adjust the shipment when applied to order","suite":"Spree::PromotionHandler::FreeShipping at ./spec/models/spree/promotion_handler/free_shipping_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_handler/free_shipping_spec.rb"},{"name":"if promo has a code does not adjust the shipment when not applied to order","suite":"Spree::PromotionHandler::FreeShipping at ./spec/models/spree/promotion_handler/free_shipping_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","suiteSourceFile":"core/spec/models/spree/promotion_handler/free_shipping_spec.rb"},{"name":"if promo has multiple codes does adjust the shipment when applied to order","suite":"Spree::PromotionHandler::FreeShipping at ./spec/models/spree/promotion_handler/free_shipping_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_handler/free_shipping_spec.rb"},{"name":"if promo has multiple codes does not adjust the shipment when not applied to order","suite":"Spree::PromotionHandler::FreeShipping at ./spec/models/spree/promotion_handler/free_shipping_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","suiteSourceFile":"core/spec/models/spree/promotion_handler/free_shipping_spec.rb"},{"name":"if promo has a path does not adjust the shipment","suite":"Spree::PromotionHandler::FreeShipping at ./spec/models/spree/promotion_handler/free_shipping_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_handler/free_shipping_spec.rb"},{"name":"activates at the right path","suite":"Spree::PromotionHandler::Page at ./spec/models/spree/promotion_handler/page_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_handler/page_spec.rb"},{"name":"does not activate at the wrong path","suite":"Spree::PromotionHandler::Page at ./spec/models/spree/promotion_handler/page_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3\"}}","suiteSourceFile":"core/spec/models/spree/promotion_handler/page_spec.rb"},{"name":"when promotion is expired is not activated","suite":"Spree::PromotionHandler::Page at ./spec/models/spree/promotion_handler/page_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_handler/page_spec.rb"},{"name":"#duplicate model fields returns a duplicate of a promotion with the path, name and code fields changed","suite":"Spree::PromotionHandler::PromotionDuplicator at ./spec/models/spree/promotion_handler/promotion_duplicator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_handler/promotion_duplicator_spec.rb"},{"name":"#duplicate model fields returns a duplicate of a promotion with all the fields (except the path, name and code fields) the same","suite":"Spree::PromotionHandler::PromotionDuplicator at ./spec/models/spree/promotion_handler/promotion_duplicator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/promotion_handler/promotion_duplicator_spec.rb"},{"name":"#duplicate model associations - rules copies all promotion rules","suite":"Spree::PromotionHandler::PromotionDuplicator at ./spec/models/spree/promotion_handler/promotion_duplicator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_handler/promotion_duplicator_spec.rb"},{"name":"#duplicate model associations - rules promotion rule's fields (except promotion_id) are the same","suite":"Spree::PromotionHandler::PromotionDuplicator at ./spec/models/spree/promotion_handler/promotion_duplicator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2\"}}","suiteSourceFile":"core/spec/models/spree/promotion_handler/promotion_duplicator_spec.rb"},{"name":"#duplicate model associations - rules assigns a new promotion rule to new promotion","suite":"Spree::PromotionHandler::PromotionDuplicator at ./spec/models/spree/promotion_handler/promotion_duplicator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:3\"}}","suiteSourceFile":"core/spec/models/spree/promotion_handler/promotion_duplicator_spec.rb"},{"name":"#duplicate model associations - actions copies all promotion actions","suite":"Spree::PromotionHandler::PromotionDuplicator at ./spec/models/spree/promotion_handler/promotion_duplicator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_handler/promotion_duplicator_spec.rb"},{"name":"#duplicate model associations - actions copies promotion stores","suite":"Spree::PromotionHandler::PromotionDuplicator at ./spec/models/spree/promotion_handler/promotion_duplicator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:2\"}}","suiteSourceFile":"core/spec/models/spree/promotion_handler/promotion_duplicator_spec.rb"},{"name":"#duplicate model associations - actions promotion action's fields (except promotion_id) are the same","suite":"Spree::PromotionHandler::PromotionDuplicator at ./spec/models/spree/promotion_handler/promotion_duplicator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:3\"}}","suiteSourceFile":"core/spec/models/spree/promotion_handler/promotion_duplicator_spec.rb"},{"name":"#duplicate model associations - actions assigns a new promotion action to new promotion","suite":"Spree::PromotionHandler::PromotionDuplicator at ./spec/models/spree/promotion_handler/promotion_duplicator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:4\"}}","suiteSourceFile":"core/spec/models/spree/promotion_handler/promotion_duplicator_spec.rb"},{"name":"#duplicate model associations - action's calculator copies promotion action's calculator","suite":"Spree::PromotionHandler::PromotionDuplicator at ./spec/models/spree/promotion_handler/promotion_duplicator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_handler/promotion_duplicator_spec.rb"},{"name":"#duplicate model associations - action's calculator assigns a new calculator to promotion action","suite":"Spree::PromotionHandler::PromotionDuplicator at ./spec/models/spree/promotion_handler/promotion_duplicator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:2\"}}","suiteSourceFile":"core/spec/models/spree/promotion_handler/promotion_duplicator_spec.rb"},{"name":"forces developer to implement eligible? method","suite":"Spree::PromotionRule at ./spec/models/spree/promotion_rule_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_rule_spec.rb"},{"name":"validates unique rules for a promotion","suite":"Spree::PromotionRule at ./spec/models/spree/promotion_rule_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2\"}}","suiteSourceFile":"core/spec/models/spree/promotion_rule_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:4","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:5","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:7","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:8","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:10","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:11","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"behaves like metadata reads data as symbolized keys","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"behaves like metadata reads data as not symbolized keys","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"behaves like metadata can query records by metadata properties","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:10\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"behaves like lifecycle events lifecycle events promotion.created publishes created event when record is created","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"behaves like lifecycle events lifecycle events promotion.updated publishes updated event when record is updated","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"behaves like lifecycle events lifecycle events promotion.deleted publishes deleted event when record is deleted","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"Validations valid_promotion is valid","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"Validations validates usage limit","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"Validations validates name","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"Validations can create multiple promos with the same code","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"Validations expires_at_must_be_later_than_starts_at starts_at is a date earlier than expires_at is valid","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:5:1:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"Validations expires_at_must_be_later_than_starts_at starts_at is a date earlier than expires_at is not valid example at ./spec/models/spree/promotion_spec.rb:55","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:5:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"Validations expires_at_must_be_later_than_starts_at starts_at is a date earlier than expires_at is not valid example at ./spec/models/spree/promotion_spec.rb:56","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:5:2:1:2\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"Validations expires_at_must_be_later_than_starts_at starts_at and expires_at are nil is valid","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:5:3:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"Callbacks #set_usage_limit_to_nil when promo has one code for all customers does not change usage_limit","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"Callbacks #set_usage_limit_to_nil when promo has unique codes sets usage_limit to nil","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"Callbacks #remove_coupons removes the coupons","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"scopes .coupons is expected to not include promotion without code","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"scopes .coupons is expected to include promotion with code","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:2\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"scopes .applied is expected to not include promotion not applied","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"scopes .applied is expected to include promotion applied","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:2\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"scopes .advertised is expected to not include promotion not advertised","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"scopes .advertised is expected to include promotion advertised","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3:2\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"#destroy deletes actions","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"#destroy deletes rules","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"#destroy if promotion was already used does not destroy the promotion","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:3:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"#save deeply autosaves records and preferences","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"#save allows to change promotion type from automatic to single discount code","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"#save allows to change promotion type from automatic to multiple discount codes","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:3\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"#save allows to change promotion type from single discount code to automatic","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:4\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"#save allows to change promotion type from multiple discount codes to automatic","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:5\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"#activate checks path if present","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"#activate does not perform actions against an order in a finalized state","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"#activate does activate if newer then order","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:3\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"#activate when activated assigns the order","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:4:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"#activate when not activated doesn't assign the order","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:5:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"#usage_limit_exceeded does not have its usage limit exceeded with no usage limit","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"#usage_limit_exceeded has its usage limit exceeded","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:2\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"#expired is not exipired","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"#expired is expired if it hasn't started yet","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:2\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"#expired is expired if it has already ended","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:3\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"#expired is not expired if it has started already","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:4\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"#expired is not expired if it has not ended yet","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:5\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"#expired is not expired if current time is within starts_at and expires_at range","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:6\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"#expired is not expired if usage limit is not exceeded","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:7\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"#credits_count counts eligible adjustments","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"#credits_count does not count ineligible adjustments","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"#adjusted_credits_count counts order level adjustments","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"#adjusted_credits_count counts item level adjustments","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:2\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"#products when it has product rules with products associated has products","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:1:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"#products when there's no product rule associated does not have products but still return an empty array","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:2:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"#eligible? when promotion is expired example at ./spec/models/spree/promotion_spec.rb:474","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:1:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"#eligible? when promotable is a Spree::LineItem and product is promotionable example at ./spec/models/spree/promotion_spec.rb:488","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"#eligible? when promotable is a Spree::LineItem and product is not promotionable example at ./spec/models/spree/promotion_spec.rb:494","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"#eligible? when promotable is a Spree::Order and it is empty example at ./spec/models/spree/promotion_spec.rb:502","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:3:1:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"#eligible? when promotable is a Spree::Order and it contains items and the items are all non-promotionable example at ./spec/models/spree/promotion_spec.rb:513","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:3:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"#eligible? when promotable is a Spree::Order and it contains items and at least one item is promotionable example at ./spec/models/spree/promotion_spec.rb:517","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:3:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"#eligible_rules when there are no rules returns true","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:1:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"#eligible_rules when there are no aplicable rules returns true","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:2:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"#eligible_rules with 'all' match policy when all rules are eligible returns the eligible rules","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:3:1:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"#eligible_rules with 'all' match policy when all rules are eligible does set anything to eligiblity errors","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:3:1:2\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"#eligible_rules with 'all' match policy when any of the rules is not eligible returns nil","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:3:2:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"#eligible_rules with 'all' match policy when any of the rules is not eligible sets eligibility errors to the first non-nil one","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:3:2:2\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"#eligible_rules with 'any' match policy has eligible rules if any of the rules are eligible","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:4:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"#eligible_rules with 'any' match policy when none of the rules are eligible returns nil","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:4:2:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"#eligible_rules with 'any' match policy when none of the rules are eligible sets eligibility errors to the first non-nil one","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:4:2:2\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"#line_item_actionable? when the order is eligible for promotion when there are no rules example at ./spec/models/spree/promotion_spec.rb:641","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"#line_item_actionable? when the order is eligible for promotion when there are rules when the match policy is all when all rules allow action on the line item example at ./spec/models/spree/promotion_spec.rb:651","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:1:2:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"#line_item_actionable? when the order is eligible for promotion when there are rules when the match policy is all when at least one rule does not allow action on the line item example at ./spec/models/spree/promotion_spec.rb:657","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:1:2:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"#line_item_actionable? when the order is eligible for promotion when there are rules when the match policy is any when at least one rule allows action on the line item example at ./spec/models/spree/promotion_spec.rb:667","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:1:2:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"#line_item_actionable? when the order is eligible for promotion when there are rules when the match policy is any when no rules allow action on the line item example at ./spec/models/spree/promotion_spec.rb:673","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:1:2:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"#line_item_actionable? when the order is not eligible for the promotion example at ./spec/models/spree/promotion_spec.rb:682","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:2:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"normalize blank values for code & path will save blank value as nil value instead","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:17:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"#with_coupon_code and code stored in uppercase finds the code with lowercase","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:1:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"#with_coupon_code when promotion has no actions then returns the one with an action","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:2:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"#with_coupon_code when promotion has no actions return the last one created","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:2:2\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"#with_coupon_code coupon from coupon code batch finds the code with lowercase","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:3:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"#with_coupon_code coupon from coupon code batch finds the code with uppercase","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:3:2\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"#used_by? when the user has used this promo when the order is complete example at ./spec/models/spree/promotion_spec.rb:756","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"#used_by? when the user has used this promo when the order is complete when the promotion is not eligible example at ./spec/models/spree/promotion_spec.rb:766","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"#used_by? when the user has used this promo when the order is complete when the only matching order is the excluded order example at ./spec/models/spree/promotion_spec.rb:772","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:1:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"#used_by? when the user has used this promo when the order is not complete example at ./spec/models/spree/promotion_spec.rb:779","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"#used_by? when the user has not used this promo example at ./spec/models/spree/promotion_spec.rb:784","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:2:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"adding items to the cart updates the promotions for new line items","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:20:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"#generate_code with generate_code has a generated code","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:21:1:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"#generate_code without generate_code has a generated code","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:21:2:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"#generate_coupon_codes has a generated code","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:22:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"#generate_coupon_codes generates new codes when number_of_codes is changed","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:22:2\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"#generate_coupon_codes with prefix has a generated code with prefix","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:22:3:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"#generate_coupon_codes when number of codes is greater than the web limit generates the codes in a background job","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:22:4:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"#cached_rules returns the rules","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:23:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:4","suite":"Spree::Property at ./spec/models/spree/property_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/property_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:5","suite":"Spree::Property at ./spec/models/spree/property_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/property_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:7","suite":"Spree::Property at ./spec/models/spree/property_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/models/spree/property_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:8","suite":"Spree::Property at ./spec/models/spree/property_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","suiteSourceFile":"core/spec/models/spree/property_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:10","suite":"Spree::Property at ./spec/models/spree/property_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","suiteSourceFile":"core/spec/models/spree/property_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:11","suite":"Spree::Property at ./spec/models/spree/property_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","suiteSourceFile":"core/spec/models/spree/property_spec.rb"},{"name":"behaves like metadata reads data as symbolized keys","suite":"Spree::Property at ./spec/models/spree/property_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7\"}}","suiteSourceFile":"core/spec/models/spree/property_spec.rb"},{"name":"behaves like metadata reads data as not symbolized keys","suite":"Spree::Property at ./spec/models/spree/property_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8\"}}","suiteSourceFile":"core/spec/models/spree/property_spec.rb"},{"name":"behaves like metadata can query records by metadata properties","suite":"Spree::Property at ./spec/models/spree/property_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:10\"}}","suiteSourceFile":"core/spec/models/spree/property_spec.rb"},{"name":"translations translates property fields","suite":"Spree::Property at ./spec/models/spree/property_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/property_spec.rb"},{"name":"scopes .available example at ./spec/models/spree/property_spec.rb:35","suite":"Spree::Property at ./spec/models/spree/property_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","suiteSourceFile":"core/spec/models/spree/property_spec.rb"},{"name":"scopes .available_on_front_end example at ./spec/models/spree/property_spec.rb:41","suite":"Spree::Property at ./spec/models/spree/property_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","suiteSourceFile":"core/spec/models/spree/property_spec.rb"},{"name":"scopes .available_on_back_end example at ./spec/models/spree/property_spec.rb:47","suite":"Spree::Property at ./spec/models/spree/property_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3:1\"}}","suiteSourceFile":"core/spec/models/spree/property_spec.rb"},{"name":"callbacks #normalize_name should parameterize the name","suite":"Spree::Property at ./spec/models/spree/property_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1\"}}","suiteSourceFile":"core/spec/models/spree/property_spec.rb"},{"name":"setting filter param example at ./spec/models/spree/property_spec.rb:66","suite":"Spree::Property at ./spec/models/spree/property_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","suiteSourceFile":"core/spec/models/spree/property_spec.rb"},{"name":"#uniq_values example at ./spec/models/spree/property_spec.rb:78","suite":"Spree::Property at ./spec/models/spree/property_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","suiteSourceFile":"core/spec/models/spree/property_spec.rb"},{"name":"#uniq_values when narrowing the scope of product properties example at ./spec/models/spree/property_spec.rb:94","suite":"Spree::Property at ./spec/models/spree/property_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2:1\"}}","suiteSourceFile":"core/spec/models/spree/property_spec.rb"},{"name":"#uniq_values when caching correctly returns uniq values","suite":"Spree::Property at ./spec/models/spree/property_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:3:1\"}}","suiteSourceFile":"core/spec/models/spree/property_spec.rb"},{"name":"#ensure_product_properties_have_filter_params filterable property example at ./spec/models/spree/property_spec.rb:147","suite":"Spree::Property at ./spec/models/spree/property_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1:1\"}}","suiteSourceFile":"core/spec/models/spree/property_spec.rb"},{"name":"#ensure_product_properties_have_filter_params filterable property example at ./spec/models/spree/property_spec.rb:148","suite":"Spree::Property at ./spec/models/spree/property_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1:2\"}}","suiteSourceFile":"core/spec/models/spree/property_spec.rb"},{"name":"#ensure_product_properties_have_filter_params not-filterable property example at ./spec/models/spree/property_spec.rb:152","suite":"Spree::Property at ./spec/models/spree/property_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2:1\"}}","suiteSourceFile":"core/spec/models/spree/property_spec.rb"},{"name":"#after_touch callback touches the product","suite":"Spree::Property at ./spec/models/spree/property_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1\"}}","suiteSourceFile":"core/spec/models/spree/property_spec.rb"},{"name":"#after_update callback with DEPENDENCY_UPDATE_FIELDS touches the product","suite":"Spree::Property at ./spec/models/spree/property_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1:1\"}}","suiteSourceFile":"core/spec/models/spree/property_spec.rb"},{"name":"#after_update callback without DEPENDENCY_UPDATE_FIELDS does not touch the product","suite":"Spree::Property at ./spec/models/spree/property_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:2:1\"}}","suiteSourceFile":"core/spec/models/spree/property_spec.rb"},{"name":"#kind_to_metafield_type returns the correct metafield type","suite":"Spree::Property at ./spec/models/spree/property_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1\"}}","suiteSourceFile":"core/spec/models/spree/property_spec.rb"},{"name":"#kind_to_metafield_type when the property kind is long_text returns the correct metafield type","suite":"Spree::Property at ./spec/models/spree/property_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:2:1\"}}","suiteSourceFile":"core/spec/models/spree/property_spec.rb"},{"name":"#kind_to_metafield_type when the property kind is number returns the correct metafield type","suite":"Spree::Property at ./spec/models/spree/property_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:3:1\"}}","suiteSourceFile":"core/spec/models/spree/property_spec.rb"},{"name":"#kind_to_metafield_type when the property kind is rich_text returns the correct metafield type","suite":"Spree::Property at ./spec/models/spree/property_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:4:1\"}}","suiteSourceFile":"core/spec/models/spree/property_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:4","suite":"Spree::Prototype at ./spec/models/spree/prototype_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/prototype_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:5","suite":"Spree::Prototype at ./spec/models/spree/prototype_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/prototype_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:7","suite":"Spree::Prototype at ./spec/models/spree/prototype_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/models/spree/prototype_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:8","suite":"Spree::Prototype at ./spec/models/spree/prototype_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","suiteSourceFile":"core/spec/models/spree/prototype_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:10","suite":"Spree::Prototype at ./spec/models/spree/prototype_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","suiteSourceFile":"core/spec/models/spree/prototype_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:11","suite":"Spree::Prototype at ./spec/models/spree/prototype_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","suiteSourceFile":"core/spec/models/spree/prototype_spec.rb"},{"name":"behaves like metadata reads data as symbolized keys","suite":"Spree::Prototype at ./spec/models/spree/prototype_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7\"}}","suiteSourceFile":"core/spec/models/spree/prototype_spec.rb"},{"name":"behaves like metadata reads data as not symbolized keys","suite":"Spree::Prototype at ./spec/models/spree/prototype_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8\"}}","suiteSourceFile":"core/spec/models/spree/prototype_spec.rb"},{"name":"behaves like metadata can query records by metadata properties","suite":"Spree::Prototype at ./spec/models/spree/prototype_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:10\"}}","suiteSourceFile":"core/spec/models/spree/prototype_spec.rb"},{"name":"Class Methods .return_processing_reason default refund reason present example at ./spec/models/spree/refund_reason_spec.rb:9","suite":"Spree::RefundReason at ./spec/models/spree/refund_reason_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/refund_reason_spec.rb"},{"name":"Class Methods .return_processing_reason default refund reason not present creates a new refund reason on the fly","suite":"Spree::RefundReason at ./spec/models/spree/refund_reason_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/refund_reason_spec.rb"},{"name":"Class Methods .order_canceled_reason order canceled reason present example at ./spec/models/spree/refund_reason_spec.rb:24","suite":"Spree::RefundReason at ./spec/models/spree/refund_reason_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/refund_reason_spec.rb"},{"name":"Class Methods .order_canceled_reason order canceled reason not present creates a new refund reason on the fly","suite":"Spree::RefundReason at ./spec/models/spree/refund_reason_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/refund_reason_spec.rb"},{"name":"Class Methods .shipment_canceled_reason shipment canceled reason present example at ./spec/models/spree/refund_reason_spec.rb:39","suite":"Spree::RefundReason at ./spec/models/spree/refund_reason_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1:1\"}}","suiteSourceFile":"core/spec/models/spree/refund_reason_spec.rb"},{"name":"Class Methods .shipment_canceled_reason shipment canceled reason not present creates a new refund reason on the fly","suite":"Spree::RefundReason at ./spec/models/spree/refund_reason_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:2:1\"}}","suiteSourceFile":"core/spec/models/spree/refund_reason_spec.rb"},{"name":"shared examples behaves like metadata example at ./lib/spree/testing_support/metadata.rb:4","suite":"Spree::Refund at ./spec/models/spree/refund_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/refund_spec.rb"},{"name":"shared examples behaves like metadata example at ./lib/spree/testing_support/metadata.rb:5","suite":"Spree::Refund at ./spec/models/spree/refund_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/refund_spec.rb"},{"name":"shared examples behaves like metadata example at ./lib/spree/testing_support/metadata.rb:7","suite":"Spree::Refund at ./spec/models/spree/refund_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3\"}}","suiteSourceFile":"core/spec/models/spree/refund_spec.rb"},{"name":"shared examples behaves like metadata example at ./lib/spree/testing_support/metadata.rb:8","suite":"Spree::Refund at ./spec/models/spree/refund_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:4\"}}","suiteSourceFile":"core/spec/models/spree/refund_spec.rb"},{"name":"shared examples behaves like metadata example at ./lib/spree/testing_support/metadata.rb:10","suite":"Spree::Refund at ./spec/models/spree/refund_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:5\"}}","suiteSourceFile":"core/spec/models/spree/refund_spec.rb"},{"name":"shared examples behaves like metadata example at ./lib/spree/testing_support/metadata.rb:11","suite":"Spree::Refund at ./spec/models/spree/refund_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:6\"}}","suiteSourceFile":"core/spec/models/spree/refund_spec.rb"},{"name":"shared examples behaves like metadata reads data as symbolized keys","suite":"Spree::Refund at ./spec/models/spree/refund_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:7\"}}","suiteSourceFile":"core/spec/models/spree/refund_spec.rb"},{"name":"shared examples behaves like metadata reads data as not symbolized keys","suite":"Spree::Refund at ./spec/models/spree/refund_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:8\"}}","suiteSourceFile":"core/spec/models/spree/refund_spec.rb"},{"name":"shared examples behaves like metadata can query records by metadata properties","suite":"Spree::Refund at ./spec/models/spree/refund_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:10\"}}","suiteSourceFile":"core/spec/models/spree/refund_spec.rb"},{"name":"shared examples behaves like lifecycle events lifecycle events refund.created publishes created event when record is created","suite":"Spree::Refund at ./spec/models/spree/refund_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/refund_spec.rb"},{"name":"shared examples behaves like lifecycle events lifecycle events refund.updated publishes updated event when record is updated","suite":"Spree::Refund at ./spec/models/spree/refund_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/refund_spec.rb"},{"name":"shared examples behaves like lifecycle events lifecycle events refund.deleted publishes deleted event when record is deleted","suite":"Spree::Refund at ./spec/models/spree/refund_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/refund_spec.rb"},{"name":"create transaction id exists on creation creates a refund record","suite":"Spree::Refund at ./spec/models/spree/refund_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/refund_spec.rb"},{"name":"create transaction id exists on creation maintains the transaction id","suite":"Spree::Refund at ./spec/models/spree/refund_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:2\"}}","suiteSourceFile":"core/spec/models/spree/refund_spec.rb"},{"name":"create transaction id exists on creation saves the amount","suite":"Spree::Refund at ./spec/models/spree/refund_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:3\"}}","suiteSourceFile":"core/spec/models/spree/refund_spec.rb"},{"name":"create transaction id exists on creation creates a log entry","suite":"Spree::Refund at ./spec/models/spree/refund_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:4\"}}","suiteSourceFile":"core/spec/models/spree/refund_spec.rb"},{"name":"create transaction id exists on creation does not attempt to process a transaction","suite":"Spree::Refund at ./spec/models/spree/refund_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:5\"}}","suiteSourceFile":"core/spec/models/spree/refund_spec.rb"},{"name":"create processing is successful creates a refund","suite":"Spree::Refund at ./spec/models/spree/refund_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/refund_spec.rb"},{"name":"create processing is successful return the newly created refund","suite":"Spree::Refund at ./spec/models/spree/refund_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:2\"}}","suiteSourceFile":"core/spec/models/spree/refund_spec.rb"},{"name":"create processing is successful saves the returned authorization value","suite":"Spree::Refund at ./spec/models/spree/refund_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:3\"}}","suiteSourceFile":"core/spec/models/spree/refund_spec.rb"},{"name":"create processing is successful saves the passed amount as the refund amount","suite":"Spree::Refund at ./spec/models/spree/refund_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:4\"}}","suiteSourceFile":"core/spec/models/spree/refund_spec.rb"},{"name":"create processing is successful creates a log entry","suite":"Spree::Refund at ./spec/models/spree/refund_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:5\"}}","suiteSourceFile":"core/spec/models/spree/refund_spec.rb"},{"name":"create processing is successful attempts to process a transaction","suite":"Spree::Refund at ./spec/models/spree/refund_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:6\"}}","suiteSourceFile":"core/spec/models/spree/refund_spec.rb"},{"name":"create processing is successful updates the payment total","suite":"Spree::Refund at ./spec/models/spree/refund_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:7\"}}","suiteSourceFile":"core/spec/models/spree/refund_spec.rb"},{"name":"create processing fails raises error and not create a refund","suite":"Spree::Refund at ./spec/models/spree/refund_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:1\"}}","suiteSourceFile":"core/spec/models/spree/refund_spec.rb"},{"name":"create without payment profiles supported does not supply the payment source","suite":"Spree::Refund at ./spec/models/spree/refund_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:4:1\"}}","suiteSourceFile":"core/spec/models/spree/refund_spec.rb"},{"name":"create with payment profiles supported supplies the payment source","suite":"Spree::Refund at ./spec/models/spree/refund_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:5:1\"}}","suiteSourceFile":"core/spec/models/spree/refund_spec.rb"},{"name":"create with an activemerchant gateway connection error raises Spree::Core::GatewayError","suite":"Spree::Refund at ./spec/models/spree/refund_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:6:1\"}}","suiteSourceFile":"core/spec/models/spree/refund_spec.rb"},{"name":"create with amount too large is invalid","suite":"Spree::Refund at ./spec/models/spree/refund_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:7:1\"}}","suiteSourceFile":"core/spec/models/spree/refund_spec.rb"},{"name":"total_amount_reimbursed_for with reimbursements performed returns the total amount","suite":"Spree::Refund at ./spec/models/spree/refund_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","suiteSourceFile":"core/spec/models/spree/refund_spec.rb"},{"name":"total_amount_reimbursed_for without reimbursements performed returns zero","suite":"Spree::Refund at ./spec/models/spree/refund_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","suiteSourceFile":"core/spec/models/spree/refund_spec.rb"},{"name":"class methods .total_amount_reimbursed_for sums the amounts of all of the reimbursements credits","suite":"Spree::Reimbursement::Credit at ./spec/models/spree/reimbursement/credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/reimbursement/credit_spec.rb"},{"name":"#description is the creditable's class name","suite":"Spree::Reimbursement::Credit at ./spec/models/spree/reimbursement/credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/reimbursement/credit_spec.rb"},{"name":"#display_amount is a money object","suite":"Spree::Reimbursement::Credit at ./spec/models/spree/reimbursement/credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/reimbursement/credit_spec.rb"},{"name":"#calculate_reimbursement_types the return item requires exchange returns a hash with the exchange reimbursement type associated to the return items","suite":"Spree::Reimbursement::ReimbursementTypeEngine at ./spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb"},{"name":"#calculate_reimbursement_types the return item requires exchange the return items are not included in any of the other reimbursement types","suite":"Spree::Reimbursement::ReimbursementTypeEngine at ./spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb"},{"name":"#calculate_reimbursement_types the return item requires exchange behaves like reimbursement type hash contain all keys that respond to reimburse","suite":"Spree::Reimbursement::ReimbursementTypeEngine at ./spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb"},{"name":"#calculate_reimbursement_types the return item does not require exchange the return item has an override reimbursement type returns a hash with the override reimbursement type associated to the return items","suite":"Spree::Reimbursement::ReimbursementTypeEngine at ./spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb"},{"name":"#calculate_reimbursement_types the return item does not require exchange the return item has an override reimbursement type the return items are not included in any of the other reimbursement types","suite":"Spree::Reimbursement::ReimbursementTypeEngine at ./spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1:2\"}}","suiteSourceFile":"core/spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb"},{"name":"#calculate_reimbursement_types the return item does not require exchange the return item has an override reimbursement type behaves like reimbursement type hash contain all keys that respond to reimburse","suite":"Spree::Reimbursement::ReimbursementTypeEngine at ./spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb"},{"name":"#calculate_reimbursement_types the return item does not require exchange the return item does not have an override reimbursement type the return item has a preferred reimbursement type the reimbursement type is not valid for the return item returns a hash with no return items associated to the preferred reimbursement type","suite":"Spree::Reimbursement::ReimbursementTypeEngine at ./spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb"},{"name":"#calculate_reimbursement_types the return item does not require exchange the return item does not have an override reimbursement type the return item has a preferred reimbursement type the reimbursement type is not valid for the return item the return items are not included in any of the other reimbursement types","suite":"Spree::Reimbursement::ReimbursementTypeEngine at ./spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb"},{"name":"#calculate_reimbursement_types the return item does not require exchange the return item does not have an override reimbursement type the return item has a preferred reimbursement type the reimbursement type is not valid for the return item behaves like reimbursement type hash contain all keys that respond to reimburse","suite":"Spree::Reimbursement::ReimbursementTypeEngine at ./spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:1:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb"},{"name":"#calculate_reimbursement_types the return item does not require exchange the return item does not have an override reimbursement type the return item has a preferred reimbursement type the reimbursement type is valid for the return item returns a hash with the expired reimbursement type associated to the return items","suite":"Spree::Reimbursement::ReimbursementTypeEngine at ./spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb"},{"name":"#calculate_reimbursement_types the return item does not require exchange the return item does not have an override reimbursement type the return item has a preferred reimbursement type the reimbursement type is valid for the return item the return items are not included in any of the other reimbursement types","suite":"Spree::Reimbursement::ReimbursementTypeEngine at ./spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:1:2:2\"}}","suiteSourceFile":"core/spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb"},{"name":"#calculate_reimbursement_types the return item does not require exchange the return item does not have an override reimbursement type the return item has a preferred reimbursement type the reimbursement type is valid for the return item behaves like reimbursement type hash contain all keys that respond to reimburse","suite":"Spree::Reimbursement::ReimbursementTypeEngine at ./spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:1:2:3:1\"}}","suiteSourceFile":"core/spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb"},{"name":"#calculate_reimbursement_types the return item does not require exchange the return item does not have an override reimbursement type the return item does not have a preferred reimbursement type the return item is past the time constraint returns a hash with the expired reimbursement type associated to the return items","suite":"Spree::Reimbursement::ReimbursementTypeEngine at ./spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb"},{"name":"#calculate_reimbursement_types the return item does not require exchange the return item does not have an override reimbursement type the return item does not have a preferred reimbursement type the return item is past the time constraint the return items are not included in any of the other reimbursement types","suite":"Spree::Reimbursement::ReimbursementTypeEngine at ./spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:2:1:2\"}}","suiteSourceFile":"core/spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb"},{"name":"#calculate_reimbursement_types the return item does not require exchange the return item does not have an override reimbursement type the return item does not have a preferred reimbursement type the return item is past the time constraint behaves like reimbursement type hash contain all keys that respond to reimburse","suite":"Spree::Reimbursement::ReimbursementTypeEngine at ./spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:2:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb"},{"name":"#calculate_reimbursement_types the return item does not require exchange the return item does not have an override reimbursement type the return item does not have a preferred reimbursement type the return item is within the time constraint returns a hash with the default reimbursement type associated to the return items","suite":"Spree::Reimbursement::ReimbursementTypeEngine at ./spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb"},{"name":"#calculate_reimbursement_types the return item does not require exchange the return item does not have an override reimbursement type the return item does not have a preferred reimbursement type the return item is within the time constraint the return items are not included in any of the other reimbursement types","suite":"Spree::Reimbursement::ReimbursementTypeEngine at ./spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:2:2:2\"}}","suiteSourceFile":"core/spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb"},{"name":"#calculate_reimbursement_types the return item does not require exchange the return item does not have an override reimbursement type the return item does not have a preferred reimbursement type the return item is within the time constraint behaves like reimbursement type hash contain all keys that respond to reimburse","suite":"Spree::Reimbursement::ReimbursementTypeEngine at ./spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:2:2:3:1\"}}","suiteSourceFile":"core/spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb"},{"name":"#valid_preferred_reimbursement_type? is valid if it is not past the reimbursable time period","suite":"Spree::Reimbursement::ReimbursementTypeValidator at ./spec/models/spree/reimbursement/reimbursement_type_validator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/reimbursement/reimbursement_type_validator_spec.rb"},{"name":"#valid_preferred_reimbursement_type? is valid if the return items preferred method of reimbursement is the expired method of reimbursement","suite":"Spree::Reimbursement::ReimbursementTypeValidator at ./spec/models/spree/reimbursement/reimbursement_type_validator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/reimbursement/reimbursement_type_validator_spec.rb"},{"name":"#valid_preferred_reimbursement_type? is invalid if the return item is past the eligible time period and the preferred method of reimbursement is not the expired method of reimbursement","suite":"Spree::Reimbursement::ReimbursementTypeValidator at ./spec/models/spree/reimbursement/reimbursement_type_validator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/reimbursement/reimbursement_type_validator_spec.rb"},{"name":"#past_reimbursable_time_period? it has not shipped is not past the reimbursable time period","suite":"Spree::Reimbursement::ReimbursementTypeValidator at ./spec/models/spree/reimbursement/reimbursement_type_validator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/reimbursement/reimbursement_type_validator_spec.rb"},{"name":"#past_reimbursable_time_period? it has shipped and it is more recent than the time constraint is not past the reimbursable time period","suite":"Spree::Reimbursement::ReimbursementTypeValidator at ./spec/models/spree/reimbursement/reimbursement_type_validator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/reimbursement/reimbursement_type_validator_spec.rb"},{"name":"#past_reimbursable_time_period? it has shipped and it is further in the past than the time constraint is past the reimbursable time period","suite":"Spree::Reimbursement::ReimbursementTypeValidator at ./spec/models/spree/reimbursement/reimbursement_type_validator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:1\"}}","suiteSourceFile":"core/spec/models/spree/reimbursement/reimbursement_type_validator_spec.rb"},{"name":".simulate reimburses each calculated reimbursement types with the correct return items as a simulation","suite":"Spree::ReimbursementPerformer at ./spec/models/spree/reimbursement_performer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/reimbursement_performer_spec.rb"},{"name":".perform reimburses each calculated reimbursement types with the correct return items as a performance","suite":"Spree::ReimbursementPerformer at ./spec/models/spree/reimbursement_performer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/reimbursement_performer_spec.rb"},{"name":"#display_total returns the value as a Spree::Money instance","suite":"Spree::Reimbursement at ./spec/models/spree/reimbursement_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/reimbursement_spec.rb"},{"name":"#display_total uses the order's currency","suite":"Spree::Reimbursement at ./spec/models/spree/reimbursement_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/reimbursement_spec.rb"},{"name":"#store returns order store","suite":"Spree::Reimbursement at ./spec/models/spree/reimbursement_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/reimbursement_spec.rb"},{"name":"#perform! refunds the total amount","suite":"Spree::Reimbursement at ./spec/models/spree/reimbursement_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/reimbursement_spec.rb"},{"name":"#perform! creates a refund","suite":"Spree::Reimbursement at ./spec/models/spree/reimbursement_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","suiteSourceFile":"core/spec/models/spree/reimbursement_spec.rb"},{"name":"#perform! with additional tax saves the additional tax and refunds the total","suite":"Spree::Reimbursement at ./spec/models/spree/reimbursement_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3:1\"}}","suiteSourceFile":"core/spec/models/spree/reimbursement_spec.rb"},{"name":"#perform! when performer is provided sets the performer","suite":"Spree::Reimbursement at ./spec/models/spree/reimbursement_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4:1\"}}","suiteSourceFile":"core/spec/models/spree/reimbursement_spec.rb"},{"name":"#perform! when performer is provided refunds the total amount","suite":"Spree::Reimbursement at ./spec/models/spree/reimbursement_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4:2\"}}","suiteSourceFile":"core/spec/models/spree/reimbursement_spec.rb"},{"name":"#perform! when performer is provided creates a refund","suite":"Spree::Reimbursement at ./spec/models/spree/reimbursement_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4:3\"}}","suiteSourceFile":"core/spec/models/spree/reimbursement_spec.rb"},{"name":"#perform! with included tax saves the included tax and refunds the total","suite":"Spree::Reimbursement at ./spec/models/spree/reimbursement_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:5:1\"}}","suiteSourceFile":"core/spec/models/spree/reimbursement_spec.rb"},{"name":"#perform! when reimbursement cannot be fully performed raises IncompleteReimbursement error","suite":"Spree::Reimbursement at ./spec/models/spree/reimbursement_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:6:1\"}}","suiteSourceFile":"core/spec/models/spree/reimbursement_spec.rb"},{"name":"#perform! when reimbursement is performed using store credits succeeds","suite":"Spree::Reimbursement at ./spec/models/spree/reimbursement_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:7:1\"}}","suiteSourceFile":"core/spec/models/spree/reimbursement_spec.rb"},{"name":"#perform! when exchange is required generates an exchange shipment for the order for the exchange items","suite":"Spree::Reimbursement at ./spec/models/spree/reimbursement_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:8:1\"}}","suiteSourceFile":"core/spec/models/spree/reimbursement_spec.rb"},{"name":"#return_items_requiring_exchange returns only the return items that require an exchange","suite":"Spree::Reimbursement at ./spec/models/spree/reimbursement_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/reimbursement_spec.rb"},{"name":"#calculated_total with return item amounts that would round up if added rounds down","suite":"Spree::Reimbursement at ./spec/models/spree/reimbursement_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:1\"}}","suiteSourceFile":"core/spec/models/spree/reimbursement_spec.rb"},{"name":"#calculated_total with a return item amount that should round up rounds up","suite":"Spree::Reimbursement at ./spec/models/spree/reimbursement_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1\"}}","suiteSourceFile":"core/spec/models/spree/reimbursement_spec.rb"},{"name":".build_from_customer_return connects data","suite":"Spree::Reimbursement at ./spec/models/spree/reimbursement_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","suiteSourceFile":"core/spec/models/spree/reimbursement_spec.rb"},{"name":"custom events reimbursement.reimbursed publishes reimbursement.reimbursed event when performed","suite":"Spree::Reimbursement at ./spec/models/spree/reimbursement_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1:1\"}}","suiteSourceFile":"core/spec/models/spree/reimbursement_spec.rb"},{"name":"without taxes leaves the return items additional_tax_total and included_tax_total at zero","suite":"Spree::ReimbursementTaxCalculator at ./spec/models/spree/reimbursement_tax_calculator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/reimbursement_tax_calculator_spec.rb"},{"name":"with additional tax sets additional_tax_total on the return items","suite":"Spree::ReimbursementTaxCalculator at ./spec/models/spree/reimbursement_tax_calculator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/reimbursement_tax_calculator_spec.rb"},{"name":"with included tax sets included_tax_total on the return items","suite":"Spree::ReimbursementTaxCalculator at ./spec/models/spree/reimbursement_tax_calculator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/reimbursement_tax_calculator_spec.rb"},{"name":".reimburse simulate is true creates one readonly lump credit for all outstanding balance payable to the customer","suite":"Spree::ReimbursementType::Credit at ./spec/models/spree/reimbursement_type/credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/reimbursement_type/credit_spec.rb"},{"name":".reimburse simulate is true does not save to the database","suite":"Spree::ReimbursementType::Credit at ./spec/models/spree/reimbursement_type/credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/reimbursement_type/credit_spec.rb"},{"name":".reimburse simulate is false creates one lump credit for all outstanding balance payable to the customer","suite":"Spree::ReimbursementType::Credit at ./spec/models/spree/reimbursement_type/credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/reimbursement_type/credit_spec.rb"},{"name":".reimburse return items are supplied simulate is true does not perform an exchange and returns the exchange object","suite":"Spree::ReimbursementType::Exchange at ./spec/models/spree/reimbursement_type/exchange_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/reimbursement_type/exchange_spec.rb"},{"name":".reimburse return items are supplied simulate is false performs an exchange and returns the exchange object","suite":"Spree::ReimbursementType::Exchange at ./spec/models/spree/reimbursement_type/exchange_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/reimbursement_type/exchange_spec.rb"},{"name":".reimburse no return items are supplied does not perform an exchange and returns an empty array","suite":"Spree::ReimbursementType::Exchange at ./spec/models/spree/reimbursement_type/exchange_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/reimbursement_type/exchange_spec.rb"},{"name":".reimburse simulate is true returns an array of readonly refunds","suite":"Spree::ReimbursementType::OriginalPayment at ./spec/models/spree/reimbursement_type/original_payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/reimbursement_type/original_payment_spec.rb"},{"name":".reimburse simulate is false performs the refund","suite":"Spree::ReimbursementType::OriginalPayment at ./spec/models/spree/reimbursement_type/original_payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/reimbursement_type/original_payment_spec.rb"},{"name":".reimburse when no credit is allowed on the payment returns an empty array","suite":"Spree::ReimbursementType::OriginalPayment at ./spec/models/spree/reimbursement_type/original_payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/reimbursement_type/original_payment_spec.rb"},{"name":".reimburse when a payment is negative returns an empty array","suite":"Spree::ReimbursementType::OriginalPayment at ./spec/models/spree/reimbursement_type/original_payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/reimbursement_type/original_payment_spec.rb"},{"name":".reimburse simulate is true for store credits that the customer used creates readonly refunds for all store credit payments","suite":"Spree::ReimbursementType::StoreCredit at ./spec/models/spree/reimbursement_type/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/reimbursement_type/store_credit_spec.rb"},{"name":".reimburse simulate is true for store credits that the customer used does not save to the database","suite":"Spree::ReimbursementType::StoreCredit at ./spec/models/spree/reimbursement_type/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/reimbursement_type/store_credit_spec.rb"},{"name":".reimburse simulate is true for return items that were not paid for with store credit does not save to the database","suite":"Spree::ReimbursementType::StoreCredit at ./spec/models/spree/reimbursement_type/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:2\"}}","suiteSourceFile":"core/spec/models/spree/reimbursement_type/store_credit_spec.rb"},{"name":".reimburse simulate is true for return items that were not paid for with store credit creates one readonly lump credit for all outstanding balance payable to the customer creates a credit that is read only","suite":"Spree::ReimbursementType::StoreCredit at ./spec/models/spree/reimbursement_type/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/reimbursement_type/store_credit_spec.rb"},{"name":".reimburse simulate is true for return items that were not paid for with store credit creates one readonly lump credit for all outstanding balance payable to the customer creates a credit which amounts to the sum of the return items rounded down","suite":"Spree::ReimbursementType::StoreCredit at ./spec/models/spree/reimbursement_type/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1:2\"}}","suiteSourceFile":"core/spec/models/spree/reimbursement_type/store_credit_spec.rb"},{"name":".reimburse simulate is false for store credits that the customer used performs refunds for all store credit payments","suite":"Spree::ReimbursementType::StoreCredit at ./spec/models/spree/reimbursement_type/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/reimbursement_type/store_credit_spec.rb"},{"name":".reimburse simulate is false for return items that were not paid for with store credit creates one lump credit for all outstanding balance payable to the customer","suite":"Spree::ReimbursementType::StoreCredit at ./spec/models/spree/reimbursement_type/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/reimbursement_type/store_credit_spec.rb"},{"name":".reimburse simulate is false for return items that were not paid for with store credit creates a store credit with the same currency as the reimbursement's order","suite":"Spree::ReimbursementType::StoreCredit at ./spec/models/spree/reimbursement_type/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:2\"}}","suiteSourceFile":"core/spec/models/spree/reimbursement_type/store_credit_spec.rb"},{"name":".headers returns array of hashes with name and label","suite":"Spree::ReportLineItem at ./spec/models/spree/report_line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/report_line_item_spec.rb"},{"name":".csv_headers returns array of attribute keys","suite":"Spree::ReportLineItem at ./spec/models/spree/report_line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/report_line_item_spec.rb"},{"name":"#to_csv returns array of attribute values","suite":"Spree::ReportLineItem at ./spec/models/spree/report_line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/report_line_item_spec.rb"},{"name":"#vendor returns vendor name from record","suite":"Spree::ReportLineItems::ProductsPerformance at ./spec/models/spree/report_line_items/products_performance_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/report_line_items/products_performance_spec.rb"},{"name":"#brand returns brand name from record","suite":"Spree::ReportLineItems::ProductsPerformance at ./spec/models/spree/report_line_items/products_performance_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/report_line_items/products_performance_spec.rb"},{"name":"#category_levels when product has taxons returns mapped category levels","suite":"Spree::ReportLineItems::ProductsPerformance at ./spec/models/spree/report_line_items/products_performance_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","suiteSourceFile":"core/spec/models/spree/report_line_items/products_performance_spec.rb"},{"name":"#category_levels when product has no taxons returns nil for all category levels","suite":"Spree::ReportLineItems::ProductsPerformance at ./spec/models/spree/report_line_items/products_performance_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","suiteSourceFile":"core/spec/models/spree/report_line_items/products_performance_spec.rb"},{"name":"#price returns formatted price in report currency","suite":"Spree::ReportLineItems::ProductsPerformance at ./spec/models/spree/report_line_items/products_performance_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/report_line_items/products_performance_spec.rb"},{"name":"#weeks_online with available on returns number of weeks since product activation","suite":"Spree::ReportLineItems::ProductsPerformance at ./spec/models/spree/report_line_items/products_performance_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:1\"}}","suiteSourceFile":"core/spec/models/spree/report_line_items/products_performance_spec.rb"},{"name":"#weeks_online without available on returns number of weeks since product creation","suite":"Spree::ReportLineItems::ProductsPerformance at ./spec/models/spree/report_line_items/products_performance_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1\"}}","suiteSourceFile":"core/spec/models/spree/report_line_items/products_performance_spec.rb"},{"name":"money amounts returns formatted money amounts","suite":"Spree::ReportLineItems::ProductsPerformance at ./spec/models/spree/report_line_items/products_performance_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","suiteSourceFile":"core/spec/models/spree/report_line_items/products_performance_spec.rb"},{"name":"#quantity returns line item quantity","suite":"Spree::ReportLineItems::ProductsPerformance at ./spec/models/spree/report_line_items/products_performance_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","suiteSourceFile":"core/spec/models/spree/report_line_items/products_performance_spec.rb"},{"name":"#date returns formatted completed_at date","suite":"Spree::ReportLineItems::SalesTotal at ./spec/models/spree/report_line_items/sales_total_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/report_line_items/sales_total_spec.rb"},{"name":"#order returns order number","suite":"Spree::ReportLineItems::SalesTotal at ./spec/models/spree/report_line_items/sales_total_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/report_line_items/sales_total_spec.rb"},{"name":"#product returns variant descriptive name","suite":"Spree::ReportLineItems::SalesTotal at ./spec/models/spree/report_line_items/sales_total_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/report_line_items/sales_total_spec.rb"},{"name":"#quantity returns quantity","suite":"Spree::ReportLineItems::SalesTotal at ./spec/models/spree/report_line_items/sales_total_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/report_line_items/sales_total_spec.rb"},{"name":"#total returns money object with final amount plus shipping","suite":"Spree::ReportLineItems::SalesTotal at ./spec/models/spree/report_line_items/sales_total_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","suiteSourceFile":"core/spec/models/spree/report_line_items/sales_total_spec.rb"},{"name":"#promo_total returns display promo total","suite":"Spree::ReportLineItems::SalesTotal at ./spec/models/spree/report_line_items/sales_total_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","suiteSourceFile":"core/spec/models/spree/report_line_items/sales_total_spec.rb"},{"name":"#pre_tax_amount returns display pre tax amount","suite":"Spree::ReportLineItems::SalesTotal at ./spec/models/spree/report_line_items/sales_total_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","suiteSourceFile":"core/spec/models/spree/report_line_items/sales_total_spec.rb"},{"name":"#shipment_total returns display shipping cost","suite":"Spree::ReportLineItems::SalesTotal at ./spec/models/spree/report_line_items/sales_total_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1\"}}","suiteSourceFile":"core/spec/models/spree/report_line_items/sales_total_spec.rb"},{"name":"#tax_total returns display tax total","suite":"Spree::ReportLineItems::SalesTotal at ./spec/models/spree/report_line_items/sales_total_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1\"}}","suiteSourceFile":"core/spec/models/spree/report_line_items/sales_total_spec.rb"},{"name":"behaves like lifecycle events lifecycle events report.created publishes created event when record is created","suite":"Spree::Report at ./spec/models/spree/report_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/report_spec.rb"},{"name":"behaves like lifecycle events lifecycle events report.updated publishes updated event when record is updated","suite":"Spree::Report at ./spec/models/spree/report_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/report_spec.rb"},{"name":"behaves like lifecycle events lifecycle events report.deleted publishes deleted event when record is deleted","suite":"Spree::Report at ./spec/models/spree/report_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/report_spec.rb"},{"name":"#human_name returns formatted name with store, dates and report type","suite":"Spree::Report at ./spec/models/spree/report_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/report_spec.rb"},{"name":"#event_serializer_class returns the correct serializer class","suite":"Spree::Report at ./spec/models/spree/report_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/report_spec.rb"},{"name":"#generate generates CSV file and attaches it","suite":"Spree::Report at ./spec/models/spree/report_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/report_spec.rb"},{"name":"#generate sends report done email when user is present","suite":"Spree::Report at ./spec/models/spree/report_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2\"}}","suiteSourceFile":"core/spec/models/spree/report_spec.rb"},{"name":"#generate when user is not present does not send report done email","suite":"Spree::Report at ./spec/models/spree/report_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3:1\"}}","suiteSourceFile":"core/spec/models/spree/report_spec.rb"},{"name":"#attachment_file_name returns the correct file name format","suite":"Spree::Report at ./spec/models/spree/report_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","suiteSourceFile":"core/spec/models/spree/report_spec.rb"},{"name":"callbacks after_initialize sets default currency from store","suite":"Spree::Report at ./spec/models/spree/report_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1:1\"}}","suiteSourceFile":"core/spec/models/spree/report_spec.rb"},{"name":"callbacks after_initialize sets default date range","suite":"Spree::Report at ./spec/models/spree/report_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1:2\"}}","suiteSourceFile":"core/spec/models/spree/report_spec.rb"},{"name":"#line_items_scope when order is within date range includes products with sales data","suite":"Spree::Reports::ProductsPerformance at ./spec/models/spree/reports/products_performance_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/reports/products_performance_spec.rb"},{"name":"#line_items_scope when order is outside date range excludes products from orders outside date range","suite":"Spree::Reports::ProductsPerformance at ./spec/models/spree/reports/products_performance_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/reports/products_performance_spec.rb"},{"name":"#line_items_scope date range boundary conditions when order completed exactly at date_from includes products","suite":"Spree::Reports::ProductsPerformance at ./spec/models/spree/reports/products_performance_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1:1\"}}","suiteSourceFile":"core/spec/models/spree/reports/products_performance_spec.rb"},{"name":"#line_items_scope date range boundary conditions when order completed exactly at date_to includes products","suite":"Spree::Reports::ProductsPerformance at ./spec/models/spree/reports/products_performance_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:2:1\"}}","suiteSourceFile":"core/spec/models/spree/reports/products_performance_spec.rb"},{"name":"#line_items_scope date range boundary conditions when order completed 1 minute before date_from excludes products","suite":"Spree::Reports::ProductsPerformance at ./spec/models/spree/reports/products_performance_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:3:1\"}}","suiteSourceFile":"core/spec/models/spree/reports/products_performance_spec.rb"},{"name":"#line_items_scope date range boundary conditions when order completed 1 minute after date_to excludes products","suite":"Spree::Reports::ProductsPerformance at ./spec/models/spree/reports/products_performance_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:4:1\"}}","suiteSourceFile":"core/spec/models/spree/reports/products_performance_spec.rb"},{"name":"#line_items_scope when order has different currency excludes products with different currency","suite":"Spree::Reports::ProductsPerformance at ./spec/models/spree/reports/products_performance_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/reports/products_performance_spec.rb"},{"name":"#line_items_scope when order is within date range includes line items from completed orders within date range","suite":"Spree::Reports::SalesTotal at ./spec/models/spree/reports/sales_total_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/reports/sales_total_spec.rb"},{"name":"#line_items_scope when order is outside date range excludes line items from orders outside date range","suite":"Spree::Reports::SalesTotal at ./spec/models/spree/reports/sales_total_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/reports/sales_total_spec.rb"},{"name":"#line_items_scope date range boundary conditions when order completed exactly at date_from includes line items","suite":"Spree::Reports::SalesTotal at ./spec/models/spree/reports/sales_total_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1:1\"}}","suiteSourceFile":"core/spec/models/spree/reports/sales_total_spec.rb"},{"name":"#line_items_scope date range boundary conditions when order completed exactly at date_to includes line items","suite":"Spree::Reports::SalesTotal at ./spec/models/spree/reports/sales_total_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:2:1\"}}","suiteSourceFile":"core/spec/models/spree/reports/sales_total_spec.rb"},{"name":"#line_items_scope date range boundary conditions when order completed 1 minute before date_from excludes line items","suite":"Spree::Reports::SalesTotal at ./spec/models/spree/reports/sales_total_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:3:1\"}}","suiteSourceFile":"core/spec/models/spree/reports/sales_total_spec.rb"},{"name":"#line_items_scope date range boundary conditions when order completed 1 minute after date_to excludes line items","suite":"Spree::Reports::SalesTotal at ./spec/models/spree/reports/sales_total_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:4:1\"}}","suiteSourceFile":"core/spec/models/spree/reports/sales_total_spec.rb"},{"name":"#line_items_scope when order has different currency excludes line items with different currency","suite":"Spree::Reports::SalesTotal at ./spec/models/spree/reports/sales_total_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/reports/sales_total_spec.rb"},{"name":"#line_items_scope when order is incomplete excludes line items from incomplete orders","suite":"Spree::Reports::SalesTotal at ./spec/models/spree/reports/sales_total_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5:1\"}}","suiteSourceFile":"core/spec/models/spree/reports/sales_total_spec.rb"},{"name":"#return_line_items returns line items","suite":"Spree::Reports::SalesTotal at ./spec/models/spree/reports/sales_total_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/reports/sales_total_spec.rb"},{"name":"lifecycle events return_authorization.created publishes created event when record is created","suite":"Spree::ReturnAuthorization at ./spec/models/spree/return_authorization_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/return_authorization_spec.rb"},{"name":"lifecycle events return_authorization.updated publishes updated event when record is updated","suite":"Spree::ReturnAuthorization at ./spec/models/spree/return_authorization_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/return_authorization_spec.rb"},{"name":"lifecycle events return_authorization.deleted publishes deleted event when record is destroyed","suite":"Spree::ReturnAuthorization at ./spec/models/spree/return_authorization_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/return_authorization_spec.rb"},{"name":"save is invalid when order has no inventory units","suite":"Spree::ReturnAuthorization at ./spec/models/spree/return_authorization_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/return_authorization_spec.rb"},{"name":"save expedited exchanges are configured no items to exchange does not create a reimbursement","suite":"Spree::ReturnAuthorization at ./spec/models/spree/return_authorization_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/return_authorization_spec.rb"},{"name":"save expedited exchanges are configured items to exchange calls pre_expedited_exchange hooks with the return items to exchange","suite":"Spree::ReturnAuthorization at ./spec/models/spree/return_authorization_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/return_authorization_spec.rb"},{"name":"save expedited exchanges are configured items to exchange attempts to accept all return items requiring exchange","suite":"Spree::ReturnAuthorization at ./spec/models/spree/return_authorization_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:2:2\"}}","suiteSourceFile":"core/spec/models/spree/return_authorization_spec.rb"},{"name":"save expedited exchanges are configured items to exchange performs an exchange reimbursement for the exchange return items","suite":"Spree::ReturnAuthorization at ./spec/models/spree/return_authorization_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:2:3\"}}","suiteSourceFile":"core/spec/models/spree/return_authorization_spec.rb"},{"name":"save expedited exchanges are configured items to exchange the reimbursement fails puts errors on the return authorization","suite":"Spree::ReturnAuthorization at ./spec/models/spree/return_authorization_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:2:4:1\"}}","suiteSourceFile":"core/spec/models/spree/return_authorization_spec.rb"},{"name":"whitelisted_ransackable_attributes example at ./spec/models/spree/return_authorization_spec.rb:121","suite":"Spree::ReturnAuthorization at ./spec/models/spree/return_authorization_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/return_authorization_spec.rb"},{"name":"whitelisted_ransackable_associations example at ./spec/models/spree/return_authorization_spec.rb:125","suite":"Spree::ReturnAuthorization at ./spec/models/spree/return_authorization_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/return_authorization_spec.rb"},{"name":"#currency returns the order currency","suite":"Spree::ReturnAuthorization at ./spec/models/spree/return_authorization_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","suiteSourceFile":"core/spec/models/spree/return_authorization_spec.rb"},{"name":"#pre_tax_total sums it's associated return_item's pre-tax amounts","suite":"Spree::ReturnAuthorization at ./spec/models/spree/return_authorization_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","suiteSourceFile":"core/spec/models/spree/return_authorization_spec.rb"},{"name":"#display_pre_tax_total returns a Spree::Money","suite":"Spree::ReturnAuthorization at ./spec/models/spree/return_authorization_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","suiteSourceFile":"core/spec/models/spree/return_authorization_spec.rb"},{"name":"#refundable_amount no promotions returns the pre-tax line item total","suite":"Spree::ReturnAuthorization at ./spec/models/spree/return_authorization_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1:1\"}}","suiteSourceFile":"core/spec/models/spree/return_authorization_spec.rb"},{"name":"#refundable_amount promotions returns the pre-tax line item total minus the order level promotion value","suite":"Spree::ReturnAuthorization at ./spec/models/spree/return_authorization_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2:1\"}}","suiteSourceFile":"core/spec/models/spree/return_authorization_spec.rb"},{"name":"#customer_returned_items? has associated customer returns returns true","suite":"Spree::ReturnAuthorization at ./spec/models/spree/return_authorization_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1:1\"}}","suiteSourceFile":"core/spec/models/spree/return_authorization_spec.rb"},{"name":"#customer_returned_items? does not have associated customer returns returns false","suite":"Spree::ReturnAuthorization at ./spec/models/spree/return_authorization_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:2:1\"}}","suiteSourceFile":"core/spec/models/spree/return_authorization_spec.rb"},{"name":"cancel_return_items cancels the associated return items","suite":"Spree::ReturnAuthorization at ./spec/models/spree/return_authorization_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1\"}}","suiteSourceFile":"core/spec/models/spree/return_authorization_spec.rb"},{"name":"cancel_return_items some return items cannot be cancelled cancels those that can be cancelled","suite":"Spree::ReturnAuthorization at ./spec/models/spree/return_authorization_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:2:1\"}}","suiteSourceFile":"core/spec/models/spree/return_authorization_spec.rb"},{"name":"#can_cancel? all items can be cancelled returns true","suite":"Spree::ReturnAuthorization at ./spec/models/spree/return_authorization_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1:1\"}}","suiteSourceFile":"core/spec/models/spree/return_authorization_spec.rb"},{"name":"#can_cancel? at least one return item can be cancelled example at ./spec/models/spree/return_authorization_spec.rb:255","suite":"Spree::ReturnAuthorization at ./spec/models/spree/return_authorization_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2:1\"}}","suiteSourceFile":"core/spec/models/spree/return_authorization_spec.rb"},{"name":"#can_cancel? no items can be cancelled example at ./spec/models/spree/return_authorization_spec.rb:262","suite":"Spree::ReturnAuthorization at ./spec/models/spree/return_authorization_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:3:1\"}}","suiteSourceFile":"core/spec/models/spree/return_authorization_spec.rb"},{"name":"#can_cancel? when return_authorization has no return_items example at ./spec/models/spree/return_authorization_spec.rb:268","suite":"Spree::ReturnAuthorization at ./spec/models/spree/return_authorization_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:4:1\"}}","suiteSourceFile":"core/spec/models/spree/return_authorization_spec.rb"},{"name":"custom events return_authorization.canceled publishes return_authorization.canceled event when canceled","suite":"Spree::ReturnAuthorization at ./spec/models/spree/return_authorization_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:1:1\"}}","suiteSourceFile":"core/spec/models/spree/return_authorization_spec.rb"},{"name":"#eligible_for_return? checks that all permitted eligibility validators are eligible for return","suite":"Spree::ReturnItem::EligibilityValidator::Default at ./spec/models/spree/return_item/eligibility_validator/default_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item/eligibility_validator/default_spec.rb"},{"name":"#requires_manual_intervention? any of the permitted eligibility validators require manual intervention returns true","suite":"Spree::ReturnItem::EligibilityValidator::Default at ./spec/models/spree/return_item/eligibility_validator/default_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item/eligibility_validator/default_spec.rb"},{"name":"#requires_manual_intervention? no permitted eligibility validators require manual intervention returns false","suite":"Spree::ReturnItem::EligibilityValidator::Default at ./spec/models/spree/return_item/eligibility_validator/default_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item/eligibility_validator/default_spec.rb"},{"name":"#errors the validator errors are empty returns an empty hash","suite":"Spree::ReturnItem::EligibilityValidator::Default at ./spec/models/spree/return_item/eligibility_validator/default_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item/eligibility_validator/default_spec.rb"},{"name":"#errors the validators have errors gathers all errors from permitted eligibility validators into a single errors hash","suite":"Spree::ReturnItem::EligibilityValidator::Default at ./spec/models/spree/return_item/eligibility_validator/default_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item/eligibility_validator/default_spec.rb"},{"name":"#eligible_for_return? the associated inventory unit is shipped returns true","suite":"Spree::ReturnItem::EligibilityValidator::InventoryShipped at ./spec/models/spree/return_item/eligibility_validator/inventory_shipped_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item/eligibility_validator/inventory_shipped_spec.rb"},{"name":"#eligible_for_return? the associated inventory unit is not shipped returns false","suite":"Spree::ReturnItem::EligibilityValidator::InventoryShipped at ./spec/models/spree/return_item/eligibility_validator/inventory_shipped_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item/eligibility_validator/inventory_shipped_spec.rb"},{"name":"#eligible_for_return? the associated inventory unit is not shipped sets an error","suite":"Spree::ReturnItem::EligibilityValidator::InventoryShipped at ./spec/models/spree/return_item/eligibility_validator/inventory_shipped_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2\"}}","suiteSourceFile":"core/spec/models/spree/return_item/eligibility_validator/inventory_shipped_spec.rb"},{"name":"#requires_manual_intervention? not eligible for return returns true if errors were added","suite":"Spree::ReturnItem::EligibilityValidator::InventoryShipped at ./spec/models/spree/return_item/eligibility_validator/inventory_shipped_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item/eligibility_validator/inventory_shipped_spec.rb"},{"name":"#requires_manual_intervention? eligible for return returns false if no errors were added","suite":"Spree::ReturnItem::EligibilityValidator::InventoryShipped at ./spec/models/spree/return_item/eligibility_validator/inventory_shipped_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item/eligibility_validator/inventory_shipped_spec.rb"},{"name":"#eligible_for_return? inventory unit has already been reimbursed returns false","suite":"Spree::ReturnItem::EligibilityValidator::NoReimbursements at ./spec/models/spree/return_item/eligibility_validator/no_reimbursements_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item/eligibility_validator/no_reimbursements_spec.rb"},{"name":"#eligible_for_return? inventory unit has already been reimbursed sets an error","suite":"Spree::ReturnItem::EligibilityValidator::NoReimbursements at ./spec/models/spree/return_item/eligibility_validator/no_reimbursements_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/return_item/eligibility_validator/no_reimbursements_spec.rb"},{"name":"#eligible_for_return? inventory unit has not been reimbursed returns true","suite":"Spree::ReturnItem::EligibilityValidator::NoReimbursements at ./spec/models/spree/return_item/eligibility_validator/no_reimbursements_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item/eligibility_validator/no_reimbursements_spec.rb"},{"name":"#requires_manual_intervention? not eligible for return returns true if errors were added","suite":"Spree::ReturnItem::EligibilityValidator::NoReimbursements at ./spec/models/spree/return_item/eligibility_validator/no_reimbursements_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item/eligibility_validator/no_reimbursements_spec.rb"},{"name":"#requires_manual_intervention? eligible for return returns false if no errors were added","suite":"Spree::ReturnItem::EligibilityValidator::NoReimbursements at ./spec/models/spree/return_item/eligibility_validator/no_reimbursements_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item/eligibility_validator/no_reimbursements_spec.rb"},{"name":"#eligible_for_return? the order was completed returns true","suite":"Spree::ReturnItem::EligibilityValidator::OrderCompleted at ./spec/models/spree/return_item/eligibility_validator/order_completed_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item/eligibility_validator/order_completed_spec.rb"},{"name":"#eligible_for_return? the order is not completed returns false","suite":"Spree::ReturnItem::EligibilityValidator::OrderCompleted at ./spec/models/spree/return_item/eligibility_validator/order_completed_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item/eligibility_validator/order_completed_spec.rb"},{"name":"#eligible_for_return? the order is not completed sets an error","suite":"Spree::ReturnItem::EligibilityValidator::OrderCompleted at ./spec/models/spree/return_item/eligibility_validator/order_completed_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2\"}}","suiteSourceFile":"core/spec/models/spree/return_item/eligibility_validator/order_completed_spec.rb"},{"name":"#eligible_for_return? there is an rma on the return item returns true","suite":"Spree::ReturnItem::EligibilityValidator::RMARequired at ./spec/models/spree/return_item/eligibility_validator/rma_required_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item/eligibility_validator/rma_required_spec.rb"},{"name":"#eligible_for_return? there is no rma on the return item returns false abd error","suite":"Spree::ReturnItem::EligibilityValidator::RMARequired at ./spec/models/spree/return_item/eligibility_validator/rma_required_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item/eligibility_validator/rma_required_spec.rb"},{"name":"#eligible_for_return? it is within the return timeframe returns true","suite":"Spree::ReturnItem::EligibilityValidator::TimeSincePurchase at ./spec/models/spree/return_item/eligibility_validator/time_since_purchase_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item/eligibility_validator/time_since_purchase_spec.rb"},{"name":"#eligible_for_return? it is past the return timeframe returns false","suite":"Spree::ReturnItem::EligibilityValidator::TimeSincePurchase at ./spec/models/spree/return_item/eligibility_validator/time_since_purchase_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item/eligibility_validator/time_since_purchase_spec.rb"},{"name":"#eligible_for_return? it is past the return timeframe sets an error","suite":"Spree::ReturnItem::EligibilityValidator::TimeSincePurchase at ./spec/models/spree/return_item/eligibility_validator/time_since_purchase_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2\"}}","suiteSourceFile":"core/spec/models/spree/return_item/eligibility_validator/time_since_purchase_spec.rb"},{"name":".eligible_variants returns all other variants for the same product with the same option value for the specified option type","suite":"Spree::ReturnItem::ExchangeVariantEligibility::SameOptionValue at ./spec/models/spree/return_item/exchange_variant_eligibility/same_option_value_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item/exchange_variant_eligibility/same_option_value_spec.rb"},{"name":".eligible_variants does not return variants for another product","suite":"Spree::ReturnItem::ExchangeVariantEligibility::SameOptionValue at ./spec/models/spree/return_item/exchange_variant_eligibility/same_option_value_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/return_item/exchange_variant_eligibility/same_option_value_spec.rb"},{"name":".eligible_variants no option value restrictions are specified returns all variants for the product","suite":"Spree::ReturnItem::ExchangeVariantEligibility::SameOptionValue at ./spec/models/spree/return_item/exchange_variant_eligibility/same_option_value_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item/exchange_variant_eligibility/same_option_value_spec.rb"},{"name":".eligible_variants does not return variants for another product","suite":"Spree::ReturnItem::ExchangeVariantEligibility::SameProduct at ./spec/models/spree/return_item/exchange_variant_eligibility/same_product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/models/spree/return_item/exchange_variant_eligibility/same_product_spec.rb"},{"name":".eligible_variants only returns variants that are on hand or backorderable","suite":"Spree::ReturnItem::ExchangeVariantEligibility::SameProduct at ./spec/models/spree/return_item/exchange_variant_eligibility/same_product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","suiteSourceFile":"core/spec/models/spree/return_item/exchange_variant_eligibility/same_product_spec.rb"},{"name":".eligible_variants product has no variants returns the master variant for the same product","suite":"Spree::ReturnItem::ExchangeVariantEligibility::SameProduct at ./spec/models/spree/return_item/exchange_variant_eligibility/same_product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item/exchange_variant_eligibility/same_product_spec.rb"},{"name":".eligible_variants product has variants returns all variants for the same product","suite":"Spree::ReturnItem::ExchangeVariantEligibility::SameProduct at ./spec/models/spree/return_item/exchange_variant_eligibility/same_product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item/exchange_variant_eligibility/same_product_spec.rb"},{"name":"#receive! returns the inventory unit","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"#receive! attempts to accept the return item","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"#receive! with a stock location increases the count on hand","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"#receive! with a stock location when the variant is not resellable example at ./spec/models/spree/return_item_spec.rb:58","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:2:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"#receive! with a stock location when variant does not track inventory does not increase the count on hand","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:3:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"#receive! with a stock location when the restock_inventory preference is false does not increase the count on hand","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:4:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"#display_pre_tax_amount returns a Spree::Money","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"#pre_tax_amount= is expected to equal to localized number","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":".default_refund_amount_calculator defaults to the default refund amount calculator","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"pre_tax_amount calculations on create pre tax amount is not specified not an exchange example at ./spec/models/spree/return_item_spec.rb:122","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"pre_tax_amount calculations on create pre tax amount is not specified an exchange example at ./spec/models/spree/return_item_spec.rb:128","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"pre_tax_amount calculations on create pre tax amount is specified example at ./spec/models/spree/return_item_spec.rb:135","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":".from_inventory_unit with a cancelled return item example at ./spec/models/spree/return_item_spec.rb:147","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":".from_inventory_unit with a non-cancelled return item example at ./spec/models/spree/return_item_spec.rb:153","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"reception_status state_machine starts off in the awaiting state","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"acceptance_status state_machine starts off in the pending state","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"#receive awaiting status transitions successfully","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"#receive return_item has a reception status of received behaves like an invalid state transition cannot transition to received","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"#receive return_item has a reception status of cancelled behaves like an invalid state transition cannot transition to received","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:3:1:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"#receive return_item has a reception status of given_to_customer behaves like an invalid state transition cannot transition to received","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:4:1:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"#cancel awaiting status transitions successfully","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"#cancel return_item has a reception status of received behaves like an invalid state transition cannot transition to cancelled","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"#cancel return_item has a reception status of cancelled behaves like an invalid state transition cannot transition to cancelled","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:3:1:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"#cancel return_item has a reception status of given_to_customer behaves like an invalid state transition cannot transition to cancelled","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:4:1:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"#give awaiting status transitions successfully","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"#give return_item has a reception status of received behaves like an invalid state transition cannot transition to give_to_customer","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"#give return_item has a reception status of cancelled behaves like an invalid state transition cannot transition to give_to_customer","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:3:1:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"#give return_item has a reception status of given_to_customer behaves like an invalid state transition cannot transition to give_to_customer","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:4:1:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"#attempt_accept pending status transitions successfully","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:1:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"#attempt_accept pending status has no acceptance status errors","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:1:2\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"#attempt_accept return_item has an acceptance status of manual_intervention_required behaves like an invalid state transition cannot transition to accepted","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"#attempt_accept return_item has an acceptance status of rejected behaves like an invalid state transition cannot transition to accepted","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:3:1:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"#attempt_accept not eligible for return manual intervention required transitions to manual intervention required","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:4:1:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"#attempt_accept not eligible for return manual intervention required sets the acceptance status errors","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:4:1:2\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"#attempt_accept not eligible for return manual intervention not required transitions to rejected","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:4:2:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"#attempt_accept not eligible for return manual intervention not required sets the acceptance status errors","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:4:2:2\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"#reject pending status transitions successfully","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:1:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"#reject pending status has no acceptance status errors","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:1:2\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"#reject return_item has an acceptance status of rejected behaves like an invalid state transition cannot transition to rejected","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"#accept pending status transitions successfully","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:1:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"#accept pending status has no acceptance status errors","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:1:2\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"#accept return_item has an acceptance status of rejected behaves like an invalid state transition cannot transition to accepted","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"#require_manual_intervention pending status transitions successfully","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:1:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"#require_manual_intervention pending status has no acceptance status errors","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:1:2\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"#require_manual_intervention return_item has an acceptance status of rejected behaves like an invalid state transition cannot transition to manual_intervention_required","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"validity for reimbursements when acceptance_status is accepted is valid","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:1:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"validity for reimbursements when acceptance_status is accepted is valid","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:2:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"#exchange_requested? exchange variant exists example at ./spec/models/spree/return_item_spec.rb:425","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:17:1:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"#exchange_requested? exchange variant does not exist example at ./spec/models/spree/return_item_spec.rb:431","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:17:2:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"#exchange_processed? exchange inventory unit exists example at ./spec/models/spree/return_item_spec.rb:439","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:1:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"#exchange_processed? exchange inventory unit does not exist example at ./spec/models/spree/return_item_spec.rb:445","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:2:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"#exchange_required? exchange has been requested and not yet processed example at ./spec/models/spree/return_item_spec.rb:456","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:1:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"#exchange_required? exchange has not been requested example at ./spec/models/spree/return_item_spec.rb:462","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:2:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"#exchange_required? exchange has been requested and processed example at ./spec/models/spree/return_item_spec.rb:471","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:3:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"#eligible_exchange_variants uses the exchange variant calculator to compute possible variants to exchange for","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:20:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":".exchange_variant_engine defaults to the same product calculator","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:21:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"exchange pre_tax_amount the return item is intended to be exchanged example at ./spec/models/spree/return_item_spec.rb:498","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:22:1:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"exchange pre_tax_amount the return item is not intended to be exchanged example at ./spec/models/spree/return_item_spec.rb:506","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:22:2:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"#build_default_exchange_inventory_unit the return item is intended to be exchanged an exchange inventory unit already exists example at ./spec/models/spree/return_item_spec.rb:527","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:23:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"#build_default_exchange_inventory_unit the return item is intended to be exchanged no exchange inventory unit exists builds a pending inventory unit with references to the return item, variant, and previous inventory unit","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:23:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"#build_default_exchange_inventory_unit the return item is not intended to be exchanged example at ./spec/models/spree/return_item_spec.rb:543","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:23:2:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"#exchange_shipments returns the exchange inventory unit's shipment","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:24:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"#shipment returns the inventory unit's shipment","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:25:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"inventory_unit uniqueness with other awaiting return items exist for the same inventory unit cancels the others","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:26:1:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"inventory_unit uniqueness with other awaiting return items exist for the same inventory unit does not cancel itself","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:26:1:2\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"inventory_unit uniqueness with other cancelled return items exist for the same inventory unit succeeds","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:26:2:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"inventory_unit uniqueness with other received return items exist for the same inventory unit is invalid","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:26:3:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"inventory_unit uniqueness with other given_to_customer return items exist for the same inventory unit is invalid","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:26:4:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"valid exchange variant return item doesn't have an exchange variant is valid","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:27:1:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"valid exchange variant return item has an exchange variant the exchange variant is eligible is valid","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:27:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"valid exchange variant return item has an exchange variant the exchange variant is not eligible new return item is invalid","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:27:2:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"valid exchange variant return item has an exchange variant the exchange variant is not eligible new return item adds an error message about the invalid exchange variant","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:27:2:2:1:2\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"valid exchange variant return item has an exchange variant the exchange variant is not eligible the exchange variant has been updated is invalid","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:27:2:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"valid exchange variant return item has an exchange variant the exchange variant is not eligible the exchange variant has been updated adds an error message about the invalid exchange variant","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:27:2:2:2:2\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"valid exchange variant return item has an exchange variant the exchange variant is not eligible the exchange variant has not been updated is valid","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:27:2:2:3:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"included tax in total includes included tax total","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:28:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"#process_inventory_unit! example at ./spec/models/spree/return_item_spec.rb:719","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"#process_inventory_unit! stock should restock example at ./spec/models/spree/return_item_spec.rb:730","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:2:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"#process_inventory_unit! stock should not restock return_item is not resellable example at ./spec/models/spree/return_item_spec.rb:737","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:3:1:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"#process_inventory_unit! stock should not restock return_item is not resellable example at ./spec/models/spree/return_item_spec.rb:738","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:3:1:2\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"#process_inventory_unit! stock should not restock variant should not track inventory example at ./spec/models/spree/return_item_spec.rb:744","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:3:2:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"#process_inventory_unit! stock should not restock variant should not track inventory example at ./spec/models/spree/return_item_spec.rb:745","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:3:2:2\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"#process_inventory_unit! stock should not restock stock_item not present example at ./spec/models/spree/return_item_spec.rb:751","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:3:3:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"#process_inventory_unit! stock should not restock stock_item not present example at ./spec/models/spree/return_item_spec.rb:752","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:3:3:2\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"#process_inventory_unit! stock should not restock when restock inventory preference false example at ./spec/models/spree/return_item_spec.rb:758","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:3:4:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"#process_inventory_unit! stock should not restock when restock inventory preference false example at ./spec/models/spree/return_item_spec.rb:759","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:3:4:2\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"#process_inventory_unit! #currency responds to currency method","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:4:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"custom events return_item.received publishes return_item.received event when received","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:30:1:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"custom events return_item.canceled publishes return_item.canceled event when canceled","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:30:2:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"custom events return_item.given publishes return_item.given event when given to customer","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:30:3:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"compute_shipment must be overridden","suite":"Spree::ReturnsCalculator at ./spec/models/spree/returns_calculator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","suiteSourceFile":"core/spec/models/spree/returns_calculator_spec.rb"},{"name":"with users can access users through the polymorphic association","suite":"Spree::Role at ./spec/models/spree/role_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/role_spec.rb"},{"name":".default_admin_role returns the default admin role","suite":"Spree::Role at ./spec/models/spree/role_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/role_spec.rb"},{"name":"with different user types can associate with different user types","suite":"Spree::RoleUser at ./spec/models/spree/role_user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/role_user_spec.rb"},{"name":"Callbacks before_validation :set_default_resource sets the resource to the current store if it is not set","suite":"Spree::RoleUser at ./spec/models/spree/role_user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/role_user_spec.rb"},{"name":"#name returns the name of the user","suite":"Spree::RoleUser at ./spec/models/spree/role_user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/role_user_spec.rb"},{"name":"shipment.shipped event publishes shipment.shipped when shipment state changes to shipped","suite":"Spree::Shipment::CustomEvents at ./spec/models/spree/shipment/custom_events_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/shipment/custom_events_spec.rb"},{"name":"shipment.shipped event does not publish when events are disabled","suite":"Spree::Shipment::CustomEvents at ./spec/models/spree/shipment/custom_events_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/shipment/custom_events_spec.rb"},{"name":"order.shipped event publishes order.shipped when shipment ships and order is fully shipped","suite":"Spree::Shipment::CustomEvents at ./spec/models/spree/shipment/custom_events_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/shipment/custom_events_spec.rb"},{"name":"order.shipped event does not publish order.shipped when order has unshipped shipments","suite":"Spree::Shipment::CustomEvents at ./spec/models/spree/shipment/custom_events_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","suiteSourceFile":"core/spec/models/spree/shipment/custom_events_spec.rb"},{"name":"is backordered if one if its inventory_units is backordered","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"#discounted_cost","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"#tax_total with included taxes","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"#tax_total with additional taxes","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:20\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"#final_price","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:21\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"behaves like lifecycle events lifecycle events shipment.created publishes created event when record is created","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"behaves like lifecycle events lifecycle events shipment.updated publishes updated event when record is updated","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"behaves like lifecycle events lifecycle events shipment.deleted publishes deleted event when record is deleted","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:4","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:5","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:7","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:8","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:4\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:10","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:5\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:11","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:6\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"behaves like metadata reads data as symbolized keys","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:7\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"behaves like metadata reads data as not symbolized keys","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:8\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"behaves like metadata can query records by metadata properties","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:10\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"precision of pre_tax_amount keeps four digits of precision even when reloading","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"#digital? returns true if shipping method has a digital calculator","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"#digital? returns false if shipping method does not have a digital calculator","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"#digital? when shipping method is nil returns false if shipping method is nil","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3:1\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"#name returns the shipment number and shipping method name","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"#tracked? returns true if the shipment is tracked","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"#tracked? when the shipment is not tracked returns false","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2:1\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"#partial? when all products are included in the shipment example at ./spec/models/spree/shipment_spec.rb:85","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1:1\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"#partial? when not all products are included in the shipment example at ./spec/models/spree/shipment_spec.rb:93","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2:1\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"number generation generates a number containing a letter + 11 numbers","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"#determine_state returns canceled if order is canceled?","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"#determine_state returns canceled when shipment is canceled","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:2\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"#determine_state returns pending unless order.can_ship?","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:3\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"#determine_state returns pending if backordered","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:4\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"#determine_state returns shipped when already shipped","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:5\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"#determine_state returns pending when unpaid","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:6\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"#determine_state returns ready when paid","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:7\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"#determine_state returns ready when Config.auto_capture_on_dispatch","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:8\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"display_amount retuns a Spree::Money","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"display_final_price retuns a Spree::Money","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:1\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"display_item_cost retuns a Spree::Money","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:1\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"#item_cost equals shipment line items amount with tax","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:1\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"#item_cost equals line items final amount with tax","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:2\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"#item_quantity returns the sum of all manifest quantities with multiple quantities per line_item","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:1\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"#item_quantity returns the sum of all manifest quantities with single quantity per line_item","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:2\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"#item_quantity returns only the sum of items in the specific shipment, not in other shipments","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:3\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"#item_quantity returns 0 if there are no items in the shipment","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:4\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"#item_weight equals line items weight","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:1\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"#weight_unit equals line items weight unit","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:17:1\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"#free? returns true if final_price is equal to 0","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:22:1\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"#free? returns when Free Shipping promotion is applied","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:22:2\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"#with_free_shipping_promotion? returns true when Free Shipping promotion is applied","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:23:1\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"#with_free_shipping_promotion? returns false otherwise","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:23:2\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"#store return order store","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:24:1\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"#currency return order currency","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:25:1\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"manifest returns variant expected","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:26:1\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"manifest variant was removed still returns variant expected","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:26:2:1\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"#can_get_rates? returns true if order is digital and it does not have a ship address","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:27:1\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"#can_get_rates? returns false if order is not digital and it does not have a ship address","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:27:2\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"#can_get_rates? returns false when order's ship address is not valid","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:27:3\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"#can_get_rates? returns true when order's ship address is valid","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:27:4\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"shipping_rates returns shipping_method from selected shipping_rate","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:28:1\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"shipping_rates refresh_rates requests new rates, and maintain shipping_method selection","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:28:2:1\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"shipping_rates refresh_rates handles no shipping_method selection","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:28:2:2\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"shipping_rates refresh_rates does not refresh if shipment is shipped","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:28:2:3\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"shipping_rates refresh_rates can't get rates without a shipping address","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:28:2:4\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"shipping_rates refresh_rates to_package uses symbols for states when adding contents to package","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:28:2:5:1\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"#update! when order cannot ship results in a 'pending' state","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:1:1\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"#update! when order is paid results in a 'ready' state","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:2:1\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"#update! when order is paid behaves like immutable once shipped remains in shipped state once shipped","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"#update! when order is paid behaves like pending if backordered has a state of pending if backordered","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:2:3:1\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"#update! when order has balance due results in a 'pending' state","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:3:1\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"#update! when order has balance due behaves like immutable once shipped remains in shipped state once shipped","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:3:2:1\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"#update! when order has balance due behaves like pending if backordered has a state of pending if backordered","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:3:3:1\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"#update! when order has a credit owed results in a 'ready' state","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:4:1\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"#update! when order has a credit owed behaves like immutable once shipped remains in shipped state once shipped","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:4:2:1\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"#update! when order has a credit owed behaves like pending if backordered has a state of pending if backordered","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:4:3:1\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"#update! when shipment state changes to shipped calls after_ship","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:5:1\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"#update! when shipment state changes to shipped when using the default shipment handler calls the 'perform' method","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:5:2:1\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"#update! when shipment state changes to shipped when using a custom shipment handler calls the custom handler's 'perform' method","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:5:3:1\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"#update! when shipment state changes to shipped with adjustments transitions to shipped","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:5:4:1\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"when order is completed with inventory tracking validates with inventory","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:30:1:1\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"when order is completed without inventory tracking validates with no inventory","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:30:2:1\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"#cancel cancels the shipment","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:31:1\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"#cancel restocks the items","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:31:2\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"#cancel with backordered inventory units doesn't fill backorders when restocking inventory units","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:31:3:1\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"#resume transitions state to ready if the order is ready","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:32:1\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"#resume transitions state to pending if the order is not ready","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:32:2\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"#resume unstocks them items","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:32:3\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"#resume for a shipment item that does not track inventory skips unstocking the shipment item","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:32:4:1\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"#ship when the shipment is canceled unstocks them items","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:33:1:1\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"#ship from ready updates shipped_at timestamp","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:33:2:1\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"#ship from ready finalizes adjustments","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:33:2:2\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"#ship from canceled updates shipped_at timestamp","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:33:3:1\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"#ship from canceled finalizes adjustments","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:33:3:2\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"#ready with Config.auto_capture_on_dispatch == false cannot ready a shipment for an order if the order is unpaid","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:34:1:1\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"#ready with Config.auto_capture_on_dispatch == true shipments ready for an order if the order is unpaid","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:34:2:1\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"#ready with Config.auto_capture_on_dispatch == true tells the order to process payment in #after_ship","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:34:2:2\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"#ready with Config.auto_capture_on_dispatch == true order has pending payments can fully capture an authorized payment","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:34:2:3:1\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"#ready with Config.auto_capture_on_dispatch == true order has pending payments can partially capture an authorized payment","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:34:2:3:2\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"updates cost when selected shipping rate is present updates shipment totals","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:35:1\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"updates cost when selected shipping rate is present factors in additional adjustments to adjustment total","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:35:2\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"updates cost when selected shipping rate is present does not factor in included adjustments to adjustment total","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:35:3\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"changes shipping rate via general update updates everything around order shipment total and state","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:36:1\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"after_save line item changes triggers adjustment total recalculation","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:37:1:1\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"after_save line item changes does not trigger adjustment recalculation if shipment has shipped","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:37:1:2\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"after_save line item does not change does not trigger adjustment total recalculation","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:37:2:1\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"currency returns the order currency","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:38:1\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"nil costs sets cost to 0","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:39:1\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"#tracking_url uses shipping method to determine url","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:40:1\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"#transfer_to_location creates new shipment for same order","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:41:1\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"#transfer_to_location sets the given stock location for new shipment","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:41:2\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"#transfer_to_location sets proper costs for new shipment","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:41:3\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"#transfer_to_location updates `order.shipment_total` to the sum of shipments cost","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:41:4\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"set up new inventory units associates variant and order","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:42:1\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"#destroy destroys linked shipping_rates","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:43:1\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"state changes are logged to the database","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:44:1\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":".ready_or_pending returns shipments with state ready or pending","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:45:1\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"events shipped state transition publishes shipment.shipped event","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:46:1:1\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"events canceled state transition publishes shipment.canceled event","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:46:2:1\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"events resumed state transition publishes shipment.resumed event","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:46:3:1\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"computes with a shipment","suite":"Spree::ShippingCalculator at ./spec/models/spree/shipping_calculator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","suiteSourceFile":"core/spec/models/spree/shipping_calculator_spec.rb"},{"name":"computes with a package","suite":"Spree::ShippingCalculator at ./spec/models/spree/shipping_calculator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2\"}}","suiteSourceFile":"core/spec/models/spree/shipping_calculator_spec.rb"},{"name":"compute_shipment must be overridden","suite":"Spree::ShippingCalculator at ./spec/models/spree/shipping_calculator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3\"}}","suiteSourceFile":"core/spec/models/spree/shipping_calculator_spec.rb"},{"name":"compute_package must be overridden","suite":"Spree::ShippingCalculator at ./spec/models/spree/shipping_calculator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4\"}}","suiteSourceFile":"core/spec/models/spree/shipping_calculator_spec.rb"},{"name":"checks availability for a package","suite":"Spree::ShippingCalculator at ./spec/models/spree/shipping_calculator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5\"}}","suiteSourceFile":"core/spec/models/spree/shipping_calculator_spec.rb"},{"name":"calculates totals for content_items","suite":"Spree::ShippingCalculator at ./spec/models/spree/shipping_calculator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6\"}}","suiteSourceFile":"core/spec/models/spree/shipping_calculator_spec.rb"},{"name":"Validations has a valid factory","suite":"Spree::ShippingCategory at ./spec/models/spree/shipping_category_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/shipping_category_spec.rb"},{"name":"Validations requires name","suite":"Spree::ShippingCategory at ./spec/models/spree/shipping_category_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/shipping_category_spec.rb"},{"name":"Validations validates uniqueness","suite":"Spree::ShippingCategory at ./spec/models/spree/shipping_category_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/models/spree/shipping_category_spec.rb"},{"name":"#includes_digital_shipping_method? returns true if the shipping category includes a digital shipping method","suite":"Spree::ShippingCategory at ./spec/models/spree/shipping_category_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/shipping_category_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:4","suite":"Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/shipping_method_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:5","suite":"Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/shipping_method_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:7","suite":"Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/models/spree/shipping_method_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:8","suite":"Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","suiteSourceFile":"core/spec/models/spree/shipping_method_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:10","suite":"Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","suiteSourceFile":"core/spec/models/spree/shipping_method_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:11","suite":"Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","suiteSourceFile":"core/spec/models/spree/shipping_method_spec.rb"},{"name":"behaves like metadata reads data as symbolized keys","suite":"Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7\"}}","suiteSourceFile":"core/spec/models/spree/shipping_method_spec.rb"},{"name":"behaves like metadata reads data as not symbolized keys","suite":"Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8\"}}","suiteSourceFile":"core/spec/models/spree/shipping_method_spec.rb"},{"name":"behaves like metadata can query records by metadata properties","suite":"Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:10\"}}","suiteSourceFile":"core/spec/models/spree/shipping_method_spec.rb"},{"name":"scopes .available example at ./spec/models/spree/shipping_method_spec.rb:22","suite":"Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/shipping_method_spec.rb"},{"name":"scopes .available_on_front_end example at ./spec/models/spree/shipping_method_spec.rb:28","suite":"Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/shipping_method_spec.rb"},{"name":"scopes .available_on_back_end example at ./spec/models/spree/shipping_method_spec.rb:34","suite":"Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:1\"}}","suiteSourceFile":"core/spec/models/spree/shipping_method_spec.rb"},{"name":"#requires_zone_check? returns true if the shipping method is not digital","suite":"Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/shipping_method_spec.rb"},{"name":"#requires_zone_check? returns false if the shipping method is digital","suite":"Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","suiteSourceFile":"core/spec/models/spree/shipping_method_spec.rb"},{"name":"calculators rejects calculators that don't inherit from Spree::ShippingCalculator","suite":"Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/shipping_method_spec.rb"},{"name":"#shipments can gather all the related shipments","suite":"Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","suiteSourceFile":"core/spec/models/spree/shipping_method_spec.rb"},{"name":"validations validates presence of name","suite":"Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","suiteSourceFile":"core/spec/models/spree/shipping_method_spec.rb"},{"name":"validations validates presence of display_on","suite":"Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2\"}}","suiteSourceFile":"core/spec/models/spree/shipping_method_spec.rb"},{"name":"validations shipping category is required example at ./spec/models/spree/shipping_method_spec.rb:92","suite":"Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:3:1:1\"}}","suiteSourceFile":"core/spec/models/spree/shipping_method_spec.rb"},{"name":"validations shipping category is required adds error to base","suite":"Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:3:1:2\"}}","suiteSourceFile":"core/spec/models/spree/shipping_method_spec.rb"},{"name":"validations shipping category one associated example at ./spec/models/spree/shipping_method_spec.rb:105","suite":"Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:3:2:1\"}}","suiteSourceFile":"core/spec/models/spree/shipping_method_spec.rb"},{"name":"factory sets calculable correctly","suite":"Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","suiteSourceFile":"core/spec/models/spree/shipping_method_spec.rb"},{"name":"#build_tracking_url shipping method has a tracking URL mask on file tracking number has spaces returns a single URL with '%20' in lieu of spaces","suite":"Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/shipping_method_spec.rb"},{"name":"#build_tracking_url shipping method does not have a tracking URL mask on file uses tracking number gem to build tracking url","suite":"Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2:1\"}}","suiteSourceFile":"core/spec/models/spree/shipping_method_spec.rb"},{"name":"soft deletion soft-deletes when destroy is called","suite":"Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1\"}}","suiteSourceFile":"core/spec/models/spree/shipping_method_spec.rb"},{"name":"#available_to_display? when available on frontend example at ./spec/models/spree/shipping_method_spec.rb:157","suite":"Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1:1\"}}","suiteSourceFile":"core/spec/models/spree/shipping_method_spec.rb"},{"name":"#available_to_display? when available on frontend example at ./spec/models/spree/shipping_method_spec.rb:158","suite":"Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1:2\"}}","suiteSourceFile":"core/spec/models/spree/shipping_method_spec.rb"},{"name":"#available_to_display? when available on frontend example at ./spec/models/spree/shipping_method_spec.rb:159","suite":"Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1:3\"}}","suiteSourceFile":"core/spec/models/spree/shipping_method_spec.rb"},{"name":"#available_to_display? when available on backend example at ./spec/models/spree/shipping_method_spec.rb:163","suite":"Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:2:1\"}}","suiteSourceFile":"core/spec/models/spree/shipping_method_spec.rb"},{"name":"#available_to_display? when available on backend example at ./spec/models/spree/shipping_method_spec.rb:164","suite":"Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:2:2\"}}","suiteSourceFile":"core/spec/models/spree/shipping_method_spec.rb"},{"name":"#available_to_display? when available on backend example at ./spec/models/spree/shipping_method_spec.rb:165","suite":"Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:2:3\"}}","suiteSourceFile":"core/spec/models/spree/shipping_method_spec.rb"},{"name":"#frontend? example at ./spec/models/spree/shipping_method_spec.rb:170","suite":"Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1\"}}","suiteSourceFile":"core/spec/models/spree/shipping_method_spec.rb"},{"name":"#frontend? example at ./spec/models/spree/shipping_method_spec.rb:171","suite":"Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2\"}}","suiteSourceFile":"core/spec/models/spree/shipping_method_spec.rb"},{"name":"#frontend? example at ./spec/models/spree/shipping_method_spec.rb:172","suite":"Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:3\"}}","suiteSourceFile":"core/spec/models/spree/shipping_method_spec.rb"},{"name":"#backend? example at ./spec/models/spree/shipping_method_spec.rb:176","suite":"Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:1\"}}","suiteSourceFile":"core/spec/models/spree/shipping_method_spec.rb"},{"name":"#backend? example at ./spec/models/spree/shipping_method_spec.rb:177","suite":"Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:2\"}}","suiteSourceFile":"core/spec/models/spree/shipping_method_spec.rb"},{"name":"#backend? example at ./spec/models/spree/shipping_method_spec.rb:178","suite":"Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:3\"}}","suiteSourceFile":"core/spec/models/spree/shipping_method_spec.rb"},{"name":"#delivery_range without set estimated_transit_business_days_min and estimated_transit_business_days_max example at ./spec/models/spree/shipping_method_spec.rb:183","suite":"Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:1:1\"}}","suiteSourceFile":"core/spec/models/spree/shipping_method_spec.rb"},{"name":"#delivery_range with set estimated_transit_business_days_min and estimated_transit_business_days_max example at ./spec/models/spree/shipping_method_spec.rb:189","suite":"Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:2:1\"}}","suiteSourceFile":"core/spec/models/spree/shipping_method_spec.rb"},{"name":"#delivery_range when both are the same example at ./spec/models/spree/shipping_method_spec.rb:195","suite":"Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:3:1\"}}","suiteSourceFile":"core/spec/models/spree/shipping_method_spec.rb"},{"name":"#delivery_range when only one transit day value is set when only minimum day is set example at ./spec/models/spree/shipping_method_spec.rb:202","suite":"Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:4:1:1\"}}","suiteSourceFile":"core/spec/models/spree/shipping_method_spec.rb"},{"name":"#delivery_range when only one transit day value is set when only maximum day is set example at ./spec/models/spree/shipping_method_spec.rb:208","suite":"Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:4:2:1\"}}","suiteSourceFile":"core/spec/models/spree/shipping_method_spec.rb"},{"name":"#display_estimated_price example at ./spec/models/spree/shipping_method_spec.rb:214","suite":"Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:1\"}}","suiteSourceFile":"core/spec/models/spree/shipping_method_spec.rb"},{"name":"#display_estimated_price with the free rate example at ./spec/models/spree/shipping_method_spec.rb:219","suite":"Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:2:1\"}}","suiteSourceFile":"core/spec/models/spree/shipping_method_spec.rb"},{"name":"#display_price when tax included in price when the tax rate is from the default zone shows correct tax amount","suite":"Spree::ShippingRate at ./spec/models/spree/shipping_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/shipping_rate_spec.rb"},{"name":"#display_price when tax included in price when the tax rate is from the default zone when cost is zero shows no tax amount","suite":"Spree::ShippingRate at ./spec/models/spree/shipping_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/shipping_rate_spec.rb"},{"name":"#display_price when tax included in price when the tax rate is from another zone deducts the other zone's VAT from the calculated shipping rate","suite":"Spree::ShippingRate at ./spec/models/spree/shipping_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/shipping_rate_spec.rb"},{"name":"#display_price when tax included in price when the tax rate is from another zone when cost is zero shows no tax amount","suite":"Spree::ShippingRate at ./spec/models/spree/shipping_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/shipping_rate_spec.rb"},{"name":"#display_price when tax is additional to price shows correct tax amount","suite":"Spree::ShippingRate at ./spec/models/spree/shipping_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/shipping_rate_spec.rb"},{"name":"#display_price when tax is additional to price when cost is zero shows no tax amount","suite":"Spree::ShippingRate at ./spec/models/spree/shipping_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/shipping_rate_spec.rb"},{"name":"#display_price when the currency is JPY displays the price in yen","suite":"Spree::ShippingRate at ./spec/models/spree/shipping_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/shipping_rate_spec.rb"},{"name":"#display_price when tax rate is not shown in label shows no tax amount","suite":"Spree::ShippingRate at ./spec/models/spree/shipping_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/shipping_rate_spec.rb"},{"name":"#shipping_method can be retrieved","suite":"Spree::ShippingRate at ./spec/models/spree/shipping_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/shipping_rate_spec.rb"},{"name":"#shipping_method can be retrieved even when deleted","suite":"Spree::ShippingRate at ./spec/models/spree/shipping_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","suiteSourceFile":"core/spec/models/spree/shipping_rate_spec.rb"},{"name":"#tax_rate can be retrieved","suite":"Spree::ShippingRate at ./spec/models/spree/shipping_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/shipping_rate_spec.rb"},{"name":"#tax_rate can be retrieved even when deleted","suite":"Spree::ShippingRate at ./spec/models/spree/shipping_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","suiteSourceFile":"core/spec/models/spree/shipping_rate_spec.rb"},{"name":"#tax_amount without tax rate returns 0.0","suite":"Spree::ShippingRate at ./spec/models/spree/shipping_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1\"}}","suiteSourceFile":"core/spec/models/spree/shipping_rate_spec.rb"},{"name":"#final_price returns 0 if free shipping promotion is applied","suite":"Spree::ShippingRate at ./spec/models/spree/shipping_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","suiteSourceFile":"core/spec/models/spree/shipping_rate_spec.rb"},{"name":"#final_price returns 0 if cost is lesser than the discount amount","suite":"Spree::ShippingRate at ./spec/models/spree/shipping_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2\"}}","suiteSourceFile":"core/spec/models/spree/shipping_rate_spec.rb"},{"name":"#final_price returns cost minus discount amount","suite":"Spree::ShippingRate at ./spec/models/spree/shipping_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3\"}}","suiteSourceFile":"core/spec/models/spree/shipping_rate_spec.rb"},{"name":"#final_price does not return 0 when shipment is free because of selected shipping rate","suite":"Spree::ShippingRate at ./spec/models/spree/shipping_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:4\"}}","suiteSourceFile":"core/spec/models/spree/shipping_rate_spec.rb"},{"name":"#delivery_range returns the delivery range for the shipping method","suite":"Spree::ShippingRate at ./spec/models/spree/shipping_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","suiteSourceFile":"core/spec/models/spree/shipping_rate_spec.rb"},{"name":"#display_delivery_range returns the display delivery range for the shipping method","suite":"Spree::ShippingRate at ./spec/models/spree/shipping_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","suiteSourceFile":"core/spec/models/spree/shipping_rate_spec.rb"},{"name":"#free? when the shipping rate cost is 0 example at ./spec/models/spree/shipping_rate_spec.rb:208","suite":"Spree::ShippingRate at ./spec/models/spree/shipping_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1:1\"}}","suiteSourceFile":"core/spec/models/spree/shipping_rate_spec.rb"},{"name":"#free? when the shipping rate cost is not 0 example at ./spec/models/spree/shipping_rate_spec.rb:217","suite":"Spree::ShippingRate at ./spec/models/spree/shipping_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2:1\"}}","suiteSourceFile":"core/spec/models/spree/shipping_rate_spec.rb"},{"name":"#free? when the shipping rate cost is not 0 when the shipment has a free shipping promotion example at ./spec/models/spree/shipping_rate_spec.rb:227","suite":"Spree::ShippingRate at ./spec/models/spree/shipping_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/shipping_rate_spec.rb"},{"name":"#free? when the shipping rate cost is not 0 when the discount amount is equal to the cost example at ./spec/models/spree/shipping_rate_spec.rb:235","suite":"Spree::ShippingRate at ./spec/models/spree/shipping_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2:3:1\"}}","suiteSourceFile":"core/spec/models/spree/shipping_rate_spec.rb"},{"name":"can find a state by name or abbr","suite":"Spree::State at ./spec/models/spree/state_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","suiteSourceFile":"core/spec/models/spree/state_spec.rb"},{"name":"can find all states group by country id","suite":"Spree::State at ./spec/models/spree/state_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2\"}}","suiteSourceFile":"core/spec/models/spree/state_spec.rb"},{"name":"whitelisted_ransackable_attributes example at ./spec/models/spree/state_spec.rb:16","suite":"Spree::State at ./spec/models/spree/state_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/state_spec.rb"},{"name":"is valid when supply is sufficient and product is active","suite":"Spree::Stock::AvailabilityValidator at ./spec/models/spree/stock/availability_validator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","suiteSourceFile":"core/spec/models/spree/stock/availability_validator_spec.rb"},{"name":"is invalid when supply is insufficent","suite":"Spree::Stock::AvailabilityValidator at ./spec/models/spree/stock/availability_validator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2\"}}","suiteSourceFile":"core/spec/models/spree/stock/availability_validator_spec.rb"},{"name":"considers existing inventory_units sufficient","suite":"Spree::Stock::AvailabilityValidator at ./spec/models/spree/stock/availability_validator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3\"}}","suiteSourceFile":"core/spec/models/spree/stock/availability_validator_spec.rb"},{"name":"is valid when the quantity is zero","suite":"Spree::Stock::AvailabilityValidator at ./spec/models/spree/stock/availability_validator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4\"}}","suiteSourceFile":"core/spec/models/spree/stock/availability_validator_spec.rb"},{"name":"when supply is sufficient but product is not active shows a message about product status and not quantity","suite":"Spree::Stock::AvailabilityValidator at ./spec/models/spree/stock/availability_validator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","suiteSourceFile":"core/spec/models/spree/stock/availability_validator_spec.rb"},{"name":"#volume calculate the total volume of the variant","suite":"Spree::Stock::ContentItem at ./spec/models/spree/stock/content_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/stock/content_item_spec.rb"},{"name":"#dimension calculate the total dimension of the variant","suite":"Spree::Stock::ContentItem at ./spec/models/spree/stock/content_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/stock/content_item_spec.rb"},{"name":"#amount calculates the amount based on line_item's price","suite":"Spree::Stock::ContentItem at ./spec/models/spree/stock/content_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/stock/content_item_spec.rb"},{"name":"packages builds, prioritizes and estimates","suite":"Spree::Stock::Coordinator at ./spec/models/spree/stock/coordinator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/stock/coordinator_spec.rb"},{"name":"#shipments turns packages into shipments","suite":"Spree::Stock::Coordinator at ./spec/models/spree/stock/coordinator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/stock/coordinator_spec.rb"},{"name":"#shipments puts the order's ship address on the shipments","suite":"Spree::Stock::Coordinator at ./spec/models/spree/stock/coordinator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","suiteSourceFile":"core/spec/models/spree/stock/coordinator_spec.rb"},{"name":"build packages builds a package for every stock location","suite":"Spree::Stock::Coordinator at ./spec/models/spree/stock/coordinator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/stock/coordinator_spec.rb"},{"name":"build packages missing stock items in stock location builds packages only for valid stock locations","suite":"Spree::Stock::Coordinator at ./spec/models/spree/stock/coordinator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","suiteSourceFile":"core/spec/models/spree/stock/coordinator_spec.rb"},{"name":"example at ./spec/models/spree/stock/differentiator_spec.rb:31","suite":"Spree::Stock::Differentiator at ./spec/models/spree/stock/differentiator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","suiteSourceFile":"core/spec/models/spree/stock/differentiator_spec.rb"},{"name":"calculates the missing items","suite":"Spree::Stock::Differentiator at ./spec/models/spree/stock/differentiator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2\"}}","suiteSourceFile":"core/spec/models/spree/stock/differentiator_spec.rb"},{"name":"#shipping rates sorts shipping rates by cost","suite":"Spree::Stock::Estimator at ./spec/models/spree/stock/estimator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8\"}}","suiteSourceFile":"core/spec/models/spree/stock/estimator_spec.rb"},{"name":"#shipping rates when the order's ship address is in the same zone behaves like shipping rate matches returns shipping rates","suite":"Spree::Stock::Estimator at ./spec/models/spree/stock/estimator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/stock/estimator_spec.rb"},{"name":"#shipping rates when the order's ship address is in a different zone behaves like shipping rate doesn't match does not return shipping rates","suite":"Spree::Stock::Estimator at ./spec/models/spree/stock/estimator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/stock/estimator_spec.rb"},{"name":"#shipping rates when the calculator is not available for that order behaves like shipping rate doesn't match does not return shipping rates","suite":"Spree::Stock::Estimator at ./spec/models/spree/stock/estimator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1:1\"}}","suiteSourceFile":"core/spec/models/spree/stock/estimator_spec.rb"},{"name":"#shipping rates when the currency is nil behaves like shipping rate matches returns shipping rates","suite":"Spree::Stock::Estimator at ./spec/models/spree/stock/estimator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1:1\"}}","suiteSourceFile":"core/spec/models/spree/stock/estimator_spec.rb"},{"name":"#shipping rates when the currency is an empty string behaves like shipping rate matches returns shipping rates","suite":"Spree::Stock::Estimator at ./spec/models/spree/stock/estimator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5:1:1\"}}","suiteSourceFile":"core/spec/models/spree/stock/estimator_spec.rb"},{"name":"#shipping rates when the current matches the order's currency behaves like shipping rate matches returns shipping rates","suite":"Spree::Stock::Estimator at ./spec/models/spree/stock/estimator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6:1:1\"}}","suiteSourceFile":"core/spec/models/spree/stock/estimator_spec.rb"},{"name":"#shipping rates if the currency is different than the order's currency behaves like shipping rate doesn't match does not return shipping rates","suite":"Spree::Stock::Estimator at ./spec/models/spree/stock/estimator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7:1:1\"}}","suiteSourceFile":"core/spec/models/spree/stock/estimator_spec.rb"},{"name":"#shipping rates general shipping methods selects the most affordable shipping rate","suite":"Spree::Stock::Estimator at ./spec/models/spree/stock/estimator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:9:1\"}}","suiteSourceFile":"core/spec/models/spree/stock/estimator_spec.rb"},{"name":"#shipping rates general shipping methods selects the most affordable shipping rate and doesn't raise exception over nil cost","suite":"Spree::Stock::Estimator at ./spec/models/spree/stock/estimator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:9:2\"}}","suiteSourceFile":"core/spec/models/spree/stock/estimator_spec.rb"},{"name":"#shipping rates involves backend only shipping methods does not return backend rates at all","suite":"Spree::Stock::Estimator at ./spec/models/spree/stock/estimator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:10:1\"}}","suiteSourceFile":"core/spec/models/spree/stock/estimator_spec.rb"},{"name":"#shipping rates involves backend only shipping methods doesn't select backend rates even if they're more affordable","suite":"Spree::Stock::Estimator at ./spec/models/spree/stock/estimator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:10:2\"}}","suiteSourceFile":"core/spec/models/spree/stock/estimator_spec.rb"},{"name":"#shipping rates includes tax adjustments if applicable links the shipping rate and the tax rate","suite":"Spree::Stock::Estimator at ./spec/models/spree/stock/estimator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:11:1\"}}","suiteSourceFile":"core/spec/models/spree/stock/estimator_spec.rb"},{"name":"#shipping rates VAT price calculation when the order does not have a tax zone behaves like shipping rate matches returns shipping rates","suite":"Spree::Stock::Estimator at ./spec/models/spree/stock/estimator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:12:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/stock/estimator_spec.rb"},{"name":"#shipping rates VAT price calculation when the order's tax zone is the default zone behaves like shipping rate matches returns shipping rates","suite":"Spree::Stock::Estimator at ./spec/models/spree/stock/estimator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:12:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/stock/estimator_spec.rb"},{"name":"#shipping rates VAT price calculation when the order's tax zone is a non-VAT zone deducts the default VAT from the cost","suite":"Spree::Stock::Estimator at ./spec/models/spree/stock/estimator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:12:3:1\"}}","suiteSourceFile":"core/spec/models/spree/stock/estimator_spec.rb"},{"name":"#shipping rates VAT price calculation when the order's tax zone is a zone with VAT outside the default zone deducts the default vat and applies the foreign vat to calculate the price","suite":"Spree::Stock::Estimator at ./spec/models/spree/stock/estimator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:12:4:1\"}}","suiteSourceFile":"core/spec/models/spree/stock/estimator_spec.rb"},{"name":"#units returns an inventory unit for each quantity for the order's line items","suite":"Spree::Stock::InventoryUnitBuilder at ./spec/models/spree/stock/inventory_unit_builder_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/stock/inventory_unit_builder_spec.rb"},{"name":"#units builds the inventory units as pending","suite":"Spree::Stock::InventoryUnitBuilder at ./spec/models/spree/stock/inventory_unit_builder_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/stock/inventory_unit_builder_spec.rb"},{"name":"#units sets the order_id on inventory units","suite":"Spree::Stock::InventoryUnitBuilder at ./spec/models/spree/stock/inventory_unit_builder_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/models/spree/stock/inventory_unit_builder_spec.rb"},{"name":"calculates the weight of all the contents","suite":"Spree::Stock::Package at ./spec/models/spree/stock/package_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","suiteSourceFile":"core/spec/models/spree/stock/package_spec.rb"},{"name":"filters by on_hand and backordered","suite":"Spree::Stock::Package at ./spec/models/spree/stock/package_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3\"}}","suiteSourceFile":"core/spec/models/spree/stock/package_spec.rb"},{"name":"calculates the quantity by state","suite":"Spree::Stock::Package at ./spec/models/spree/stock/package_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4\"}}","suiteSourceFile":"core/spec/models/spree/stock/package_spec.rb"},{"name":"returns nil for content item not found","suite":"Spree::Stock::Package at ./spec/models/spree/stock/package_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5\"}}","suiteSourceFile":"core/spec/models/spree/stock/package_spec.rb"},{"name":"finds content item for an inventory unit","suite":"Spree::Stock::Package at ./spec/models/spree/stock/package_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6\"}}","suiteSourceFile":"core/spec/models/spree/stock/package_spec.rb"},{"name":"builds a list of shipping methods common to all categories","suite":"Spree::Stock::Package at ./spec/models/spree/stock/package_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7\"}}","suiteSourceFile":"core/spec/models/spree/stock/package_spec.rb"},{"name":"can convert to a shipment","suite":"Spree::Stock::Package at ./spec/models/spree/stock/package_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9\"}}","suiteSourceFile":"core/spec/models/spree/stock/package_spec.rb"},{"name":"currency returns the currency based on the currency from the order","suite":"Spree::Stock::Package at ./spec/models/spree/stock/package_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/stock/package_spec.rb"},{"name":"when no categories builds an empty list of shipping methods","suite":"Spree::Stock::Package at ./spec/models/spree/stock/package_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1\"}}","suiteSourceFile":"core/spec/models/spree/stock/package_spec.rb"},{"name":"#add_multiple adds multiple inventory units","suite":"Spree::Stock::Package at ./spec/models/spree/stock/package_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1\"}}","suiteSourceFile":"core/spec/models/spree/stock/package_spec.rb"},{"name":"#add_multiple allows adding with a state","suite":"Spree::Stock::Package at ./spec/models/spree/stock/package_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:2\"}}","suiteSourceFile":"core/spec/models/spree/stock/package_spec.rb"},{"name":"#add_multiple defaults to adding with the on hand state","suite":"Spree::Stock::Package at ./spec/models/spree/stock/package_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:3\"}}","suiteSourceFile":"core/spec/models/spree/stock/package_spec.rb"},{"name":"#remove there is a content item for the inventory unit removes that content item","suite":"Spree::Stock::Package at ./spec/models/spree/stock/package_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1:1\"}}","suiteSourceFile":"core/spec/models/spree/stock/package_spec.rb"},{"name":"#remove there is no content item for the inventory unit doesn't change the set of content items","suite":"Spree::Stock::Package at ./spec/models/spree/stock/package_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2:1\"}}","suiteSourceFile":"core/spec/models/spree/stock/package_spec.rb"},{"name":"#order there is an inventory unit returns an order","suite":"Spree::Stock::Package at ./spec/models/spree/stock/package_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:1:1\"}}","suiteSourceFile":"core/spec/models/spree/stock/package_spec.rb"},{"name":"#order there is no inventory unit returns nil","suite":"Spree::Stock::Package at ./spec/models/spree/stock/package_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:2:1\"}}","suiteSourceFile":"core/spec/models/spree/stock/package_spec.rb"},{"name":"#volume calculates the sum of the volume of all the items","suite":"Spree::Stock::Package at ./spec/models/spree/stock/package_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:1\"}}","suiteSourceFile":"core/spec/models/spree/stock/package_spec.rb"},{"name":"#dimension calculates the sum of the dimension of all the items","suite":"Spree::Stock::Package at ./spec/models/spree/stock/package_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:1\"}}","suiteSourceFile":"core/spec/models/spree/stock/package_spec.rb"},{"name":"packages builds an array of packages","suite":"Spree::Stock::Packer at ./spec/models/spree/stock/packer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/stock/packer_spec.rb"},{"name":"packages allows users to set splitters to an empty array","suite":"Spree::Stock::Packer at ./spec/models/spree/stock/packer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/stock/packer_spec.rb"},{"name":"default_package contains all the items","suite":"Spree::Stock::Packer at ./spec/models/spree/stock/packer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/stock/packer_spec.rb"},{"name":"default_package variants are added as backordered without enough on_hand","suite":"Spree::Stock::Packer at ./spec/models/spree/stock/packer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","suiteSourceFile":"core/spec/models/spree/stock/packer_spec.rb"},{"name":"default_package location doesn't have order items in stock builds an empty package","suite":"Spree::Stock::Packer at ./spec/models/spree/stock/packer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:1\"}}","suiteSourceFile":"core/spec/models/spree/stock/packer_spec.rb"},{"name":"default_package doesn't track inventory levels doesn't bother stock items status in stock location","suite":"Spree::Stock::Packer at ./spec/models/spree/stock/packer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:4:1\"}}","suiteSourceFile":"core/spec/models/spree/stock/packer_spec.rb"},{"name":"default_package doesn't track inventory levels still creates package with proper quantity","suite":"Spree::Stock::Packer at ./spec/models/spree/stock/packer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:4:2\"}}","suiteSourceFile":"core/spec/models/spree/stock/packer_spec.rb"},{"name":"keeps a single package","suite":"Spree::Stock::Prioritizer at ./spec/models/spree/stock/prioritizer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","suiteSourceFile":"core/spec/models/spree/stock/prioritizer_spec.rb"},{"name":"removes duplicate packages","suite":"Spree::Stock::Prioritizer at ./spec/models/spree/stock/prioritizer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2\"}}","suiteSourceFile":"core/spec/models/spree/stock/prioritizer_spec.rb"},{"name":"split over 2 packages","suite":"Spree::Stock::Prioritizer at ./spec/models/spree/stock/prioritizer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3\"}}","suiteSourceFile":"core/spec/models/spree/stock/prioritizer_spec.rb"},{"name":"1st has some, 2nd has remaining","suite":"Spree::Stock::Prioritizer at ./spec/models/spree/stock/prioritizer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4\"}}","suiteSourceFile":"core/spec/models/spree/stock/prioritizer_spec.rb"},{"name":"1st has backorder, 2nd has some","suite":"Spree::Stock::Prioritizer at ./spec/models/spree/stock/prioritizer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5\"}}","suiteSourceFile":"core/spec/models/spree/stock/prioritizer_spec.rb"},{"name":"1st has backorder, 2nd has all","suite":"Spree::Stock::Prioritizer at ./spec/models/spree/stock/prioritizer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6\"}}","suiteSourceFile":"core/spec/models/spree/stock/prioritizer_spec.rb"},{"name":"example at ./spec/models/spree/stock/quantifier_spec.rb:21","suite":"Spree::Stock::Quantifier at ./spec/models/spree/stock/quantifier_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","suiteSourceFile":"core/spec/models/spree/stock/quantifier_spec.rb"},{"name":"example at ./spec/models/spree/stock/quantifier_spec.rb:22","suite":"Spree::Stock::Quantifier at ./spec/models/spree/stock/quantifier_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2\"}}","suiteSourceFile":"core/spec/models/spree/stock/quantifier_spec.rb"},{"name":"with a single stock location/item total_on_hand should match stock_item","suite":"Spree::Stock::Quantifier at ./spec/models/spree/stock/quantifier_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/stock/quantifier_spec.rb"},{"name":"with a single stock location/item when variant is available when track_inventory_levels is false example at ./spec/models/spree/stock/quantifier_spec.rb:37","suite":"Spree::Stock::Quantifier at ./spec/models/spree/stock/quantifier_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/stock/quantifier_spec.rb"},{"name":"with a single stock location/item when variant is available when track_inventory_levels is false behaves like unlimited supply can_supply? any amount","suite":"Spree::Stock::Quantifier at ./spec/models/spree/stock/quantifier_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/stock/quantifier_spec.rb"},{"name":"with a single stock location/item when variant is available when variant inventory tracking is off example at ./spec/models/spree/stock/quantifier_spec.rb:45","suite":"Spree::Stock::Quantifier at ./spec/models/spree/stock/quantifier_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/stock/quantifier_spec.rb"},{"name":"with a single stock location/item when variant is available when variant inventory tracking is off behaves like unlimited supply can_supply? any amount","suite":"Spree::Stock::Quantifier at ./spec/models/spree/stock/quantifier_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/stock/quantifier_spec.rb"},{"name":"with a single stock location/item when variant is available when stock item allows backordering example at ./spec/models/spree/stock/quantifier_spec.rb:51","suite":"Spree::Stock::Quantifier at ./spec/models/spree/stock/quantifier_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:3:1\"}}","suiteSourceFile":"core/spec/models/spree/stock/quantifier_spec.rb"},{"name":"with a single stock location/item when variant is available when stock item allows backordering behaves like unlimited supply can_supply? any amount","suite":"Spree::Stock::Quantifier at ./spec/models/spree/stock/quantifier_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:3:2:1\"}}","suiteSourceFile":"core/spec/models/spree/stock/quantifier_spec.rb"},{"name":"with a single stock location/item when variant is available when stock item prevents backordering example at ./spec/models/spree/stock/quantifier_spec.rb:59","suite":"Spree::Stock::Quantifier at ./spec/models/spree/stock/quantifier_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:4:1\"}}","suiteSourceFile":"core/spec/models/spree/stock/quantifier_spec.rb"},{"name":"with a single stock location/item when variant is available when stock item prevents backordering can_supply? only upto total_on_hand","suite":"Spree::Stock::Quantifier at ./spec/models/spree/stock/quantifier_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:4:2\"}}","suiteSourceFile":"core/spec/models/spree/stock/quantifier_spec.rb"},{"name":"with a single stock location/item when variant is not available example at ./spec/models/spree/stock/quantifier_spec.rb:74","suite":"Spree::Stock::Quantifier at ./spec/models/spree/stock/quantifier_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3:1\"}}","suiteSourceFile":"core/spec/models/spree/stock/quantifier_spec.rb"},{"name":"with multiple stock locations/items total_on_hand should total all active stock_items","suite":"Spree::Stock::Quantifier at ./spec/models/spree/stock/quantifier_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/stock/quantifier_spec.rb"},{"name":"with multiple stock locations/items when variant is available when any stock item allows backordering example at ./spec/models/spree/stock/quantifier_spec.rb:98","suite":"Spree::Stock::Quantifier at ./spec/models/spree/stock/quantifier_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/stock/quantifier_spec.rb"},{"name":"with multiple stock locations/items when variant is available when any stock item allows backordering behaves like unlimited supply can_supply? any amount","suite":"Spree::Stock::Quantifier at ./spec/models/spree/stock/quantifier_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/stock/quantifier_spec.rb"},{"name":"with multiple stock locations/items when variant is available when all stock items prevent backordering example at ./spec/models/spree/stock/quantifier_spec.rb:106","suite":"Spree::Stock::Quantifier at ./spec/models/spree/stock/quantifier_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/stock/quantifier_spec.rb"},{"name":"with multiple stock locations/items when variant is available when all stock items prevent backordering can_supply? upto total_on_hand","suite":"Spree::Stock::Quantifier at ./spec/models/spree/stock/quantifier_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:2:2\"}}","suiteSourceFile":"core/spec/models/spree/stock/quantifier_spec.rb"},{"name":"with multiple stock locations/items when variant is not available example at ./spec/models/spree/stock/quantifier_spec.rb:121","suite":"Spree::Stock::Quantifier at ./spec/models/spree/stock/quantifier_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3:1\"}}","suiteSourceFile":"core/spec/models/spree/stock/quantifier_spec.rb"},{"name":"splits packages by status","suite":"Spree::Stock::Splitter::Backordered at ./spec/models/spree/stock/splitter/backordered_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","suiteSourceFile":"core/spec/models/spree/stock/splitter/backordered_spec.rb"},{"name":"continues to splitter chain example at ./spec/models/spree/stock/splitter/base_spec.rb:17","suite":"Spree::Stock::Splitter::Base at ./spec/models/spree/stock/splitter/base_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/stock/splitter/base_spec.rb"},{"name":"splits each package by product digital status","suite":"Spree::Stock::Splitter::Digital at ./spec/models/spree/stock/splitter/digital_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","suiteSourceFile":"core/spec/models/spree/stock/splitter/digital_spec.rb"},{"name":"splits each package by shipping category","suite":"Spree::Stock::Splitter::ShippingCategory at ./spec/models/spree/stock/splitter/shipping_category_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","suiteSourceFile":"core/spec/models/spree/stock/splitter/shipping_category_spec.rb"},{"name":"with packages that can be reduced splits and keeps splitting until all packages are underweight","suite":"Spree::Stock::Splitter::Weight at ./spec/models/spree/stock/splitter/weight_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/stock/splitter/weight_spec.rb"},{"name":"with packages that can not be reduced handles packages that can not be reduced","suite":"Spree::Stock::Splitter::Weight at ./spec/models/spree/stock/splitter/weight_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/stock/splitter/weight_spec.rb"},{"name":"with multiple packages splits and keeps splitting until all packages are underweight","suite":"Spree::Stock::Splitter::Weight at ./spec/models/spree/stock/splitter/weight_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/stock/splitter/weight_spec.rb"},{"name":"maintains the count on hand for a variant","suite":"Spree::StockItem at ./spec/models/spree/stock_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3\"}}","suiteSourceFile":"core/spec/models/spree/stock_item_spec.rb"},{"name":"can return the stock item's variant's name","suite":"Spree::StockItem at ./spec/models/spree/stock_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4\"}}","suiteSourceFile":"core/spec/models/spree/stock_item_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:4","suite":"Spree::StockItem at ./spec/models/spree/stock_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_item_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:5","suite":"Spree::StockItem at ./spec/models/spree/stock_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/stock_item_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:7","suite":"Spree::StockItem at ./spec/models/spree/stock_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/models/spree/stock_item_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:8","suite":"Spree::StockItem at ./spec/models/spree/stock_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","suiteSourceFile":"core/spec/models/spree/stock_item_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:10","suite":"Spree::StockItem at ./spec/models/spree/stock_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","suiteSourceFile":"core/spec/models/spree/stock_item_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:11","suite":"Spree::StockItem at ./spec/models/spree/stock_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","suiteSourceFile":"core/spec/models/spree/stock_item_spec.rb"},{"name":"behaves like metadata reads data as symbolized keys","suite":"Spree::StockItem at ./spec/models/spree/stock_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7\"}}","suiteSourceFile":"core/spec/models/spree/stock_item_spec.rb"},{"name":"behaves like metadata reads data as not symbolized keys","suite":"Spree::StockItem at ./spec/models/spree/stock_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8\"}}","suiteSourceFile":"core/spec/models/spree/stock_item_spec.rb"},{"name":"behaves like metadata can query records by metadata properties","suite":"Spree::StockItem at ./spec/models/spree/stock_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:10\"}}","suiteSourceFile":"core/spec/models/spree/stock_item_spec.rb"},{"name":"behaves like lifecycle events lifecycle events stock_item.created publishes created event when record is created","suite":"Spree::StockItem at ./spec/models/spree/stock_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_item_spec.rb"},{"name":"behaves like lifecycle events lifecycle events stock_item.updated publishes updated event when record is updated","suite":"Spree::StockItem at ./spec/models/spree/stock_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_item_spec.rb"},{"name":"behaves like lifecycle events lifecycle events stock_item.deleted publishes deleted event when record is deleted","suite":"Spree::StockItem at ./spec/models/spree/stock_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_item_spec.rb"},{"name":"available to be included in shipment has stock example at ./spec/models/spree/stock_item_spec.rb:21","suite":"Spree::StockItem at ./spec/models/spree/stock_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_item_spec.rb"},{"name":"available to be included in shipment backorderable example at ./spec/models/spree/stock_item_spec.rb:27","suite":"Spree::StockItem at ./spec/models/spree/stock_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_item_spec.rb"},{"name":"available to be included in shipment no stock and not backorderable example at ./spec/models/spree/stock_item_spec.rb:36","suite":"Spree::StockItem at ./spec/models/spree/stock_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_item_spec.rb"},{"name":"reduce_count_on_hand_to_zero when count_on_hand > 0 example at ./spec/models/spree/stock_item_spec.rb:47","suite":"Spree::StockItem at ./spec/models/spree/stock_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_item_spec.rb"},{"name":"reduce_count_on_hand_to_zero when count_on_hand > 0 example at ./spec/models/spree/stock_item_spec.rb:57","suite":"Spree::StockItem at ./spec/models/spree/stock_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_item_spec.rb"},{"name":"adjust count_on_hand is updated pessimistically","suite":"Spree::StockItem at ./spec/models/spree/stock_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_item_spec.rb"},{"name":"adjust count_on_hand item out of stock (by five items) when stock received is insufficient to fulfill backorders splits inventory to fulfill partial backorder","suite":"Spree::StockItem at ./spec/models/spree/stock_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_item_spec.rb"},{"name":"adjust count_on_hand item out of stock (by two items) processes existing backorders, even with negative stock","suite":"Spree::StockItem at ./spec/models/spree/stock_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:3:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_item_spec.rb"},{"name":"adjust count_on_hand item out of stock (by two items) does not process backorders when stock is adjusted negatively","suite":"Spree::StockItem at ./spec/models/spree/stock_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:3:2\"}}","suiteSourceFile":"core/spec/models/spree/stock_item_spec.rb"},{"name":"adjust count_on_hand item out of stock (by two items) adds new items fills existing backorders","suite":"Spree::StockItem at ./spec/models/spree/stock_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:3:3:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_item_spec.rb"},{"name":"set count_on_hand is updated pessimistically","suite":"Spree::StockItem at ./spec/models/spree/stock_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_item_spec.rb"},{"name":"set count_on_hand item out of stock (by two items) doesn't process backorders","suite":"Spree::StockItem at ./spec/models/spree/stock_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_item_spec.rb"},{"name":"set count_on_hand item out of stock (by two items) adds new items fills existing backorders","suite":"Spree::StockItem at ./spec/models/spree/stock_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_item_spec.rb"},{"name":"with stock movements doesnt raise ReadOnlyRecord error","suite":"Spree::StockItem at ./spec/models/spree/stock_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_item_spec.rb"},{"name":"destroyed recreates stock item just fine","suite":"Spree::StockItem at ./spec/models/spree/stock_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_item_spec.rb"},{"name":"destroyed doesnt allow recreating more than one stock item at once","suite":"Spree::StockItem at ./spec/models/spree/stock_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:2\"}}","suiteSourceFile":"core/spec/models/spree/stock_item_spec.rb"},{"name":"#after_save binary_inventory_cache is set to false (default) in_stock? changes touches its variant","suite":"Spree::StockItem at ./spec/models/spree/stock_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_item_spec.rb"},{"name":"#after_save binary_inventory_cache is set to false (default) in_stock? does not change touches its variant","suite":"Spree::StockItem at ./spec/models/spree/stock_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_item_spec.rb"},{"name":"#after_save binary_inventory_cache is set to true in_stock? changes touches its variant","suite":"Spree::StockItem at ./spec/models/spree/stock_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_item_spec.rb"},{"name":"#after_save binary_inventory_cache is set to true in_stock? does not change does not touch its variant","suite":"Spree::StockItem at ./spec/models/spree/stock_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_item_spec.rb"},{"name":"#after_save binary_inventory_cache is set to true when a new stock location is added touches its variant","suite":"Spree::StockItem at ./spec/models/spree/stock_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2:3:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_item_spec.rb"},{"name":"#after_touch touches its variant","suite":"Spree::StockItem at ./spec/models/spree/stock_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_item_spec.rb"},{"name":"variant can be found even if the variant is deleted","suite":"Spree::StockItem at ./spec/models/spree/stock_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_item_spec.rb"},{"name":"validations count_on_hand when count_on_hand not changed when not backorderable behaves like valid count_on_hand has :no errors_on","suite":"Spree::StockItem at ./spec/models/spree/stock_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:1:1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_item_spec.rb"},{"name":"validations count_on_hand when count_on_hand not changed when backorderable behaves like valid count_on_hand has :no errors_on","suite":"Spree::StockItem at ./spec/models/spree/stock_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:1:1:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_item_spec.rb"},{"name":"validations count_on_hand when count_on_hand changed when backorderable when both count_on_hand and count_on_hand_was are positive when count_on_hand is greater than count_on_hand_was behaves like valid count_on_hand has :no errors_on","suite":"Spree::StockItem at ./spec/models/spree/stock_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:1:2:1:1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_item_spec.rb"},{"name":"validations count_on_hand when count_on_hand changed when backorderable when both count_on_hand and count_on_hand_was are positive when count_on_hand is smaller than count_on_hand_was behaves like valid count_on_hand has :no errors_on","suite":"Spree::StockItem at ./spec/models/spree/stock_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:1:2:1:1:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_item_spec.rb"},{"name":"validations count_on_hand when count_on_hand changed when backorderable when both count_on_hand and count_on_hand_was are negative when count_on_hand is greater than count_on_hand_was behaves like valid count_on_hand has :no errors_on","suite":"Spree::StockItem at ./spec/models/spree/stock_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:1:2:1:2:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_item_spec.rb"},{"name":"validations count_on_hand when count_on_hand changed when backorderable when both count_on_hand and count_on_hand_was are negative when count_on_hand is smaller than count_on_hand_was behaves like valid count_on_hand has :no errors_on","suite":"Spree::StockItem at ./spec/models/spree/stock_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:1:2:1:2:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_item_spec.rb"},{"name":"validations count_on_hand when count_on_hand changed when backorderable when both count_on_hand is positive and count_on_hand_was is negative when count_on_hand is greater than count_on_hand_was behaves like valid count_on_hand has :no errors_on","suite":"Spree::StockItem at ./spec/models/spree/stock_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:1:2:1:3:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_item_spec.rb"},{"name":"validations count_on_hand when count_on_hand changed when backorderable when both count_on_hand is negative and count_on_hand_was is positive when count_on_hand is greater than count_on_hand_was behaves like valid count_on_hand has :no errors_on","suite":"Spree::StockItem at ./spec/models/spree/stock_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:1:2:1:4:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_item_spec.rb"},{"name":"validations count_on_hand when count_on_hand changed when not backorderable when both count_on_hand and count_on_hand_was are positive when count_on_hand is greater than count_on_hand_was behaves like valid count_on_hand has :no errors_on","suite":"Spree::StockItem at ./spec/models/spree/stock_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:1:2:2:1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_item_spec.rb"},{"name":"validations count_on_hand when count_on_hand changed when not backorderable when both count_on_hand and count_on_hand_was are positive when count_on_hand is smaller than count_on_hand_was behaves like valid count_on_hand has :no errors_on","suite":"Spree::StockItem at ./spec/models/spree/stock_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:1:2:2:1:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_item_spec.rb"},{"name":"validations count_on_hand when count_on_hand changed when not backorderable when both count_on_hand and count_on_hand_was are negative when count_on_hand is greater than count_on_hand_was behaves like valid count_on_hand has :no errors_on","suite":"Spree::StockItem at ./spec/models/spree/stock_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:1:2:2:2:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_item_spec.rb"},{"name":"validations count_on_hand when count_on_hand changed when not backorderable when both count_on_hand and count_on_hand_was are negative when count_on_hand is smaller than count_on_hand_was behaves like not valid count_on_hand has 1 error on count_on_hand","suite":"Spree::StockItem at ./spec/models/spree/stock_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:1:2:2:2:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_item_spec.rb"},{"name":"validations count_on_hand when count_on_hand changed when not backorderable when both count_on_hand and count_on_hand_was are negative when count_on_hand is smaller than count_on_hand_was behaves like not valid count_on_hand example at ./spec/models/spree/stock_item_spec.rb:302","suite":"Spree::StockItem at ./spec/models/spree/stock_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:1:2:2:2:2:1:2\"}}","suiteSourceFile":"core/spec/models/spree/stock_item_spec.rb"},{"name":"validations count_on_hand when count_on_hand changed when not backorderable when both count_on_hand is positive and count_on_hand_was is negative when count_on_hand is greater than count_on_hand_was behaves like valid count_on_hand has :no errors_on","suite":"Spree::StockItem at ./spec/models/spree/stock_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:1:2:2:3:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_item_spec.rb"},{"name":"validations count_on_hand when count_on_hand changed when not backorderable when both count_on_hand is negative and count_on_hand_was is positive when count_on_hand is greater than count_on_hand_was behaves like not valid count_on_hand has 1 error on count_on_hand","suite":"Spree::StockItem at ./spec/models/spree/stock_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:1:2:2:4:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_item_spec.rb"},{"name":"validations count_on_hand when count_on_hand changed when not backorderable when both count_on_hand is negative and count_on_hand_was is positive when count_on_hand is greater than count_on_hand_was behaves like not valid count_on_hand example at ./spec/models/spree/stock_item_spec.rb:302","suite":"Spree::StockItem at ./spec/models/spree/stock_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:1:2:2:4:1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/stock_item_spec.rb"},{"name":"scopes .with_active_stock_location when stock location is active example at ./spec/models/spree/stock_item_spec.rb:470","suite":"Spree::StockItem at ./spec/models/spree/stock_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_item_spec.rb"},{"name":"scopes .with_active_stock_location when stock location is inactive example at ./spec/models/spree/stock_item_spec.rb:476","suite":"Spree::StockItem at ./spec/models/spree/stock_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_item_spec.rb"},{"name":"validates uniqueness","suite":"Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2\"}}","suiteSourceFile":"core/spec/models/spree/stock_location_spec.rb"},{"name":"finds a stock_item for a variant","suite":"Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4\"}}","suiteSourceFile":"core/spec/models/spree/stock_location_spec.rb"},{"name":"finds a stock_item for a variant by id","suite":"Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5\"}}","suiteSourceFile":"core/spec/models/spree/stock_location_spec.rb"},{"name":"returns nil when stock_item is not found for variant","suite":"Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6\"}}","suiteSourceFile":"core/spec/models/spree/stock_location_spec.rb"},{"name":"finds a count_on_hand for a variant","suite":"Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8\"}}","suiteSourceFile":"core/spec/models/spree/stock_location_spec.rb"},{"name":"finds determines if you a variant is backorderable","suite":"Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9\"}}","suiteSourceFile":"core/spec/models/spree/stock_location_spec.rb"},{"name":"restocks a variant with a positive stock movement","suite":"Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10\"}}","suiteSourceFile":"core/spec/models/spree/stock_location_spec.rb"},{"name":"unstocks a variant with a negative stock movement","suite":"Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11\"}}","suiteSourceFile":"core/spec/models/spree/stock_location_spec.rb"},{"name":"creates a stock_movement","suite":"Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12\"}}","suiteSourceFile":"core/spec/models/spree/stock_location_spec.rb"},{"name":"can be deactivated","suite":"Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13\"}}","suiteSourceFile":"core/spec/models/spree/stock_location_spec.rb"},{"name":"ensures only one stock location is default at a time","suite":"Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14\"}}","suiteSourceFile":"core/spec/models/spree/stock_location_spec.rb"},{"name":"handling the stock items creation after create creates stock_items for all variants","suite":"Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_location_spec.rb"},{"name":"handling stock items given a variant set up creates stock item","suite":"Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_location_spec.rb"},{"name":"handling stock items given a variant set up stock item exists returns existing stock item","suite":"Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_location_spec.rb"},{"name":"handling stock items given a variant propagate variants creates a new stock item","suite":"Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_location_spec.rb"},{"name":"handling stock items given a variant propagate variants passes backorderable default config true example at ./spec/models/spree/stock_location_spec.rb:70","suite":"Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:2:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_location_spec.rb"},{"name":"handling stock items given a variant propagate variants passes backorderable default config false example at ./spec/models/spree/stock_location_spec.rb:76","suite":"Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:2:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_location_spec.rb"},{"name":"handling stock items given a variant propagate all variants true example at ./spec/models/spree/stock_location_spec.rb:87","suite":"Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:3:1:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_location_spec.rb"},{"name":"handling stock items given a variant propagate all variants false example at ./spec/models/spree/stock_location_spec.rb:99","suite":"Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:3:2:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_location_spec.rb"},{"name":"#stock_item_or_create without stock item variant instance passed creates a stock_item if not found for a variant","suite":"Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_location_spec.rb"},{"name":"#stock_item_or_create without stock item variant instance passed example at ./spec/models/spree/stock_location_spec.rb:136","suite":"Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/stock_location_spec.rb"},{"name":"#stock_item_or_create without stock item variant ID passed creates a stock_item if not found for a variant","suite":"Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_location_spec.rb"},{"name":"#stock_item_or_create without stock item variant ID passed example at ./spec/models/spree/stock_location_spec.rb:145","suite":"Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1:2:2\"}}","suiteSourceFile":"core/spec/models/spree/stock_location_spec.rb"},{"name":"#stock_item_or_create with stock item variant instance passed example at ./spec/models/spree/stock_location_spec.rb:154","suite":"Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_location_spec.rb"},{"name":"#stock_item_or_create with stock item variant instance passed example at ./spec/models/spree/stock_location_spec.rb:155","suite":"Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2:1:2\"}}","suiteSourceFile":"core/spec/models/spree/stock_location_spec.rb"},{"name":"#stock_item_or_create with stock item variant ID passed example at ./spec/models/spree/stock_location_spec.rb:159","suite":"Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_location_spec.rb"},{"name":"#stock_item_or_create with stock item variant ID passed example at ./spec/models/spree/stock_location_spec.rb:160","suite":"Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2:2:2\"}}","suiteSourceFile":"core/spec/models/spree/stock_location_spec.rb"},{"name":"fill_status all on_hand with no backordered","suite":"Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_location_spec.rb"},{"name":"fill_status some on_hand with some backordered","suite":"Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:2\"}}","suiteSourceFile":"core/spec/models/spree/stock_location_spec.rb"},{"name":"fill_status zero on_hand with all backordered","suite":"Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:3\"}}","suiteSourceFile":"core/spec/models/spree/stock_location_spec.rb"},{"name":"fill_status when backordering is not allowed all on_hand","suite":"Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:4:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_location_spec.rb"},{"name":"fill_status when backordering is not allowed some on_hand","suite":"Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:4:2\"}}","suiteSourceFile":"core/spec/models/spree/stock_location_spec.rb"},{"name":"fill_status when backordering is not allowed zero on_hand","suite":"Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:4:3\"}}","suiteSourceFile":"core/spec/models/spree/stock_location_spec.rb"},{"name":"fill_status without stock_items zero on_hand and one backordered","suite":"Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:5:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_location_spec.rb"},{"name":"#state_text state is blank example at ./spec/models/spree/stock_location_spec.rb:286","suite":"Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:1:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_location_spec.rb"},{"name":"#state_text both name and abbr is present example at ./spec/models/spree/stock_location_spec.rb:294","suite":"Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:2:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_location_spec.rb"},{"name":"#state_text only name is present example at ./spec/models/spree/stock_location_spec.rb:302","suite":"Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:3:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_location_spec.rb"},{"name":"#conditionally_touch_records active has changed example at ./spec/models/spree/stock_location_spec.rb:311","suite":"Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:17:1:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_location_spec.rb"},{"name":"#conditionally_touch_records active has changed example at ./spec/models/spree/stock_location_spec.rb:312","suite":"Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:17:1:2\"}}","suiteSourceFile":"core/spec/models/spree/stock_location_spec.rb"},{"name":"#conditionally_touch_records active has not changed example at ./spec/models/spree/stock_location_spec.rb:316","suite":"Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:17:2:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_location_spec.rb"},{"name":"#address returns Spree::Address instance","suite":"Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_location_spec.rb"},{"name":"#display_name returns the name","suite":"Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_location_spec.rb"},{"name":"#display_name with admin name set returns the admin name","suite":"Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:2:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_location_spec.rb"},{"name":"#country_name returns the country name","suite":"Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:20:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_location_spec.rb"},{"name":"product.out_of_stock event publishes product.out_of_stock when product goes out of stock","suite":"Spree::StockMovement::CustomEvents at ./spec/models/spree/stock_movement/custom_events_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_movement/custom_events_spec.rb"},{"name":"product.out_of_stock event does not publish when product still has stock","suite":"Spree::StockMovement::CustomEvents at ./spec/models/spree/stock_movement/custom_events_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/stock_movement/custom_events_spec.rb"},{"name":"product.out_of_stock event does not publish when product was already out of stock","suite":"Spree::StockMovement::CustomEvents at ./spec/models/spree/stock_movement/custom_events_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/models/spree/stock_movement/custom_events_spec.rb"},{"name":"product.back_in_stock event publishes product.back_in_stock when product comes back in stock","suite":"Spree::StockMovement::CustomEvents at ./spec/models/spree/stock_movement/custom_events_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_movement/custom_events_spec.rb"},{"name":"product.back_in_stock event does not publish when product was already in stock","suite":"Spree::StockMovement::CustomEvents at ./spec/models/spree/stock_movement/custom_events_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","suiteSourceFile":"core/spec/models/spree/stock_movement/custom_events_spec.rb"},{"name":"when events are disabled does not publish any events","suite":"Spree::StockMovement::CustomEvents at ./spec/models/spree/stock_movement/custom_events_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_movement/custom_events_spec.rb"},{"name":"lifecycle events stock_movement.created publishes created event when record is created","suite":"Spree::StockMovement at ./spec/models/spree/stock_movement_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_movement_spec.rb"},{"name":"Constants QUANTITY_LIMITS[:max] return 2**31 - 1","suite":"Spree::StockMovement at ./spec/models/spree/stock_movement_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_movement_spec.rb"},{"name":"Constants QUANTITY_LIMITS[:min] return -2**31","suite":"Spree::StockMovement at ./spec/models/spree/stock_movement_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_movement_spec.rb"},{"name":"validations does not allow quantity that is less than the stock item's count on hand","suite":"Spree::StockMovement at ./spec/models/spree/stock_movement_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_movement_spec.rb"},{"name":"validations allows the negative quantity for a backorderable stock item","suite":"Spree::StockMovement at ./spec/models/spree/stock_movement_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","suiteSourceFile":"core/spec/models/spree/stock_movement_spec.rb"},{"name":"Scope .recent orders chronologically by created at","suite":"Spree::StockMovement at ./spec/models/spree/stock_movement_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_movement_spec.rb"},{"name":"whitelisted ransackable attributes returns amount attribute","suite":"Spree::StockMovement at ./spec/models/spree/stock_movement_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_movement_spec.rb"},{"name":"Instance Methods .product example at ./spec/models/spree/stock_movement_spec.rb:69","suite":"Spree::StockMovement at ./spec/models/spree/stock_movement_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_movement_spec.rb"},{"name":"Instance Methods .variant example at ./spec/models/spree/stock_movement_spec.rb:73","suite":"Spree::StockMovement at ./spec/models/spree/stock_movement_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_movement_spec.rb"},{"name":"Instance Methods #readonly? does not update a persisted record","suite":"Spree::StockMovement at ./spec/models/spree/stock_movement_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:3:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_movement_spec.rb"},{"name":"Instance Methods #update_stock_item_quantity when track inventory levels is false does not update count on hand","suite":"Spree::StockMovement at ./spec/models/spree/stock_movement_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:4:1:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_movement_spec.rb"},{"name":"Instance Methods #update_stock_item_quantity when track inventory tracking is off does not update count on hand","suite":"Spree::StockMovement at ./spec/models/spree/stock_movement_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:4:2:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_movement_spec.rb"},{"name":"Instance Methods #update_stock_item_quantity when quantity is negative decrements the stock item count on hand","suite":"Spree::StockMovement at ./spec/models/spree/stock_movement_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:4:3:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_movement_spec.rb"},{"name":"Instance Methods #update_stock_item_quantity when quantity is positive increments the stock item count on hand","suite":"Spree::StockMovement at ./spec/models/spree/stock_movement_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:4:4:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_movement_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:4","suite":"Spree::StockTransfer at ./spec/models/spree/stock_transfer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_transfer_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:5","suite":"Spree::StockTransfer at ./spec/models/spree/stock_transfer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/stock_transfer_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:7","suite":"Spree::StockTransfer at ./spec/models/spree/stock_transfer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/models/spree/stock_transfer_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:8","suite":"Spree::StockTransfer at ./spec/models/spree/stock_transfer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","suiteSourceFile":"core/spec/models/spree/stock_transfer_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:10","suite":"Spree::StockTransfer at ./spec/models/spree/stock_transfer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","suiteSourceFile":"core/spec/models/spree/stock_transfer_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:11","suite":"Spree::StockTransfer at ./spec/models/spree/stock_transfer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","suiteSourceFile":"core/spec/models/spree/stock_transfer_spec.rb"},{"name":"behaves like metadata reads data as symbolized keys","suite":"Spree::StockTransfer at ./spec/models/spree/stock_transfer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7\"}}","suiteSourceFile":"core/spec/models/spree/stock_transfer_spec.rb"},{"name":"behaves like metadata reads data as not symbolized keys","suite":"Spree::StockTransfer at ./spec/models/spree/stock_transfer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8\"}}","suiteSourceFile":"core/spec/models/spree/stock_transfer_spec.rb"},{"name":"behaves like metadata can query records by metadata properties","suite":"Spree::StockTransfer at ./spec/models/spree/stock_transfer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:10\"}}","suiteSourceFile":"core/spec/models/spree/stock_transfer_spec.rb"},{"name":"behaves like lifecycle events lifecycle events stock_transfer.created publishes created event when record is created","suite":"Spree::StockTransfer at ./spec/models/spree/stock_transfer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_transfer_spec.rb"},{"name":"behaves like lifecycle events lifecycle events stock_transfer.updated publishes updated event when record is updated","suite":"Spree::StockTransfer at ./spec/models/spree/stock_transfer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_transfer_spec.rb"},{"name":"behaves like lifecycle events lifecycle events stock_transfer.deleted publishes deleted event when record is deleted","suite":"Spree::StockTransfer at ./spec/models/spree/stock_transfer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_transfer_spec.rb"},{"name":"#reference example at ./spec/models/spree/stock_transfer_spec.rb:25","suite":"Spree::StockTransfer at ./spec/models/spree/stock_transfer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_transfer_spec.rb"},{"name":"#to_param example at ./spec/models/spree/stock_transfer_spec.rb:31","suite":"Spree::StockTransfer at ./spec/models/spree/stock_transfer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_transfer_spec.rb"},{"name":"#transfer transfers variants between 2 locations","suite":"Spree::StockTransfer at ./spec/models/spree/stock_transfer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_transfer_spec.rb"},{"name":"#transfer when variants are not available in the source location does not transfer the variants","suite":"Spree::StockTransfer at ./spec/models/spree/stock_transfer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_transfer_spec.rb"},{"name":"#transfer when variants are empty does not transfer the variants","suite":"Spree::StockTransfer at ./spec/models/spree/stock_transfer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_transfer_spec.rb"},{"name":"#transfer when variants are nil does not transfer the variants","suite":"Spree::StockTransfer at ./spec/models/spree/stock_transfer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:4:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_transfer_spec.rb"},{"name":"#receive receives new inventory (from a vendor)","suite":"Spree::StockTransfer at ./spec/models/spree/stock_transfer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_transfer_spec.rb"},{"name":"#validations checks if source location and destination location are the same","suite":"Spree::StockTransfer at ./spec/models/spree/stock_transfer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_transfer_spec.rb"},{"name":"callbacks store credit category is not used in store credit can delete store credit category","suite":"StoreCreditCategory at ./spec/models/spree/store_credit_category_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_category_spec.rb"},{"name":"callbacks store credit category is used in store credit can not delete store credit category","suite":"StoreCreditCategory at ./spec/models/spree/store_credit_category_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_category_spec.rb"},{"name":"#display_amount returns a Spree::Money instance","suite":"StoreCreditEvent at ./spec/models/spree/store_credit_event_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_event_spec.rb"},{"name":"#display_amount uses the events amount attribute","suite":"StoreCreditEvent at ./spec/models/spree/store_credit_event_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_event_spec.rb"},{"name":"#display_user_total_amount returns a Spree::Money instance","suite":"StoreCreditEvent at ./spec/models/spree/store_credit_event_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_event_spec.rb"},{"name":"#display_user_total_amount uses the events user_total_amount attribute","suite":"StoreCreditEvent at ./spec/models/spree/store_credit_event_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_event_spec.rb"},{"name":"#display_action capture event returns used","suite":"StoreCreditEvent at ./spec/models/spree/store_credit_event_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_event_spec.rb"},{"name":"#display_action authorize event returns authorized","suite":"StoreCreditEvent at ./spec/models/spree/store_credit_event_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_event_spec.rb"},{"name":"#display_action allocation event returns added","suite":"StoreCreditEvent at ./spec/models/spree/store_credit_event_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_event_spec.rb"},{"name":"#display_action void event returns credit","suite":"StoreCreditEvent at ./spec/models/spree/store_credit_event_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_event_spec.rb"},{"name":"#display_action credit event returns credit","suite":"StoreCreditEvent at ./spec/models/spree/store_credit_event_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:5:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_event_spec.rb"},{"name":"#order there is no associated payment with the event returns nil","suite":"StoreCreditEvent at ./spec/models/spree/store_credit_event_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_event_spec.rb"},{"name":"#order there is an associated payment with the event returns the order associated with the payment","suite":"StoreCreditEvent at ./spec/models/spree/store_credit_event_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_event_spec.rb"},{"name":"#store example at ./spec/models/spree/store_credit_event_spec.rb:112","suite":"StoreCreditEvent at ./spec/models/spree/store_credit_event_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_event_spec.rb"},{"name":"#allocation? action is allocation example at ./spec/models/spree/store_credit_event_spec.rb:122","suite":"StoreCreditEvent at ./spec/models/spree/store_credit_event_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_event_spec.rb"},{"name":"#allocation? action is not allocation example at ./spec/models/spree/store_credit_event_spec.rb:127","suite":"StoreCreditEvent at ./spec/models/spree/store_credit_event_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_event_spec.rb"},{"name":"#credit? action is credit example at ./spec/models/spree/store_credit_event_spec.rb:138","suite":"StoreCreditEvent at ./spec/models/spree/store_credit_event_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_event_spec.rb"},{"name":"#credit? action is not credit example at ./spec/models/spree/store_credit_event_spec.rb:143","suite":"StoreCreditEvent at ./spec/models/spree/store_credit_event_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_event_spec.rb"},{"name":"#captured? action is capture example at ./spec/models/spree/store_credit_event_spec.rb:154","suite":"StoreCreditEvent at ./spec/models/spree/store_credit_event_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_event_spec.rb"},{"name":"#captured? action is not capture example at ./spec/models/spree/store_credit_event_spec.rb:159","suite":"StoreCreditEvent at ./spec/models/spree/store_credit_event_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_event_spec.rb"},{"name":"#voided? action is void example at ./spec/models/spree/store_credit_event_spec.rb:170","suite":"StoreCreditEvent at ./spec/models/spree/store_credit_event_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_event_spec.rb"},{"name":"#voided? action is not void example at ./spec/models/spree/store_credit_event_spec.rb:175","suite":"StoreCreditEvent at ./spec/models/spree/store_credit_event_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:2:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_event_spec.rb"},{"name":"#authorized? action is authorize example at ./spec/models/spree/store_credit_event_spec.rb:186","suite":"StoreCreditEvent at ./spec/models/spree/store_credit_event_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_event_spec.rb"},{"name":"#authorized? action is not authorize example at ./spec/models/spree/store_credit_event_spec.rb:191","suite":"StoreCreditEvent at ./spec/models/spree/store_credit_event_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:2:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_event_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:4","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:5","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:7","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:8","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:10","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:11","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"behaves like metadata reads data as symbolized keys","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"behaves like metadata reads data as not symbolized keys","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"behaves like metadata can query records by metadata properties","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:10\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"behaves like lifecycle events lifecycle events store_credit.created publishes created event when record is created","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"behaves like lifecycle events lifecycle events store_credit.updated publishes updated event when record is updated","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"behaves like lifecycle events lifecycle events store_credit.deleted publishes deleted event when record is deleted","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"callbacks amount used is greater than zero can not delete the store credit","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"validations used amount should not be greater than the credited amount the used amount is defined is not valid","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"validations used amount should not be greater than the credited amount the used amount is defined sets the correct error message","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"validations used amount should not be greater than the credited amount the used amount is not defined yet is valid","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"validations amount used less than or equal to amount is not valid","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"validations amount used less than or equal to amount adds an error message about the invalid amount used","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:2\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"validations amount authorized less than or equal to amount is not valid","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"validations amount authorized less than or equal to amount adds an error message about the invalid authorized amount","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3:2\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"#display_amount returns a Spree::Money instance","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"#display_amount_used returns a Spree::Money instance","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"#amount_remaining the amount_used is not defined the authorized amount is not defined returns the credited amount","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"#amount_remaining the amount_used is not defined the authorized amount is defined subtracts the authorized amount from the credited amount","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"#amount_remaining the amount_used is defined the authorized amount is not defined subtracts the amount used from the credited amount","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"#amount_remaining the amount_used is defined the authorized amount is defined subtracts the amount used and the authorized amount from the credited amount","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"#authorize amount is valid amount has not been authorized yet returns true","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"#authorize amount is valid amount has not been authorized yet adds the new amount to authorized amount","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"#authorize amount is valid amount has not been authorized yet originator is present records the originator","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"#authorize amount is valid authorization has already happened returns true","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"#authorize amount is invalid returns false","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"#validate_authorization insufficient funds returns false","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"#validate_authorization insufficient funds adds an error to the model","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1:2\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"#validate_authorization currency mismatch returns false","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:2:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"#validate_authorization currency mismatch adds an error to the model","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:2:2\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"#validate_authorization valid authorization returns true","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:3:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"#validate_authorization troublesome floats returns true","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:4:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"#capture insufficient funds returns false","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"#capture insufficient funds adds an error to the model","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1:2\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"#capture insufficient funds does not update the store credit model","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1:3\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"#capture currency mismatch returns false","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:2:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"#capture currency mismatch adds an error to the model","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:2:2\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"#capture currency mismatch does not update the store credit model","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:2:3\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"#capture valid capture returns true","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:3:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"#capture valid capture updates the authorized amount to the difference between the captured amount and the authorized amount","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:3:2\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"#capture valid capture updates the used amount to the current used amount plus the captured amount","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:3:3\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"#capture valid capture originator is present records the originator","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:3:4:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"#void no event found for auth_code returns false","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"#void no event found for auth_code adds an error to the model","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1:2\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"#void capture event found for auth_code returns false","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"#void capture event found for auth_code does not change the amount used on the store credit","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2:2\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"#void auth event found for auth_code returns true","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:3:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"#void auth event found for auth_code returns the capture amount to the store credit","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:3:2\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"#void auth event found for auth_code originator is present records the originator","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:3:3:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"#credit currency does not match returns false","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:1:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"#credit currency does not match adds an error message about the currency mismatch","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:1:2\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"#credit unable to find capture event returns false","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:2:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"#credit unable to find capture event adds an error message about the currency mismatch","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:2:2\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"#credit amount is more than what is captured returns false","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:3:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"#credit amount is more than what is captured adds an error message about the currency mismatch","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:3:2\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"#credit amount is successfully credited credit_to_new_allocation is set returns true","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:4:1:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"#credit amount is successfully credited credit_to_new_allocation is set creates a new store credit record","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:4:1:2\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"#credit amount is successfully credited credit_to_new_allocation is set does not create a new store credit event on the parent store credit","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:4:1:3\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"#credit amount is successfully credited credit_to_new_allocation is set credits the passed amount to a new store credit record does not set the amount used on the originating store credit","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:4:1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"#credit amount is successfully credited credit_to_new_allocation is set credits the passed amount to a new store credit record sets the correct amount on the new store credit","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:4:1:4:2\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"#credit amount is successfully credited credit_to_new_allocation is set credits the passed amount to a new store credit record sets attribute user_id inherited from the originating store credit","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:4:1:4:3\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"#credit amount is successfully credited credit_to_new_allocation is set credits the passed amount to a new store credit record sets attribute category_id inherited from the originating store credit","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:4:1:4:4\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"#credit amount is successfully credited credit_to_new_allocation is set credits the passed amount to a new store credit record sets attribute created_by_id inherited from the originating store credit","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:4:1:4:5\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"#credit amount is successfully credited credit_to_new_allocation is set credits the passed amount to a new store credit record sets attribute currency inherited from the originating store credit","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:4:1:4:6\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"#credit amount is successfully credited credit_to_new_allocation is set credits the passed amount to a new store credit record sets attribute type_id inherited from the originating store credit","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:4:1:4:7\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"#credit amount is successfully credited credit_to_new_allocation is set credits the passed amount to a new store credit record sets a memo","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:4:1:4:8\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"#credit amount is successfully credited credit_to_new_allocation is set originator is present records the originator","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:4:1:5:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"#credit amount is successfully credited credit_to_new_allocation is not set returns true","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:4:2:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"#credit amount is successfully credited credit_to_new_allocation is not set credits the passed amount to the store credit amount used","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:4:2:2\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"#credit amount is successfully credited credit_to_new_allocation is not set creates a new store credit event","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:4:2:3\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"#amount_used amount used is not defined returns zero","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:1:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"#amount_used amount used is defined returns the attribute value","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:2:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"#amount_authorized amount authorized is not defined returns zero","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:1:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"#amount_authorized amount authorized is defined returns the attribute value","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:2:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"#can_capture? pending payment returns true","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:1:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"#can_capture? checkout payment returns true","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:2:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"#can_capture? void payment returns false","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:3:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"#can_capture? invalid payment returns false","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:4:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"#can_capture? complete payment returns false","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:5:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"#can_void? pending payment returns true","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:1:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"#can_void? remove store credits when payment is in checkout and order is not completed example at ./spec/models/spree/store_credit_spec.rb:633","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"#can_void? remove store credits when order is completed example at ./spec/models/spree/store_credit_spec.rb:639","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"#can_void? remove store credits when payment is completed example at ./spec/models/spree/store_credit_spec.rb:645","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:2:3:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"#can_void? void payment returns false","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:3:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"#can_void? invalid payment returns false","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:4:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"#can_void? complete payment returns false","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:5:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"#can_credit? payment is not completed returns false","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:17:1:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"#can_credit? payment is completed credit is owed on the order payment doesn't have allowed credit returns false","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:17:2:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"#can_credit? payment is completed credit is owed on the order payment has allowed credit returns true","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:17:2:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"#can_credit? #store_events create user has one store credit creates a store credit event","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:17:3:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"#can_credit? #store_events create user has one store credit makes the store credit event an allocation event","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:17:3:1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"#can_credit? #store_events create user has one store credit saves the user's total store credit in the event","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:17:3:1:1:3\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"#can_credit? #store_events create user has multiple store credits saves the user's total store credit in the event","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:17:3:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"#can_credit? #store_events create an action is specified creates an event with the set action","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:17:3:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"validations validates image properties","suite":"Spree::StoreFaviconImage at ./spec/models/spree/store_favicon_image_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/store_favicon_image_spec.rb"},{"name":"validations file size when size is 1 megabyte is valid","suite":"Spree::StoreFaviconImage at ./spec/models/spree/store_favicon_image_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/store_favicon_image_spec.rb"},{"name":"validations file size when size is over 1 megabyte is invalid","suite":"Spree::StoreFaviconImage at ./spec/models/spree/store_favicon_image_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/store_favicon_image_spec.rb"},{"name":"#refresh_metrics! when there are no completed orders sets statistics to zero","suite":"Spree::StoreProduct at ./spec/models/spree/store_product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/store_product_spec.rb"},{"name":"#refresh_metrics! when there are completed orders calculates units_sold_count from line item quantities","suite":"Spree::StoreProduct at ./spec/models/spree/store_product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/store_product_spec.rb"},{"name":"#refresh_metrics! when there are completed orders calculates revenue from line item pre_tax_amount","suite":"Spree::StoreProduct at ./spec/models/spree/store_product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2\"}}","suiteSourceFile":"core/spec/models/spree/store_product_spec.rb"},{"name":"#refresh_metrics! when orders are from different stores only counts statistics from the specific store","suite":"Spree::StoreProduct at ./spec/models/spree/store_product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/store_product_spec.rb"},{"name":"#refresh_metrics! when orders have multiple line items with different quantities sums quantities for units_sold_count","suite":"Spree::StoreProduct at ./spec/models/spree/store_product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/store_product_spec.rb"},{"name":"#refresh_metrics! when orders have multiple line items with different quantities uses pre_tax_amount for revenue","suite":"Spree::StoreProduct at ./spec/models/spree/store_product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:2\"}}","suiteSourceFile":"core/spec/models/spree/store_product_spec.rb"},{"name":"#refresh_metrics! when product has variants includes orders with product variants in statistics","suite":"Spree::StoreProduct at ./spec/models/spree/store_product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5:1\"}}","suiteSourceFile":"core/spec/models/spree/store_product_spec.rb"},{"name":"#refresh_metrics! when there are multiple line items across orders sums all quantities across orders","suite":"Spree::StoreProduct at ./spec/models/spree/store_product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6:1\"}}","suiteSourceFile":"core/spec/models/spree/store_product_spec.rb"},{"name":"#refresh_metrics! when there are multiple line items across orders sums all pre_tax_amounts across orders","suite":"Spree::StoreProduct at ./spec/models/spree/store_product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6:2\"}}","suiteSourceFile":"core/spec/models/spree/store_product_spec.rb"},{"name":"Associations #products example at ./spec/models/spree/store_spec.rb:19","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":"Associations #products #product_properties example at ./spec/models/spree/store_spec.rb:25","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":"Associations #products #variants example at ./spec/models/spree/store_spec.rb:32","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":"Associations #products #variants #stock_items example at ./spec/models/spree/store_spec.rb:38","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:2:1\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":"Associations #products #variants #stock_items example at ./spec/models/spree/store_spec.rb:39","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:2:2\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":"Associations #products #variants #stock_items example at ./spec/models/spree/store_spec.rb:40","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:2:3\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":"Associations #payment_methods example at ./spec/models/spree/store_spec.rb:49","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":"Associations #orders example at ./spec/models/spree/store_spec.rb:56","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":"Associations #orders #line_items example at ./spec/models/spree/store_spec.rb:62","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:2:1\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":"Associations #orders #payments example at ./spec/models/spree/store_spec.rb:69","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:3:1\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":"Associations #orders #shipments example at ./spec/models/spree/store_spec.rb:76","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:4:1\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":"Associations #orders #return_authorizations example at ./spec/models/spree/store_spec.rb:85","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:5:1\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":"Associations #orders #inventory_units example at ./spec/models/spree/store_spec.rb:94","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:6:1\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":"Associations #store_credits example at ./spec/models/spree/store_spec.rb:102","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":"Associations #store_credits #store_credit_events example at ./spec/models/spree/store_spec.rb:108","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:2:1\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":"Associations #store_credits #store_credit_events example at ./spec/models/spree/store_spec.rb:109","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:2:2\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":"Associations #store_credits #store_credit_events example at ./spec/models/spree/store_spec.rb:110","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:2:3\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":"Associations #promotions example at ./spec/models/spree/store_spec.rb:118","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5:1\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":"Callbacks #set_code sets the code","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":"Callbacks #set_code when code is already set does not change the code","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":"Callbacks #set_code when name is not set does not set the code","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":"Callbacks #set_code when code is already taken generates a new code","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":"Callbacks #set_code #create_default_policies creates default policies","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:5:1\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":"Callbacks #set_code #create_default_policies is idempotent - does not create duplicates when called multiple times","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:5:2\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":"Callbacks #set_code #create_default_policies with non-English store locale creates policies with translated names in store locale","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:5:3:1\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":"Callbacks #set_url on create sets url","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":"Callbacks #set_url on update code change update url updates url but keep old one","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":"Callbacks #ensure_default_taxonomies_are_created creates default taxonomies","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:1\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":"Callbacks #ensure_default_taxonomies_are_created is idempotent - does not create duplicates when called multiple times","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:2\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":"Callbacks #ensure_default_taxonomies_are_created with non-English store locale creates taxonomies with translated names in store locale","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:3:1\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":"Callbacks #ensure_default_taxonomies_are_created with non-English store locale falls back to English when translation is missing","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:3:2\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":"Callbacks #ensure_default_automatic_taxons creates automatic taxons on the collections taxonomy","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:4:1\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":"Callbacks #ensure_default_automatic_taxons is idempotent - does not create duplicates when called multiple times","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:4:2\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":"Callbacks #ensure_default_post_categories_are_created creates default post categories","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:5:1\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":"Callbacks #ensure_default_post_categories_are_created is idempotent - does not create duplicates when called multiple times","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:5:2\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":"Callbacks #import_products_from_store imports products from other store","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:6:1\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":"Callbacks #import_payment_methods_from_store imports payment methods from other store","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:7:1\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":"Validations #code cannot create 2 stores with the same code","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":"Validations #code cannot create a store with reserved code","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:2\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":"Translations translates store fields","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":".by_url finds stores by url","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":".current returns default when no domain","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":".current returns store for domain","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":".default when a default store is already present returns the already existing default store","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1:1\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":".default when a default store is already present ensures there is a default if one doesn't exist yet","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1:2\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":".default when a default store is already present ensures there is only one default","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1:3\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":".default when a default store is already present when store is not saved ensure old default location still default","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":".default when a default store is not present builds a new default store","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2:1\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":".default when a default store is not present does not persist the original default store","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2:2\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":".available_locales example at ./spec/models/spree/store_spec.rb:479","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":"#countries_available_for_checkout returns country list for checkout zone","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1:1\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":"#countries_available_for_checkout returns list of all countries","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:2:1\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":"#states_available_for_checkout returns states list for checkout zone","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1:1\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":"#states_available_for_checkout returns list of states associated to country","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":"#ensure_default_country checkout zone not set example at ./spec/models/spree/store_spec.rb:572","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1:2\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":"#ensure_default_country checkout zone not set with default country example at ./spec/models/spree/store_spec.rb:569","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":"#ensure_default_country checkout zone set with default country set no zone members example at ./spec/models/spree/store_spec.rb:592","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":"#ensure_default_country checkout zone set with default country set default country is a zone member example at ./spec/models/spree/store_spec.rb:601","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":"#ensure_default_country checkout zone set with default country set default country is not a zone member example at ./spec/models/spree/store_spec.rb:607","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":"#ensure_default_country checkout zone set without default country set no zone members example at ./spec/models/spree/store_spec.rb:618","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":"#ensure_default_country checkout zone set without default country set with zone members example at ./spec/models/spree/store_spec.rb:624","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":"#default_country_iso= when country is not found sets the default country","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:1:1\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":"#default_country_iso= when country is found sets the default country","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:2:1\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":"#unique_name returns the Store Name followed by the Store Code in parentheses","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:1\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":"#supported_currencies_list with supported currencies set returns supported currencies list","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:1:1\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":"#supported_currencies_list without supported currencies set returns supported currencies list","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:2:1\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":"#supported_locales_list with supported locale set returns supported currencies list","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:1:1\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":"#supported_locales_list without supported currencies set returns supported currencies list","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:2:1\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":"#ensure_supported_locales store with default_locale example at ./spec/models/spree/store_spec.rb:709","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:1:1\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":"#ensure_supported_locales store without default locale example at ./spec/models/spree/store_spec.rb:715","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:2:1\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":"#ensure_supported_locales store with supported locales example at ./spec/models/spree/store_spec.rb:721","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:3:1\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":"#ensure_supported_currencies store with default_currency example at ./spec/models/spree/store_spec.rb:729","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:17:1:1\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":"#ensure_supported_currencies store with supported currencies example at ./spec/models/spree/store_spec.rb:735","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:17:2:1\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":"#favicon with an attached favicon image returns a resized favicon","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:1:1\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":"#favicon without an attached favicon image returns a blank favicon","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:2:1\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":"#can_be_deleted? cannot delete the only store","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:1\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":"#can_be_deleted? can delete when there are more than 1 stores","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:2\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":"soft deletion default store with multiple stores can be deleted","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:20:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":"soft deletion default store with multiple stores passes default flag to other store","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:20:1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":"soft deletion default store single store cannot be deleted","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:20:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":"soft deletion another store soft-deletes when destroy is called","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:20:2:1\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":"#default_stock_location with default stock location returns the default stock location","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:21:1:1\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":"#default_stock_location without default stock location creates a new default stock location","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:21:2:1\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":"#supported_shipping_zones with checkout zone set returns the checkout zone","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:22:1:1\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":"#supported_shipping_zones when checkout zone not set returns all shipping zones","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:22:2:1\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":"#formatted_url example at ./spec/models/spree/store_spec.rb:853","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:23:1\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":"#formatted_url url with port example at ./spec/models/spree/store_spec.rb:858","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:23:2:1\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":"#formatted_url on production example at ./spec/models/spree/store_spec.rb:864","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:23:3:1\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":"#formatted_url_or_custom_domain without custom domain example at ./spec/models/spree/store_spec.rb:872","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:24:1:1\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":"#formatted_url_or_custom_domain with custom domain example at ./spec/models/spree/store_spec.rb:878","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:24:2:1\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":".subscribes_to registers subscription patterns","suite":"Spree::Subscriber at ./spec/models/spree/subscriber_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/subscriber_spec.rb"},{"name":".subscribes_to accepts multiple patterns","suite":"Spree::Subscriber at ./spec/models/spree/subscriber_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/subscriber_spec.rb"},{"name":".subscribes_to stores subscription options","suite":"Spree::Subscriber at ./spec/models/spree/subscriber_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/models/spree/subscriber_spec.rb"},{"name":".subscribes_to accumulates patterns from multiple calls","suite":"Spree::Subscriber at ./spec/models/spree/subscriber_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","suiteSourceFile":"core/spec/models/spree/subscriber_spec.rb"},{"name":".on maps events to methods","suite":"Spree::Subscriber at ./spec/models/spree/subscriber_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/subscriber_spec.rb"},{"name":"#call without event handlers calls the handle method","suite":"Spree::Subscriber at ./spec/models/spree/subscriber_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","suiteSourceFile":"core/spec/models/spree/subscriber_spec.rb"},{"name":"#call with event handlers routes to the correct handler","suite":"Spree::Subscriber at ./spec/models/spree/subscriber_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","suiteSourceFile":"core/spec/models/spree/subscriber_spec.rb"},{"name":"#call with event handlers falls back to handle when no matching handler","suite":"Spree::Subscriber at ./spec/models/spree/subscriber_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:2\"}}","suiteSourceFile":"core/spec/models/spree/subscriber_spec.rb"},{"name":".call creates an instance and calls it","suite":"Spree::Subscriber at ./spec/models/spree/subscriber_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/subscriber_spec.rb"},{"name":"integration receives events when registered","suite":"Spree::Subscriber at ./spec/models/spree/subscriber_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","suiteSourceFile":"core/spec/models/spree/subscriber_spec.rb"},{"name":"default tax category undefaults the previous default tax category","suite":"Spree::TaxCategory at ./spec/models/spree/tax_category_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/tax_category_spec.rb"},{"name":"default tax category undefaults the previous default tax category except when updating the existing default tax category","suite":"Spree::TaxCategory at ./spec/models/spree/tax_category_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/tax_category_spec.rb"},{"name":".default returns the default tax category","suite":"Spree::TaxCategory at ./spec/models/spree/tax_category_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/tax_category_spec.rb"},{"name":"#destroy removes all tax rates","suite":"Spree::TaxCategory at ./spec/models/spree/tax_category_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/tax_category_spec.rb"},{"name":"#destroy nullifies all products and variants","suite":"Spree::TaxCategory at ./spec/models/spree/tax_category_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","suiteSourceFile":"core/spec/models/spree/tax_category_spec.rb"},{"name":"match returns an empty array when tax_zone is nil","suite":"Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/tax_rate_spec.rb"},{"name":"match when no rate zones match the tax zone when there is no default tax zone returns an empty array","suite":"Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/tax_rate_spec.rb"},{"name":"match when no rate zones match the tax zone when there is no default tax zone returns the rate that matches the rate zone","suite":"Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1:2\"}}","suiteSourceFile":"core/spec/models/spree/tax_rate_spec.rb"},{"name":"match when no rate zones match the tax zone when there is no default tax zone returns all rates that match the rate zone","suite":"Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1:3\"}}","suiteSourceFile":"core/spec/models/spree/tax_rate_spec.rb"},{"name":"match when no rate zones match the tax zone when there is no default tax zone when the tax_zone is contained within a rate zone returns the rate zone","suite":"Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/tax_rate_spec.rb"},{"name":"match when no rate zones match the tax zone when there is a default tax zone when the order has the same tax zone when the tax is not a VAT example at ./spec/models/spree/tax_rate_spec.rb:109","suite":"Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/tax_rate_spec.rb"},{"name":"match when no rate zones match the tax zone when there is a default tax zone when the order has the same tax zone when the tax is a VAT example at ./spec/models/spree/tax_rate_spec.rb:115","suite":"Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/tax_rate_spec.rb"},{"name":"match when no rate zones match the tax zone when there is a default tax zone when the order has a different tax zone when the tax is a VAT return no tax rate","suite":"Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/tax_rate_spec.rb"},{"name":"match when no rate zones match the tax zone when there is a default tax zone when the order has a different tax zone when the tax is not VAT returns no tax rate","suite":"Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/tax_rate_spec.rb"},{"name":".adjust with line items applies adjustments for two tax rates to the order","suite":"Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/tax_rate_spec.rb"},{"name":".adjust without tax rates updates pre_tax_total to match line item cost if no taxes","suite":"Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/tax_rate_spec.rb"},{"name":".adjust with shipments applies adjustments for two tax rates to the order","suite":"Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:1\"}}","suiteSourceFile":"core/spec/models/spree/tax_rate_spec.rb"},{"name":".adjust for MOSS taxation in Europe a download without an address costs 100 euros including tax","suite":"Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:4:1:1\"}}","suiteSourceFile":"core/spec/models/spree/tax_rate_spec.rb"},{"name":".adjust for MOSS taxation in Europe a download to germany costs 100 euros including tax","suite":"Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:4:1:2\"}}","suiteSourceFile":"core/spec/models/spree/tax_rate_spec.rb"},{"name":".adjust for MOSS taxation in Europe a download to france costs more including tax","suite":"Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:4:1:3\"}}","suiteSourceFile":"core/spec/models/spree/tax_rate_spec.rb"},{"name":".adjust for MOSS taxation in Europe a download to somewhere else costs the net amount","suite":"Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:4:1:4\"}}","suiteSourceFile":"core/spec/models/spree/tax_rate_spec.rb"},{"name":".adjust for MOSS taxation in Europe a t-shirt to germany costs 100 euros including tax","suite":"Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:4:2:1\"}}","suiteSourceFile":"core/spec/models/spree/tax_rate_spec.rb"},{"name":".adjust for MOSS taxation in Europe a t-shirt to france costs 100 euros including tax","suite":"Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:4:2:2\"}}","suiteSourceFile":"core/spec/models/spree/tax_rate_spec.rb"},{"name":".adjust for MOSS taxation in Europe a t-shirt to somewhere else costs the net amount","suite":"Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:4:2:3\"}}","suiteSourceFile":"core/spec/models/spree/tax_rate_spec.rb"},{"name":".included_tax_amount_for will only get me tax amounts from tax_rates that match","suite":"Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/tax_rate_spec.rb"},{"name":"#adjust not taxable line item does not create a tax adjustment","suite":"Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1\"}}","suiteSourceFile":"core/spec/models/spree/tax_rate_spec.rb"},{"name":"#adjust not taxable line item does not create a refund","suite":"Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:2\"}}","suiteSourceFile":"core/spec/models/spree/tax_rate_spec.rb"},{"name":"#adjust taxable line item when price includes tax when zone is contained by default tax zone creates two adjustments, one for each tax rate","suite":"Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/tax_rate_spec.rb"},{"name":"#adjust taxable line item when price includes tax when zone is contained by default tax zone does not create a tax refund","suite":"Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/tax_rate_spec.rb"},{"name":"#adjust taxable line item when price includes tax when order's zone is neither the default zone, or included in the default zone, but matches the rate's zone creates an adjustment","suite":"Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/tax_rate_spec.rb"},{"name":"#adjust taxable line item when price includes tax when order's zone is neither the default zone, or included in the default zone, but matches the rate's zone does not create a tax refund for each tax rate","suite":"Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1:2:2\"}}","suiteSourceFile":"core/spec/models/spree/tax_rate_spec.rb"},{"name":"#adjust taxable line item when price includes tax when order's zone does not match default zone, is not included in the default zone, AND does not match the rate's zone does not create positive adjustments","suite":"Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/tax_rate_spec.rb"},{"name":"#adjust taxable line item when price includes tax when order's zone does not match default zone, is not included in the default zone, AND does not match the rate's zone does not create a tax refund for each tax rate","suite":"Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1:3:2\"}}","suiteSourceFile":"core/spec/models/spree/tax_rate_spec.rb"},{"name":"#adjust taxable line item when price includes tax when price does not include tax deletes adjustments for open order when taxrate is deleted","suite":"Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/tax_rate_spec.rb"},{"name":"#adjust taxable line item when price includes tax when price does not include tax does not delete adjustments for complete order when taxrate is deleted","suite":"Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1:4:2\"}}","suiteSourceFile":"core/spec/models/spree/tax_rate_spec.rb"},{"name":"#adjust taxable line item when price includes tax when price does not include tax creates an adjustment","suite":"Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1:4:3\"}}","suiteSourceFile":"core/spec/models/spree/tax_rate_spec.rb"},{"name":"#adjust taxable line item when price includes tax when price does not include tax does not create a tax refund","suite":"Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1:4:4\"}}","suiteSourceFile":"core/spec/models/spree/tax_rate_spec.rb"},{"name":"#adjust taxable line item when price includes tax when price does not include tax tax adjustments applies adjustments when a tax zone is present","suite":"Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1:4:5:1\"}}","suiteSourceFile":"core/spec/models/spree/tax_rate_spec.rb"},{"name":"#adjust taxable line item when price includes tax when price does not include tax tax adjustments when the tax zone is removed does not apply any adjustments","suite":"Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1:4:5:2:1\"}}","suiteSourceFile":"core/spec/models/spree/tax_rate_spec.rb"},{"name":"#adjust taxable line item when price includes tax when two rates apply creates two price adjustments","suite":"Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1:5:1\"}}","suiteSourceFile":"core/spec/models/spree/tax_rate_spec.rb"},{"name":"#adjust taxable line item when price includes tax when two rates apply price adjustments should be accurate","suite":"Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1:5:2\"}}","suiteSourceFile":"core/spec/models/spree/tax_rate_spec.rb"},{"name":"#label returns the name and amount for the tax rate","suite":"Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","suiteSourceFile":"core/spec/models/spree/tax_rate_spec.rb"},{"name":"#amount_for_label returns an empty string when the amount is 0","suite":"Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","suiteSourceFile":"core/spec/models/spree/tax_rate_spec.rb"},{"name":"#amount_for_label returns a string with the percentage when the amount is not 0","suite":"Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2\"}}","suiteSourceFile":"core/spec/models/spree/tax_rate_spec.rb"},{"name":"percentage conversion #amount_percentage converts decimal amount to percentage","suite":"Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1:1\"}}","suiteSourceFile":"core/spec/models/spree/tax_rate_spec.rb"},{"name":"percentage conversion #amount_percentage returns nil when amount is nil","suite":"Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1:2\"}}","suiteSourceFile":"core/spec/models/spree/tax_rate_spec.rb"},{"name":"percentage conversion #amount_percentage handles zero amount","suite":"Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1:3\"}}","suiteSourceFile":"core/spec/models/spree/tax_rate_spec.rb"},{"name":"percentage conversion #amount_percentage rounds to 2 decimal places","suite":"Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1:4\"}}","suiteSourceFile":"core/spec/models/spree/tax_rate_spec.rb"},{"name":"percentage conversion #amount_percentage= converts percentage to decimal amount","suite":"Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2:1\"}}","suiteSourceFile":"core/spec/models/spree/tax_rate_spec.rb"},{"name":"percentage conversion #amount_percentage= sets amount to nil when percentage is nil","suite":"Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2:2\"}}","suiteSourceFile":"core/spec/models/spree/tax_rate_spec.rb"},{"name":"percentage conversion #amount_percentage= sets amount to nil when percentage is empty string","suite":"Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2:3\"}}","suiteSourceFile":"core/spec/models/spree/tax_rate_spec.rb"},{"name":"percentage conversion #amount_percentage= handles zero percentage","suite":"Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2:4\"}}","suiteSourceFile":"core/spec/models/spree/tax_rate_spec.rb"},{"name":"percentage conversion #amount_percentage= handles string percentage values","suite":"Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2:5\"}}","suiteSourceFile":"core/spec/models/spree/tax_rate_spec.rb"},{"name":"validation has allowed attachment content type","suite":"Spree::TaxonImage at ./spec/models/spree/taxon_image_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/taxon_image_spec.rb"},{"name":"validation has no allowed attachment content type","suite":"Spree::TaxonImage at ./spec/models/spree/taxon_image_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/taxon_image_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:4","suite":"Spree::Taxon at ./spec/models/spree/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/taxon_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:5","suite":"Spree::Taxon at ./spec/models/spree/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/taxon_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:7","suite":"Spree::Taxon at ./spec/models/spree/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/models/spree/taxon_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:8","suite":"Spree::Taxon at ./spec/models/spree/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","suiteSourceFile":"core/spec/models/spree/taxon_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:10","suite":"Spree::Taxon at ./spec/models/spree/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","suiteSourceFile":"core/spec/models/spree/taxon_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:11","suite":"Spree::Taxon at ./spec/models/spree/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","suiteSourceFile":"core/spec/models/spree/taxon_spec.rb"},{"name":"behaves like metadata reads data as symbolized keys","suite":"Spree::Taxon at ./spec/models/spree/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7\"}}","suiteSourceFile":"core/spec/models/spree/taxon_spec.rb"},{"name":"behaves like metadata reads data as not symbolized keys","suite":"Spree::Taxon at ./spec/models/spree/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8\"}}","suiteSourceFile":"core/spec/models/spree/taxon_spec.rb"},{"name":"behaves like metadata can query records by metadata properties","suite":"Spree::Taxon at ./spec/models/spree/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:10\"}}","suiteSourceFile":"core/spec/models/spree/taxon_spec.rb"},{"name":"#to_param example at ./spec/models/spree/taxon_spec.rb:13","suite":"Spree::Taxon at ./spec/models/spree/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/taxon_spec.rb"},{"name":"Validations #check_for_root does not validate the taxon","suite":"Spree::Taxon at ./spec/models/spree/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","suiteSourceFile":"core/spec/models/spree/taxon_spec.rb"},{"name":"Validations #check_for_root validates the taxon","suite":"Spree::Taxon at ./spec/models/spree/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:2\"}}","suiteSourceFile":"core/spec/models/spree/taxon_spec.rb"},{"name":"Validations #parent_belongs_to_same_taxonomy does not validate the taxon","suite":"Spree::Taxon at ./spec/models/spree/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","suiteSourceFile":"core/spec/models/spree/taxon_spec.rb"},{"name":"Validations #parent_belongs_to_same_taxonomy validates the taxon","suite":"Spree::Taxon at ./spec/models/spree/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:2\"}}","suiteSourceFile":"core/spec/models/spree/taxon_spec.rb"},{"name":"Scopes .for_taxonomy when translations are disabled returns the correct taxon","suite":"Spree::Taxon at ./spec/models/spree/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/taxon_spec.rb"},{"name":"Scopes .for_taxonomy when translations are enabled returns the correct taxon","suite":"Spree::Taxon at ./spec/models/spree/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/taxon_spec.rb"},{"name":"Scopes .with_matching_name returns the taxon with the matching name","suite":"Spree::Taxon at ./spec/models/spree/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1\"}}","suiteSourceFile":"core/spec/models/spree/taxon_spec.rb"},{"name":"Scopes .with_matching_name with translations returns the taxon with the matching name","suite":"Spree::Taxon at ./spec/models/spree/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/taxon_spec.rb"},{"name":"callbacks regenerate_taxon_products when taxon's rules_match_policy changes calls #regenerate_taxon_products","suite":"Spree::Taxon at ./spec/models/spree/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/taxon_spec.rb"},{"name":"callbacks regenerate_taxon_products when taxon's rule changes calls #regenerate_taxon_products","suite":"Spree::Taxon at ./spec/models/spree/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/taxon_spec.rb"},{"name":"callbacks regenerate_taxon_products when rule is destroyed calls #regenerate_taxon_products","suite":"Spree::Taxon at ./spec/models/spree/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/taxon_spec.rb"},{"name":"callbacks regenerate_taxon_products when rule is created calls #regenerate_taxon_products","suite":"Spree::Taxon at ./spec/models/spree/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/taxon_spec.rb"},{"name":"when using another locale translates taxon fields","suite":"Spree::Taxon at ./spec/models/spree/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","suiteSourceFile":"core/spec/models/spree/taxon_spec.rb"},{"name":"set_permalink sets permalink correctly when no parent present","suite":"Spree::Taxon at ./spec/models/spree/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","suiteSourceFile":"core/spec/models/spree/taxon_spec.rb"},{"name":"set_permalink supports Chinese characters","suite":"Spree::Taxon at ./spec/models/spree/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2\"}}","suiteSourceFile":"core/spec/models/spree/taxon_spec.rb"},{"name":"set_permalink stores old slugs in FriendlyIds history","suite":"Spree::Taxon at ./spec/models/spree/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:3\"}}","suiteSourceFile":"core/spec/models/spree/taxon_spec.rb"},{"name":"set_permalink with parent taxon sets permalink correctly when taxon has parent","suite":"Spree::Taxon at ./spec/models/spree/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:4:1\"}}","suiteSourceFile":"core/spec/models/spree/taxon_spec.rb"},{"name":"set_permalink with parent taxon sets permalink correctly with existing permalink present","suite":"Spree::Taxon at ./spec/models/spree/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:4:2\"}}","suiteSourceFile":"core/spec/models/spree/taxon_spec.rb"},{"name":"set_permalink with parent taxon supports Chinese characters","suite":"Spree::Taxon at ./spec/models/spree/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:4:3\"}}","suiteSourceFile":"core/spec/models/spree/taxon_spec.rb"},{"name":"set_permalink with parent taxon setting a new node sibling position via :child_index= taxon is not new passes the desired index move_to_child_with_index of :parent","suite":"Spree::Taxon at ./spec/models/spree/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:4:4:1:1\"}}","suiteSourceFile":"core/spec/models/spree/taxon_spec.rb"},{"name":"creating a child node using first_or_create does not error out","suite":"Spree::Taxon at ./spec/models/spree/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1\"}}","suiteSourceFile":"core/spec/models/spree/taxon_spec.rb"},{"name":"ransackable_associations example at ./spec/models/spree/taxon_spec.rb:266","suite":"Spree::Taxon at ./spec/models/spree/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1\"}}","suiteSourceFile":"core/spec/models/spree/taxon_spec.rb"},{"name":"#cached_self_and_descendants_ids example at ./spec/models/spree/taxon_spec.rb:270","suite":"Spree::Taxon at ./spec/models/spree/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1\"}}","suiteSourceFile":"core/spec/models/spree/taxon_spec.rb"},{"name":"#copy_taxonomy_from_parent example at ./spec/models/spree/taxon_spec.rb:277","suite":"Spree::Taxon at ./spec/models/spree/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1\"}}","suiteSourceFile":"core/spec/models/spree/taxon_spec.rb"},{"name":"#copy_taxonomy_from_parent example at ./spec/models/spree/taxon_spec.rb:278","suite":"Spree::Taxon at ./spec/models/spree/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2\"}}","suiteSourceFile":"core/spec/models/spree/taxon_spec.rb"},{"name":"#sync_taxonomy_name when none root taxon name is updated does not update the taxonomy name","suite":"Spree::Taxon at ./spec/models/spree/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:1:1\"}}","suiteSourceFile":"core/spec/models/spree/taxon_spec.rb"},{"name":"#sync_taxonomy_name when root taxon name is updated updates the taxonomy name","suite":"Spree::Taxon at ./spec/models/spree/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:2:1\"}}","suiteSourceFile":"core/spec/models/spree/taxon_spec.rb"},{"name":"#sync_taxonomy_name when root taxon name is updated with special characters updates the taxonomy name","suite":"Spree::Taxon at ./spec/models/spree/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:3:1\"}}","suiteSourceFile":"core/spec/models/spree/taxon_spec.rb"},{"name":"#sync_taxonomy_name when root taxon attribute other than name is updated does not update the taxonomy","suite":"Spree::Taxon at ./spec/models/spree/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:4:1\"}}","suiteSourceFile":"core/spec/models/spree/taxon_spec.rb"},{"name":"#localized_slugs_for_store when there are slugs in locales not supported by the store returns only slugs in locales supported by the store","suite":"Spree::Taxon at ./spec/models/spree/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:1:1\"}}","suiteSourceFile":"core/spec/models/spree/taxon_spec.rb"},{"name":"#localized_slugs_for_store when one of the supported locales does not have a translation falls back to store's default locale","suite":"Spree::Taxon at ./spec/models/spree/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:2:1\"}}","suiteSourceFile":"core/spec/models/spree/taxon_spec.rb"},{"name":"#localized_slugs_for_store when setting the slug translations for taxonomy sets the slugs in slug format","suite":"Spree::Taxon at ./spec/models/spree/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:3:1\"}}","suiteSourceFile":"core/spec/models/spree/taxon_spec.rb"},{"name":"#localized_slugs_for_store when setting the slugs in taxon under taxomony with different parent slug sets the slug in valid format","suite":"Spree::Taxon at ./spec/models/spree/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:4:1\"}}","suiteSourceFile":"core/spec/models/spree/taxon_spec.rb"},{"name":"#regenerate_pretty_name_and_permalink regenerates pretty name and permalink","suite":"Spree::Taxon at ./spec/models/spree/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:1\"}}","suiteSourceFile":"core/spec/models/spree/taxon_spec.rb"},{"name":"#regenerate_pretty_name_and_permalink when parent's permalink is changed updates the pretty name and permalink","suite":"Spree::Taxon at ./spec/models/spree/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:2:1\"}}","suiteSourceFile":"core/spec/models/spree/taxon_spec.rb"},{"name":"#regenerate_pretty_name_and_permalink when parent name is changed updates the pretty name and permalink","suite":"Spree::Taxon at ./spec/models/spree/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:3:1\"}}","suiteSourceFile":"core/spec/models/spree/taxon_spec.rb"},{"name":"#regenerate_pretty_name_and_permalink with translations updates the pretty name and permalink for translations as well","suite":"Spree::Taxon at ./spec/models/spree/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:4:1\"}}","suiteSourceFile":"core/spec/models/spree/taxon_spec.rb"},{"name":"#regenerate_pretty_name_and_permalink when taxon is moved updates the pretty name and permalink","suite":"Spree::Taxon at ./spec/models/spree/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:5:1\"}}","suiteSourceFile":"core/spec/models/spree/taxon_spec.rb"},{"name":"#regenerate_pretty_name_and_permalink when taxon is moved updates the pretty name and permalink when move is done inside different locales","suite":"Spree::Taxon at ./spec/models/spree/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:5:2\"}}","suiteSourceFile":"core/spec/models/spree/taxon_spec.rb"},{"name":"#pretty_name 1 lvl deep returns taxonomy name and taxon name","suite":"Spree::Taxon at ./spec/models/spree/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:1:1\"}}","suiteSourceFile":"core/spec/models/spree/taxon_spec.rb"},{"name":"#pretty_name 2+ lvl deep returns parent name and taxon name","suite":"Spree::Taxon at ./spec/models/spree/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:2:1\"}}","suiteSourceFile":"core/spec/models/spree/taxon_spec.rb"},{"name":"#pretty_name 2+ lvl deep when name is updated returns the updated pretty name","suite":"Spree::Taxon at ./spec/models/spree/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/taxon_spec.rb"},{"name":"#pretty_name 2+ lvl deep when parent name is updated returns the updated pretty name","suite":"Spree::Taxon at ./spec/models/spree/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:2:3:1\"}}","suiteSourceFile":"core/spec/models/spree/taxon_spec.rb"},{"name":"#pretty_name when `always_use_translations` is disabled sets the pretty name","suite":"Spree::Taxon at ./spec/models/spree/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:3:1\"}}","suiteSourceFile":"core/spec/models/spree/taxon_spec.rb"},{"name":"#pretty_name when `always_use_translations` is enabled sets the pretty name","suite":"Spree::Taxon at ./spec/models/spree/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:4:1\"}}","suiteSourceFile":"core/spec/models/spree/taxon_spec.rb"},{"name":"#store returns the store from the taxonomy","suite":"Spree::Taxon at ./spec/models/spree/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:1\"}}","suiteSourceFile":"core/spec/models/spree/taxon_spec.rb"},{"name":"#active_products_with_descendants when category has products returns true","suite":"Spree::Taxon at ./spec/models/spree/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:17:1:1\"}}","suiteSourceFile":"core/spec/models/spree/taxon_spec.rb"},{"name":"#active_products_with_descendants when category has products returns true when products aren't active","suite":"Spree::Taxon at ./spec/models/spree/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:17:1:2\"}}","suiteSourceFile":"core/spec/models/spree/taxon_spec.rb"},{"name":"#active_products_with_descendants when only children categories have products returns true","suite":"Spree::Taxon at ./spec/models/spree/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:17:2:1\"}}","suiteSourceFile":"core/spec/models/spree/taxon_spec.rb"},{"name":"#active_products_with_descendants when only children categories have products returns false when products aren't active","suite":"Spree::Taxon at ./spec/models/spree/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:17:2:2\"}}","suiteSourceFile":"core/spec/models/spree/taxon_spec.rb"},{"name":"#active_products_with_descendants when category has no products returns false","suite":"Spree::Taxon at ./spec/models/spree/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:17:3:1\"}}","suiteSourceFile":"core/spec/models/spree/taxon_spec.rb"},{"name":"#active_products_with_descendants when category has products but children categories have no products returns true","suite":"Spree::Taxon at ./spec/models/spree/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:17:4:1\"}}","suiteSourceFile":"core/spec/models/spree/taxon_spec.rb"},{"name":"#active_products_with_descendants when category has products but children categories have no products returns false when products aren't active","suite":"Spree::Taxon at ./spec/models/spree/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:17:4:2\"}}","suiteSourceFile":"core/spec/models/spree/taxon_spec.rb"},{"name":"#active_products_with_descendants when children categories also have no products returns false","suite":"Spree::Taxon at ./spec/models/spree/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:17:5:1\"}}","suiteSourceFile":"core/spec/models/spree/taxon_spec.rb"},{"name":"#products_matching_rules when the taxon is manual returns an empty taxon","suite":"Spree::Taxon at ./spec/models/spree/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:1:1\"}}","suiteSourceFile":"core/spec/models/spree/taxon_spec.rb"},{"name":"#products_matching_rules when the taxon is automatic when the taxon has no rules returns an empty taxon","suite":"Spree::Taxon at ./spec/models/spree/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/taxon_spec.rb"},{"name":"#products_matching_rules when the taxon is automatic when the taxon has rules when the rule is a tag rule when the match policy is is_equal_to returns products that match cruelty-free tag","suite":"Spree::Taxon at ./spec/models/spree/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:2:2:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/taxon_spec.rb"},{"name":"#products_matching_rules when the taxon is automatic when the taxon has rules when the rule is a tag rule when the match policy is is_equal_to returns products that match discounted tag","suite":"Spree::Taxon at ./spec/models/spree/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:2:2:1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/taxon_spec.rb"},{"name":"#products_matching_rules when the taxon is automatic when the taxon has rules when the rule is a tag rule when the match policy is is_equal_to with all rules match policy returns products that match both tags","suite":"Spree::Taxon at ./spec/models/spree/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:2:2:1:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/taxon_spec.rb"},{"name":"#products_matching_rules when the taxon is automatic when the taxon has rules when the rule is a tag rule when the match policy is is_equal_to with any rules match policy returns products that match any tag","suite":"Spree::Taxon at ./spec/models/spree/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:2:2:1:1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/taxon_spec.rb"},{"name":"#products_matching_rules when the taxon is automatic when the taxon has rules when the rule is a tag rule when the match policy is is_not_equal_to returns products that do not match cruelty-free tag","suite":"Spree::Taxon at ./spec/models/spree/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:2:2:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/taxon_spec.rb"},{"name":"#products_matching_rules when the taxon is automatic when the taxon has rules when the rule is a tag rule when the match policy is is_not_equal_to returns products that do not match discounted tag","suite":"Spree::Taxon at ./spec/models/spree/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:2:2:1:2:2\"}}","suiteSourceFile":"core/spec/models/spree/taxon_spec.rb"},{"name":"#products_matching_rules when the taxon is automatic when the taxon has rules when the rule is a tag rule when the match policy is is_not_equal_to with all rules match policy returns products that do not match both tags","suite":"Spree::Taxon at ./spec/models/spree/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:2:2:1:2:3:1\"}}","suiteSourceFile":"core/spec/models/spree/taxon_spec.rb"},{"name":"#products_matching_rules when the taxon is automatic when the taxon has rules when the rule is a tag rule when the match policy is is_not_equal_to with any rules match policy returns products that do not match any tag","suite":"Spree::Taxon at ./spec/models/spree/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:2:2:1:2:4:1\"}}","suiteSourceFile":"core/spec/models/spree/taxon_spec.rb"},{"name":"#products_matching_rules when the taxon is automatic when the taxon has rules when the rule is a sale rule when the match policy is is_equal_to matches products that are on sale in store's currency","suite":"Spree::Taxon at ./spec/models/spree/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:2:2:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/taxon_spec.rb"},{"name":"#products_matching_rules when the taxon is automatic when the taxon has rules when the rule is a sale rule when the match policy is in_not_equal_to matches products that aren't on sale and have price in store's currency","suite":"Spree::Taxon at ./spec/models/spree/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:2:2:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/taxon_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:4","suite":"Spree::Taxonomy at ./spec/models/spree/taxonomy_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/taxonomy_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:5","suite":"Spree::Taxonomy at ./spec/models/spree/taxonomy_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/taxonomy_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:7","suite":"Spree::Taxonomy at ./spec/models/spree/taxonomy_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/models/spree/taxonomy_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:8","suite":"Spree::Taxonomy at ./spec/models/spree/taxonomy_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","suiteSourceFile":"core/spec/models/spree/taxonomy_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:10","suite":"Spree::Taxonomy at ./spec/models/spree/taxonomy_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","suiteSourceFile":"core/spec/models/spree/taxonomy_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:11","suite":"Spree::Taxonomy at ./spec/models/spree/taxonomy_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","suiteSourceFile":"core/spec/models/spree/taxonomy_spec.rb"},{"name":"behaves like metadata reads data as symbolized keys","suite":"Spree::Taxonomy at ./spec/models/spree/taxonomy_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7\"}}","suiteSourceFile":"core/spec/models/spree/taxonomy_spec.rb"},{"name":"behaves like metadata reads data as not symbolized keys","suite":"Spree::Taxonomy at ./spec/models/spree/taxonomy_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8\"}}","suiteSourceFile":"core/spec/models/spree/taxonomy_spec.rb"},{"name":"behaves like metadata can query records by metadata properties","suite":"Spree::Taxonomy at ./spec/models/spree/taxonomy_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:10\"}}","suiteSourceFile":"core/spec/models/spree/taxonomy_spec.rb"},{"name":"scopes .with_matching_name returns the taxonomy with the matching name","suite":"Spree::Taxonomy at ./spec/models/spree/taxonomy_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/taxonomy_spec.rb"},{"name":"scopes .with_matching_name with translations returns the taxonomy with the matching name","suite":"Spree::Taxonomy at ./spec/models/spree/taxonomy_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/taxonomy_spec.rb"},{"name":"#destroy destroys all associated taxons","suite":"Spree::Taxonomy at ./spec/models/spree/taxonomy_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/taxonomy_spec.rb"},{"name":"#set_root_taxon_name when Taxonomy is created sets the root Taxonomy name to match","suite":"Spree::Taxonomy at ./spec/models/spree/taxonomy_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1\"}}","suiteSourceFile":"core/spec/models/spree/taxonomy_spec.rb"},{"name":"#set_root_taxon_name when Taxonomy name is updated changes the root Taxon name to match","suite":"Spree::Taxonomy at ./spec/models/spree/taxonomy_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1\"}}","suiteSourceFile":"core/spec/models/spree/taxonomy_spec.rb"},{"name":"#set_root_taxon_name when Taxonomy position is updated does not change the root Taxon name","suite":"Spree::Taxonomy at ./spec/models/spree/taxonomy_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3:1\"}}","suiteSourceFile":"core/spec/models/spree/taxonomy_spec.rb"},{"name":"behaves like lifecycle events lifecycle events legacy_user.created publishes created event when record is created","suite":"Spree::LegacyUser at ./spec/models/spree/user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/user_spec.rb"},{"name":"behaves like lifecycle events lifecycle events legacy_user.updated publishes updated event when record is updated","suite":"Spree::LegacyUser at ./spec/models/spree/user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/user_spec.rb"},{"name":"behaves like lifecycle events lifecycle events legacy_user.deleted publishes deleted event when record is deleted","suite":"Spree::LegacyUser at ./spec/models/spree/user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/user_spec.rb"},{"name":"#event_serializer_class example at ./spec/models/spree/user_spec.rb:9","suite":"Spree::LegacyUser at ./spec/models/spree/user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/user_spec.rb"},{"name":"#can_be_deleted? when user has completed orders example at ./spec/models/spree/user_spec.rb:18","suite":"Spree::LegacyUser at ./spec/models/spree/user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","suiteSourceFile":"core/spec/models/spree/user_spec.rb"},{"name":"#can_be_deleted? when user has no completed orders example at ./spec/models/spree/user_spec.rb:24","suite":"Spree::LegacyUser at ./spec/models/spree/user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","suiteSourceFile":"core/spec/models/spree/user_spec.rb"},{"name":"#full_name when names are present returns the full name of the user","suite":"Spree::LegacyUser at ./spec/models/spree/user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1\"}}","suiteSourceFile":"core/spec/models/spree/user_spec.rb"},{"name":"#full_name when both first and last names are nil does not raise error and returns nil","suite":"Spree::LegacyUser at ./spec/models/spree/user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1\"}}","suiteSourceFile":"core/spec/models/spree/user_spec.rb"},{"name":"#last_incomplete_order returns correct order","suite":"Spree::LegacyUser at ./spec/models/spree/user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","suiteSourceFile":"core/spec/models/spree/user_spec.rb"},{"name":"#last_incomplete_order persists order address copies over order addresses","suite":"Spree::LegacyUser at ./spec/models/spree/user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1\"}}","suiteSourceFile":"core/spec/models/spree/user_spec.rb"},{"name":"#last_incomplete_order persists order address doesnt create new addresses if user has already","suite":"Spree::LegacyUser at ./spec/models/spree/user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:2\"}}","suiteSourceFile":"core/spec/models/spree/user_spec.rb"},{"name":"#last_incomplete_order persists order address set both bill and ship address id on subject","suite":"Spree::LegacyUser at ./spec/models/spree/user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:3\"}}","suiteSourceFile":"core/spec/models/spree/user_spec.rb"},{"name":"#last_incomplete_order payment source has payment sources","suite":"Spree::LegacyUser at ./spec/models/spree/user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3:1\"}}","suiteSourceFile":"core/spec/models/spree/user_spec.rb"},{"name":"#last_incomplete_order payment source drops payment source","suite":"Spree::LegacyUser at ./spec/models/spree/user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3:2\"}}","suiteSourceFile":"core/spec/models/spree/user_spec.rb"},{"name":"reporting #lifetime_value with orders returns the total of completed orders for the user","suite":"Spree::LegacyUser at ./spec/models/spree/user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/user_spec.rb"},{"name":"reporting #lifetime_value without orders returns 0.00","suite":"Spree::LegacyUser at ./spec/models/spree/user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/user_spec.rb"},{"name":"reporting #display_lifetime_value returns a Spree::Money version of lifetime_value","suite":"Spree::LegacyUser at ./spec/models/spree/user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/user_spec.rb"},{"name":"reporting #order_count returns the count of completed orders for the user","suite":"Spree::LegacyUser at ./spec/models/spree/user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/user_spec.rb"},{"name":"reporting #average_order_value with orders returns the average completed order price for the user","suite":"Spree::LegacyUser at ./spec/models/spree/user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:1:4:1:1\"}}","suiteSourceFile":"core/spec/models/spree/user_spec.rb"},{"name":"reporting #average_order_value without orders returns 0.00","suite":"Spree::LegacyUser at ./spec/models/spree/user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:1:4:2:1\"}}","suiteSourceFile":"core/spec/models/spree/user_spec.rb"},{"name":"reporting #display_average_order_value returns a Spree::Money version of average_order_value","suite":"Spree::LegacyUser at ./spec/models/spree/user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:1:5:1\"}}","suiteSourceFile":"core/spec/models/spree/user_spec.rb"},{"name":"reporting #report_values_for when order purchases in other currencies exist lifetime_value returns a list of store lifetime values","suite":"Spree::LegacyUser at ./spec/models/spree/user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:1:6:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/user_spec.rb"},{"name":"reporting #report_values_for when order purchases in other currencies exist average_order_value with orders returns a list of average completed order prices for the user","suite":"Spree::LegacyUser at ./spec/models/spree/user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:1:6:1:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/user_spec.rb"},{"name":"#total_available_store_credit user does not have any associated store credits returns 0","suite":"Spree::LegacyUser at ./spec/models/spree/user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/user_spec.rb"},{"name":"#total_available_store_credit user has several associated store credits part of the store credit has been used part of the store credit has been authorized returns sum of amounts minus used amount and authorized amount","suite":"Spree::LegacyUser at ./spec/models/spree/user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:2:2:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/user_spec.rb"},{"name":"#total_available_store_credit user has several associated store credits part of the store credit has been used there are no authorized amounts on any of the store credits returns sum of amounts minus used amount","suite":"Spree::LegacyUser at ./spec/models/spree/user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:2:2:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/user_spec.rb"},{"name":"#total_available_store_credit user has several associated store credits store credits have never been used part of the store credit has been authorized returns sum of amounts minus authorized amount","suite":"Spree::LegacyUser at ./spec/models/spree/user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:2:2:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/user_spec.rb"},{"name":"#total_available_store_credit user has several associated store credits store credits have never been used there are no authorized amounts on any of the store credits returns sum of amounts","suite":"Spree::LegacyUser at ./spec/models/spree/user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:2:2:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/user_spec.rb"},{"name":"#total_available_store_credit user has several associated store credits all store credits have never been used or authorized returns sum of amounts","suite":"Spree::LegacyUser at ./spec/models/spree/user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:2:2:3:1\"}}","suiteSourceFile":"core/spec/models/spree/user_spec.rb"},{"name":"#available_store_credits user does not have any associated store credits returns empty array","suite":"Spree::LegacyUser at ./spec/models/spree/user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:3:1:1\"}}","suiteSourceFile":"core/spec/models/spree/user_spec.rb"},{"name":"#available_store_credits user has several associated store credits store credits have never been used returns store credit amount","suite":"Spree::LegacyUser at ./spec/models/spree/user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:3:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/user_spec.rb"},{"name":"#available_store_credits user has several associated store credits store credits in different currencies exits returns sum of amounts","suite":"Spree::LegacyUser at ./spec/models/spree/user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:3:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/user_spec.rb"},{"name":"address book has many addresses","suite":"Spree::LegacyUser at ./spec/models/spree/user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:4:1\"}}","suiteSourceFile":"core/spec/models/spree/user_spec.rb"},{"name":"validations #address_not_associated_with_other_user bill_address when default bill address does not belong to any user behaves like valid is valid","suite":"Spree::LegacyUser at ./spec/models/spree/user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:5:1:1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/user_spec.rb"},{"name":"validations #address_not_associated_with_other_user bill_address when default bill address belongs to user behaves like valid is valid","suite":"Spree::LegacyUser at ./spec/models/spree/user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:5:1:1:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/user_spec.rb"},{"name":"validations #address_not_associated_with_other_user bill_address when associated bill address belongs to other user assigns error to bill address","suite":"Spree::LegacyUser at ./spec/models/spree/user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:5:1:1:3:2\"}}","suiteSourceFile":"core/spec/models/spree/user_spec.rb"},{"name":"validations #address_not_associated_with_other_user bill_address when associated bill address belongs to other user behaves like invalid is invalid","suite":"Spree::LegacyUser at ./spec/models/spree/user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:5:1:1:3:1:1\"}}","suiteSourceFile":"core/spec/models/spree/user_spec.rb"},{"name":"validations #address_not_associated_with_other_user ship_address when default ship address does not belong to any user behaves like valid is valid","suite":"Spree::LegacyUser at ./spec/models/spree/user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:5:1:2:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/user_spec.rb"},{"name":"validations #address_not_associated_with_other_user ship_address when default ship address belongs to user behaves like valid is valid","suite":"Spree::LegacyUser at ./spec/models/spree/user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:5:1:2:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/user_spec.rb"},{"name":"validations #address_not_associated_with_other_user ship_address when associated ship address belongs to other user assigns error to ship address","suite":"Spree::LegacyUser at ./spec/models/spree/user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:5:1:2:3:2\"}}","suiteSourceFile":"core/spec/models/spree/user_spec.rb"},{"name":"validations #address_not_associated_with_other_user ship_address when associated ship address belongs to other user behaves like invalid is invalid","suite":"Spree::LegacyUser at ./spec/models/spree/user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:5:1:2:3:1:1\"}}","suiteSourceFile":"core/spec/models/spree/user_spec.rb"},{"name":"validations #address_not_deprecated_in_completed_order bill_address when default bill address is not associated to completed order behaves like valid is valid","suite":"Spree::LegacyUser at ./spec/models/spree/user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:5:2:1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/user_spec.rb"},{"name":"validations #address_not_deprecated_in_completed_order bill_address when default bill address is associated to uncompleted order behaves like valid is valid","suite":"Spree::LegacyUser at ./spec/models/spree/user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:5:2:1:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/user_spec.rb"},{"name":"validations #address_not_deprecated_in_completed_order bill_address when default bill address is associated to completed order when default bill address is the same as associated to order example at ./spec/models/spree/user_spec.rb:437","suite":"Spree::LegacyUser at ./spec/models/spree/user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:5:2:1:3:1:1\"}}","suiteSourceFile":"core/spec/models/spree/user_spec.rb"},{"name":"validations #address_not_deprecated_in_completed_order bill_address when default bill address is associated to completed order when default bill address is the same as associated to order behaves like valid is valid","suite":"Spree::LegacyUser at ./spec/models/spree/user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:5:2:1:3:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/user_spec.rb"},{"name":"validations #address_not_deprecated_in_completed_order bill_address when default bill address is associated to completed order when user changed bill address which was used in completed order so the old one is deprecated example at ./spec/models/spree/user_spec.rb:445","suite":"Spree::LegacyUser at ./spec/models/spree/user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:5:2:1:3:2:1\"}}","suiteSourceFile":"core/spec/models/spree/user_spec.rb"},{"name":"validations #address_not_deprecated_in_completed_order bill_address when default bill address is associated to completed order when user changed bill address which was used in completed order so the old one is deprecated assigns error to bill address","suite":"Spree::LegacyUser at ./spec/models/spree/user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:5:2:1:3:2:3\"}}","suiteSourceFile":"core/spec/models/spree/user_spec.rb"},{"name":"validations #address_not_deprecated_in_completed_order bill_address when default bill address is associated to completed order when user changed bill address which was used in completed order so the old one is deprecated behaves like invalid is invalid","suite":"Spree::LegacyUser at ./spec/models/spree/user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:5:2:1:3:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/user_spec.rb"},{"name":"validations #address_not_deprecated_in_completed_order ship_address when default ship address is not associated to completed order behaves like valid is valid","suite":"Spree::LegacyUser at ./spec/models/spree/user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:5:2:2:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/user_spec.rb"},{"name":"validations #address_not_deprecated_in_completed_order ship_address when default ship address is associated to uncompleted order behaves like valid is valid","suite":"Spree::LegacyUser at ./spec/models/spree/user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:5:2:2:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/user_spec.rb"},{"name":"validations #address_not_deprecated_in_completed_order ship_address when default ship address is associated to completed order when default ship address is the same as associated to order example at ./spec/models/spree/user_spec.rb:476","suite":"Spree::LegacyUser at ./spec/models/spree/user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:5:2:2:3:1:1\"}}","suiteSourceFile":"core/spec/models/spree/user_spec.rb"},{"name":"validations #address_not_deprecated_in_completed_order ship_address when default ship address is associated to completed order when default ship address is the same as associated to order behaves like valid is valid","suite":"Spree::LegacyUser at ./spec/models/spree/user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:5:2:2:3:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/user_spec.rb"},{"name":"validations #address_not_deprecated_in_completed_order ship_address when default ship address is associated to completed order when user changed ship address which was used in completed order so the old one is deprecated example at ./spec/models/spree/user_spec.rb:484","suite":"Spree::LegacyUser at ./spec/models/spree/user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:5:2:2:3:2:1\"}}","suiteSourceFile":"core/spec/models/spree/user_spec.rb"},{"name":"validations #address_not_deprecated_in_completed_order ship_address when default ship address is associated to completed order when user changed ship address which was used in completed order so the old one is deprecated assigns error to ship address","suite":"Spree::LegacyUser at ./spec/models/spree/user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:5:2:2:3:2:3\"}}","suiteSourceFile":"core/spec/models/spree/user_spec.rb"},{"name":"validations #address_not_deprecated_in_completed_order ship_address when default ship address is associated to completed order when user changed ship address which was used in completed order so the old one is deprecated behaves like invalid is invalid","suite":"Spree::LegacyUser at ./spec/models/spree/user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:5:2:2:3:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/user_spec.rb"},{"name":"#product_name_or_sku_cont returns variants based on products name","suite":"Variant scopes at ./spec/models/spree/variant/scopes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/variant/scopes_spec.rb"},{"name":"#product_name_or_sku_cont returns variants based on variant sku","suite":"Variant scopes at ./spec/models/spree/variant/scopes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/variant/scopes_spec.rb"},{"name":"#product_name_or_sku_cont does not return variants of products that do not match name","suite":"Variant scopes at ./spec/models/spree/variant/scopes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/models/spree/variant/scopes_spec.rb"},{"name":"#product_name_or_sku_cont does not return variants with not matching skus","suite":"Variant scopes at ./spec/models/spree/variant/scopes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","suiteSourceFile":"core/spec/models/spree/variant/scopes_spec.rb"},{"name":"#product_name_or_sku_cont returns multiple variants based on products name","suite":"Variant scopes at ./spec/models/spree/variant/scopes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","suiteSourceFile":"core/spec/models/spree/variant/scopes_spec.rb"},{"name":"#product_name_or_sku_cont return multiple variants based on variants sku","suite":"Variant scopes at ./spec/models/spree/variant/scopes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","suiteSourceFile":"core/spec/models/spree/variant/scopes_spec.rb"},{"name":"#product_name_or_sku_cont returns no variants when products name does not match any","suite":"Variant scopes at ./spec/models/spree/variant/scopes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7\"}}","suiteSourceFile":"core/spec/models/spree/variant/scopes_spec.rb"},{"name":"#product_name_or_sku_cont returns no variants when variants sku does not match any","suite":"Variant scopes at ./spec/models/spree/variant/scopes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8\"}}","suiteSourceFile":"core/spec/models/spree/variant/scopes_spec.rb"},{"name":"#product_name_or_sku_cont when using translations returns variants based on products translated name","suite":"Variant scopes at ./spec/models/spree/variant/scopes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:9:1\"}}","suiteSourceFile":"core/spec/models/spree/variant/scopes_spec.rb"},{"name":"#product_name_or_sku_cont when using translations does not return variants of products that do not match name","suite":"Variant scopes at ./spec/models/spree/variant/scopes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:9:2\"}}","suiteSourceFile":"core/spec/models/spree/variant/scopes_spec.rb"},{"name":"#search_by_product_name_or_sku returns variants based on products name","suite":"Variant scopes at ./spec/models/spree/variant/scopes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/variant/scopes_spec.rb"},{"name":"#search_by_product_name_or_sku returns variants based on variant sku","suite":"Variant scopes at ./spec/models/spree/variant/scopes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","suiteSourceFile":"core/spec/models/spree/variant/scopes_spec.rb"},{"name":"#search_by_product_name_or_sku does not return variants of products that do not match name","suite":"Variant scopes at ./spec/models/spree/variant/scopes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3\"}}","suiteSourceFile":"core/spec/models/spree/variant/scopes_spec.rb"},{"name":"#search_by_product_name_or_sku does not return variants with not matching skus","suite":"Variant scopes at ./spec/models/spree/variant/scopes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:4\"}}","suiteSourceFile":"core/spec/models/spree/variant/scopes_spec.rb"},{"name":"#search_by_product_name_or_sku returns multiple variants based on products name","suite":"Variant scopes at ./spec/models/spree/variant/scopes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:5\"}}","suiteSourceFile":"core/spec/models/spree/variant/scopes_spec.rb"},{"name":"#search_by_product_name_or_sku return multiple variants based on variants sku","suite":"Variant scopes at ./spec/models/spree/variant/scopes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:6\"}}","suiteSourceFile":"core/spec/models/spree/variant/scopes_spec.rb"},{"name":"#search_by_product_name_or_sku returns no variants when products name does not match any","suite":"Variant scopes at ./spec/models/spree/variant/scopes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:7\"}}","suiteSourceFile":"core/spec/models/spree/variant/scopes_spec.rb"},{"name":"#search_by_product_name_or_sku returns no variants when variants sku does not match any","suite":"Variant scopes at ./spec/models/spree/variant/scopes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:8\"}}","suiteSourceFile":"core/spec/models/spree/variant/scopes_spec.rb"},{"name":"behaves like default_price example at ./spec/support/concerns/default_price.rb:36","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"behaves like default_price .has_one :default_price is a has one association","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"behaves like default_price .has_one :default_price has a dependent destroy","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"behaves like default_price .has_one :default_price has the class name of Spree::Price","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"behaves like default_price #default_price example at ./spec/support/concerns/default_price.rb:23","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"behaves like default_price #default_price delegates price","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"behaves like default_price #default_price delegates price_including_vat_for","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:3\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:4","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:5","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:7","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:8","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:4\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:10","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:5\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:11","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:6\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"behaves like metadata reads data as symbolized keys","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:7\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"behaves like metadata reads data as not symbolized keys","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:8\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"behaves like metadata can query records by metadata properties","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:10\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"behaves like lifecycle events lifecycle events variant.created publishes created event when record is created","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"behaves like lifecycle events lifecycle events variant.updated publishes updated event when record is updated","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"behaves like lifecycle events lifecycle events variant.deleted publishes deleted event when record is deleted","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"sorting responds to set_list_position","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"validations validates price is greater than 0","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"validations validates price is 0","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"validations validates the dimensions unit","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:4\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"validations validates the weight unit","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:5\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"validations SKU normalizes strips leading and trailing whitespace","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3:1:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"validations SKU normalizes preserves empty string (does not convert to nil)","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3:1:2\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"validations SKU default behaviour invalid with the same SKU","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"validations SKU default behaviour valid with different SKU","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"validations SKU default behaviour valid without SKU","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3:2:2:2\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"validations SKU disabled validation valid with the same SKU","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3:3:1:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"validations SKU disabled validation valid without SKU","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3:3:1:2\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"after create propagate to stock items","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"after create stock location has disable propagate all variants propagate to stock items","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"after create mark_master_out_of_stock when product is created without variants but with stock example at ./spec/models/spree/variant_spec.rb:137","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:3:1:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"after create mark_master_out_of_stock when a variant is created example at ./spec/models/spree/variant_spec.rb:143","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:3:2:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"after create #create_default_stock_item when not tracking inventory creates a default stock item","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:4:1:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"after create #create_default_stock_item when not tracking inventory when variant is created along with a stock item does not create an another stock item","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:4:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"after create #create_default_stock_item when tracking inventory does not create a default stock item","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:4:2:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"after create #create_default_stock_item existing variant creates a default stock item","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:4:3:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"after_update_commit :handle_track_inventory_change when not tracking inventory updates stock item count on hand to 0","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"after_update_commit :handle_track_inventory_change when tracking inventory keeps stock items","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"after_commit :remove_prices_from_master_variant removes prices from master when variant with price is created","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"after_commit :remove_stock_items_from_master_variant removes stock items from master when variant is created","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"scope .eligible when only master variants returns all of them","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"scope .eligible when product has more than 1 variant filters master variant out","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"scope .not_discontinued when discontinued example at ./spec/models/spree/variant_spec.rb:291","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"scope .not_discontinued when not discontinued example at ./spec/models/spree/variant_spec.rb:297","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"scope .not_discontinued when discontinue_on not present example at ./spec/models/spree/variant_spec.rb:303","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:2:3:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"scope .not_deleted when deleted example at ./spec/models/spree/variant_spec.rb:311","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:3:1:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"scope .not_deleted when not deleted example at ./spec/models/spree/variant_spec.rb:317","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:3:2:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"scope .for_currency_and_available_price_amount when price with currency present when price has amount example at ./spec/models/spree/variant_spec.rb:328","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:4:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"scope .for_currency_and_available_price_amount when price with currency present when price do not have amount example at ./spec/models/spree/variant_spec.rb:338","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:4:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"scope .for_currency_and_available_price_amount when price with currency not present when price has amount example at ./spec/models/spree/variant_spec.rb:348","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:4:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"scope .for_currency_and_available_price_amount when price with currency not present when price do not have amount example at ./spec/models/spree/variant_spec.rb:358","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:4:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"scope .for_currency_and_available_price_amount when currency parameter is nil example at ./spec/models/spree/variant_spec.rb:367","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:4:3:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"scope .active finds not_discontinued variants","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:5:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"scope .active finds not_deleted variants","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:5:2\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"scope .active finds variants for_currency_and_available_price_amount","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:5:3\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"scope .active example at ./spec/models/spree/variant_spec.rb:396","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:5:4\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"product has other variants option value accessors sets option value","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"product has other variants option value accessors does not duplicate associated option values when set multiple times","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1:2\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"product has other variants product has other variants option value accessors sets option value","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"product has other variants product has other variants option value accessors does not duplicate associated option values when set multiple times","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2:1:2\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"#cost_price= uses LocalizedNumber.parse","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"#in_stock_or_backorderable? when variant has no stock items example at ./spec/models/spree/variant_spec.rb:482","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:1:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"#in_stock_or_backorderable? when variant has stock items when variant stock items count_on_hand > 0 example at ./spec/models/spree/variant_spec.rb:493","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"#in_stock_or_backorderable? when variant has stock items when variant stock items count_on_hand <= 0 example at ./spec/models/spree/variant_spec.rb:499","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"#in_stock_or_backorderable? when variant has stock items when variant stock items count_on_hand <= 0 when variant track_inventory = false example at ./spec/models/spree/variant_spec.rb:504","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:2:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"#in_stock_or_backorderable? when variant has stock items when variant stock items count_on_hand <= 0 when variant track_inventory = true example at ./spec/models/spree/variant_spec.rb:508","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:2:2:3:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"#in_stock_or_backorderable? when variant has stock items when variant stock items count_on_hand <= 0 when variant track_inventory = true with some variant stock item having backorderable = true example at ./spec/models/spree/variant_spec.rb:513","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:2:2:3:2:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"#price= uses LocalizedNumber.parse","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"#weight= uses LocalizedNumber.parse","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"#currency returns the globally configured currency","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"#display_amount returns a Spree::Money","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:17:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"#cost_currency when cost currency is nil populates cost currency with the default value on save","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:1:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"#price_in when currency is not specified returns 0","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:1:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"#price_in when currency is EUR returns the value in the EUR","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:2:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"#price_in when currency is USD returns the value in the USD","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:3:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"#price_in when there is no price with present amount in given currency returns 0","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:4:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"#price_in when price exists in a price list does not return price list price","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:5:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"#price_in when price exists in a price list when base price also exists returns the base price, not the price list price","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:5:2:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"#set_price creates a base price for the currency","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:20:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"#set_price updates existing base price","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:20:2\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"#set_price does not update price list price","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:20:3\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"#set_price sets compare_at_amount when provided","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:20:4\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"#on_sale? when existing currency is passed checks if variant is discounted in that currency","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:21:1:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"#on_sale? when existing currency is passed when variant is discounted returns true","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:21:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"#on_sale? when existing currency is passed when variant is not discounted returns false","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:21:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"#on_sale? when passed currency does not exist returns false","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:21:2:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":".amount_in when currency is not specified returns nil","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:22:1:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":".amount_in when currency is EUR returns the value in the EUR","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:22:2:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":".amount_in when currency is USD returns the value in the USD","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:22:3:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"#options returns an array of hashes with option type name, value, and presentation orderd by option type position","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:23:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"#options_text when the variant has no option values returns an empty string","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:24:1:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"#options_text when the variant has option values returns the options text of the variant","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:24:2:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"exchange_name master variant returns name","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:25:1:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"exchange_name variant returns options text","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:25:2:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"exchange_name master variant returns name","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:26:1:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"exchange_name variant returns options text","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:26:2:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"descriptive_name master variant returns name with Master identifier","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:27:1:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"descriptive_name variant returns options text with name","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:27:2:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"set_position sets variant position after creation","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:28:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"#in_stock? when stock_items are not backorderable when stock_items in stock returns true if stock_items in stock","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"#in_stock? when stock_items are not backorderable when stock_items out of stock return false if stock_items out of stock","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"#in_stock? #can_supply? calls out to quantifier","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:2:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"#in_stock? when stock_items are backorderable when stock_items out of stock in_stock? returns false","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:3:1:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"#in_stock? when stock_items are backorderable when stock_items out of stock can_supply? return true","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:3:1:2\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"#is_backorderable invokes Spree::Stock::Quantifier","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:30:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"#purchasable? when stock_items are not backorderable when stock_items in stock returns true if stock_items in stock","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:31:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"#purchasable? when stock_items are not backorderable when stock_items out of stock return false if stock_items out of stock","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:31:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"#purchasable? when stock_items are out of stock when stock item are backorderable returns true if stock_items are backorderable","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:31:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"#purchasable? when stock_items are out of stock when stock_items are not backorderable return false if stock_items are not backorderable","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:31:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"#total_on_hand is infinite if track_inventory_levels is false","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:32:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"#total_on_hand matches quantifier total_on_hand","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:32:2\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"#tax_category when tax_category is nil returns the parent products tax_category","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:33:1:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"#tax_category when tax_category is set returns the tax_category set on itself","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:33:2:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"#tax_category when tax category is deleted returns the parent products tax_category","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:33:3:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"#tax_category when tax category is deleted also in product with default tax category returns the default tax category","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:33:4:1:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"#tax_category when tax category is deleted also in product without default tax category returns nil","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:33:4:2:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"touching updates a product","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:34:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"touching clears the in_stock cache key","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:34:2\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"touching when unlinking an option value touches variant","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:34:3:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"#should_track_inventory? does not track inventory when global setting is off","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:35:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"#should_track_inventory? does not track inventory when variant is turned off","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:35:2\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"#should_track_inventory? tracks inventory when global and variant are on","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:35:3\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"deleted_at scope has a price if deleted","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:36:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"stock movements builds out collection just fine through stock items","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:37:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"in_stock scope returns all in stock variants","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:38:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"#volume is zero if any dimension parameter is zero","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:39:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"#volume return the volume if the dimension parameters are different of zero","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:39:2\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"#dimension return the dimension if the dimension parameters are different of zero","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:40:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"#discontinue! sets the discontinued","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:41:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"#discontinue! changes updated_at","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:41:2\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"#discontinued? is false","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:42:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"#discontinued? is true","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:42:2\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"#available? when discontinued when product is available example at ./spec/models/spree/variant_spec.rb:1220","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:43:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"#available? when discontinued when product is not available example at ./spec/models/spree/variant_spec.rb:1228","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:43:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"#available? when not discontinued when product is available example at ./spec/models/spree/variant_spec.rb:1242","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:43:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"#available? when not discontinued when product is not available example at ./spec/models/spree/variant_spec.rb:1250","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:43:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"validate :check_price when variant has a default price keeps the default price","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:44:1:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"validate :check_price when variant has a default price when the default price is invalid infers price from the default variant","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:44:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"validate :check_price when variant has a default price when the default price is invalid when there is no default variant adds an error","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:44:1:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"validate :check_price when variant has no default price infers price from the default variant","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:44:2:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"validate :check_price when variant has no default price when there is no default variant adds an error","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:44:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"validate :check_price when variant has prices keeps the prices","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:44:3:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"#created_at creates variant with created_at timestamp","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:45:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"#updated_at creates variant with updated_at timestamp","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:46:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"#backordered? returns true when out of stock and backorderable","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:47:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"#backordered? returns false when out of stock and not backorderable","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:47:2\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"#backordered? returns false when there is available item in stock","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:47:3\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"#ensure_not_in_complete_orders adds error on variant destroy","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:48:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"#remove_line_items_from_incomplete_orders schedules RemoveFromIncompleteOrdersJob","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:49:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"#remove_line_items_from_incomplete_orders deletes the line items from the order","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:49:2\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"#default_image when variant has images returns the first image","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:50:1:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"#default_image when variant has no images falls back to product default image","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:50:2:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"#primary_image returns the first image","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:51:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"#secondary_image returns the second image","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:52:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"#additional_images returns all images except the default","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:53:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"#has_images? when variant has no images returns false","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:54:1:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"#has_images? when variant has images returns true","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:54:2:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"#has_images? when images are preloaded uses loaded association","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:54:3:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"#has_images? when images are preloaded but empty returns false","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:54:4:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"counter cache variant_count on product increments when a variant is created","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:55:1:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"counter cache variant_count on product decrements when a variant is destroyed","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:55:1:2\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"counter cache variant_count on product does not count master variant","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:55:1:3\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"counter cache variant_count on product correctly counts multiple variants","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:55:1:4\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"scopes .successful returns only successful deliveries","suite":"Spree::WebhookDelivery at ./spec/models/spree/webhook_delivery_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/webhook_delivery_spec.rb"},{"name":"scopes .failed returns only failed deliveries","suite":"Spree::WebhookDelivery at ./spec/models/spree/webhook_delivery_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/webhook_delivery_spec.rb"},{"name":"scopes .pending returns only pending deliveries","suite":"Spree::WebhookDelivery at ./spec/models/spree/webhook_delivery_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/webhook_delivery_spec.rb"},{"name":"scopes .recent orders by created_at desc","suite":"Spree::WebhookDelivery at ./spec/models/spree/webhook_delivery_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/webhook_delivery_spec.rb"},{"name":"scopes .for_event returns deliveries for the specified event","suite":"Spree::WebhookDelivery at ./spec/models/spree/webhook_delivery_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5:1\"}}","suiteSourceFile":"core/spec/models/spree/webhook_delivery_spec.rb"},{"name":"#successful? returns true when success is true","suite":"Spree::WebhookDelivery at ./spec/models/spree/webhook_delivery_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/webhook_delivery_spec.rb"},{"name":"#successful? returns false when success is false","suite":"Spree::WebhookDelivery at ./spec/models/spree/webhook_delivery_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","suiteSourceFile":"core/spec/models/spree/webhook_delivery_spec.rb"},{"name":"#successful? returns false when success is nil","suite":"Spree::WebhookDelivery at ./spec/models/spree/webhook_delivery_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3\"}}","suiteSourceFile":"core/spec/models/spree/webhook_delivery_spec.rb"},{"name":"#failed? returns true when success is false","suite":"Spree::WebhookDelivery at ./spec/models/spree/webhook_delivery_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/webhook_delivery_spec.rb"},{"name":"#failed? returns false when success is true","suite":"Spree::WebhookDelivery at ./spec/models/spree/webhook_delivery_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","suiteSourceFile":"core/spec/models/spree/webhook_delivery_spec.rb"},{"name":"#failed? returns false when success is nil","suite":"Spree::WebhookDelivery at ./spec/models/spree/webhook_delivery_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3\"}}","suiteSourceFile":"core/spec/models/spree/webhook_delivery_spec.rb"},{"name":"#pending? returns true when delivered_at is nil","suite":"Spree::WebhookDelivery at ./spec/models/spree/webhook_delivery_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/webhook_delivery_spec.rb"},{"name":"#pending? returns false when delivered_at is present","suite":"Spree::WebhookDelivery at ./spec/models/spree/webhook_delivery_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2\"}}","suiteSourceFile":"core/spec/models/spree/webhook_delivery_spec.rb"},{"name":"#complete! with successful HTTP response marks the delivery as successful","suite":"Spree::WebhookDelivery at ./spec/models/spree/webhook_delivery_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:1\"}}","suiteSourceFile":"core/spec/models/spree/webhook_delivery_spec.rb"},{"name":"#complete! with successful HTTP response marks 201 as successful","suite":"Spree::WebhookDelivery at ./spec/models/spree/webhook_delivery_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:2\"}}","suiteSourceFile":"core/spec/models/spree/webhook_delivery_spec.rb"},{"name":"#complete! with successful HTTP response marks 204 as successful","suite":"Spree::WebhookDelivery at ./spec/models/spree/webhook_delivery_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:3\"}}","suiteSourceFile":"core/spec/models/spree/webhook_delivery_spec.rb"},{"name":"#complete! with failed HTTP response marks the delivery as failed for 4xx responses","suite":"Spree::WebhookDelivery at ./spec/models/spree/webhook_delivery_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1\"}}","suiteSourceFile":"core/spec/models/spree/webhook_delivery_spec.rb"},{"name":"#complete! with failed HTTP response marks the delivery as failed for 5xx responses","suite":"Spree::WebhookDelivery at ./spec/models/spree/webhook_delivery_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:2\"}}","suiteSourceFile":"core/spec/models/spree/webhook_delivery_spec.rb"},{"name":"#complete! with timeout error records the timeout error","suite":"Spree::WebhookDelivery at ./spec/models/spree/webhook_delivery_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3:1\"}}","suiteSourceFile":"core/spec/models/spree/webhook_delivery_spec.rb"},{"name":"#complete! with connection error records the connection error","suite":"Spree::WebhookDelivery at ./spec/models/spree/webhook_delivery_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:4:1\"}}","suiteSourceFile":"core/spec/models/spree/webhook_delivery_spec.rb"},{"name":"validations url format accepts valid https urls","suite":"Spree::WebhookEndpoint at ./spec/models/spree/webhook_endpoint_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/webhook_endpoint_spec.rb"},{"name":"validations url format accepts valid http urls","suite":"Spree::WebhookEndpoint at ./spec/models/spree/webhook_endpoint_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/webhook_endpoint_spec.rb"},{"name":"validations url format rejects invalid urls","suite":"Spree::WebhookEndpoint at ./spec/models/spree/webhook_endpoint_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3\"}}","suiteSourceFile":"core/spec/models/spree/webhook_endpoint_spec.rb"},{"name":"validations url format rejects ftp urls","suite":"Spree::WebhookEndpoint at ./spec/models/spree/webhook_endpoint_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:4\"}}","suiteSourceFile":"core/spec/models/spree/webhook_endpoint_spec.rb"},{"name":"validations active inclusion accepts true","suite":"Spree::WebhookEndpoint at ./spec/models/spree/webhook_endpoint_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/webhook_endpoint_spec.rb"},{"name":"validations active inclusion accepts false","suite":"Spree::WebhookEndpoint at ./spec/models/spree/webhook_endpoint_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2\"}}","suiteSourceFile":"core/spec/models/spree/webhook_endpoint_spec.rb"},{"name":"validations active inclusion rejects nil","suite":"Spree::WebhookEndpoint at ./spec/models/spree/webhook_endpoint_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:3\"}}","suiteSourceFile":"core/spec/models/spree/webhook_endpoint_spec.rb"},{"name":"scopes .active returns only active endpoints","suite":"Spree::WebhookEndpoint at ./spec/models/spree/webhook_endpoint_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/webhook_endpoint_spec.rb"},{"name":"scopes .inactive returns only inactive endpoints","suite":"Spree::WebhookEndpoint at ./spec/models/spree/webhook_endpoint_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/webhook_endpoint_spec.rb"},{"name":"callbacks before_create :generate_secret_key generates a secret key on create","suite":"Spree::WebhookEndpoint at ./spec/models/spree/webhook_endpoint_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","suiteSourceFile":"core/spec/models/spree/webhook_endpoint_spec.rb"},{"name":"callbacks before_create :generate_secret_key does not overwrite existing secret key","suite":"Spree::WebhookEndpoint at ./spec/models/spree/webhook_endpoint_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:2\"}}","suiteSourceFile":"core/spec/models/spree/webhook_endpoint_spec.rb"},{"name":"#subscribed_to? with empty subscriptions returns true for any event","suite":"Spree::WebhookEndpoint at ./spec/models/spree/webhook_endpoint_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1\"}}","suiteSourceFile":"core/spec/models/spree/webhook_endpoint_spec.rb"},{"name":"#subscribed_to? with wildcard subscription returns true for any event","suite":"Spree::WebhookEndpoint at ./spec/models/spree/webhook_endpoint_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1\"}}","suiteSourceFile":"core/spec/models/spree/webhook_endpoint_spec.rb"},{"name":"#subscribed_to? with specific subscriptions returns true for subscribed events","suite":"Spree::WebhookEndpoint at ./spec/models/spree/webhook_endpoint_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3:1\"}}","suiteSourceFile":"core/spec/models/spree/webhook_endpoint_spec.rb"},{"name":"#subscribed_to? with specific subscriptions returns false for non-subscribed events","suite":"Spree::WebhookEndpoint at ./spec/models/spree/webhook_endpoint_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3:2\"}}","suiteSourceFile":"core/spec/models/spree/webhook_endpoint_spec.rb"},{"name":"#subscribed_to? with pattern subscriptions matches events that fit the pattern","suite":"Spree::WebhookEndpoint at ./spec/models/spree/webhook_endpoint_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:4:1\"}}","suiteSourceFile":"core/spec/models/spree/webhook_endpoint_spec.rb"},{"name":"#subscribed_to? with pattern subscriptions does not match events outside the pattern","suite":"Spree::WebhookEndpoint at ./spec/models/spree/webhook_endpoint_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:4:2\"}}","suiteSourceFile":"core/spec/models/spree/webhook_endpoint_spec.rb"},{"name":"#subscribed_to? with mixed subscriptions matches pattern events","suite":"Spree::WebhookEndpoint at ./spec/models/spree/webhook_endpoint_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:5:1\"}}","suiteSourceFile":"core/spec/models/spree/webhook_endpoint_spec.rb"},{"name":"#subscribed_to? with mixed subscriptions matches exact events","suite":"Spree::WebhookEndpoint at ./spec/models/spree/webhook_endpoint_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:5:2\"}}","suiteSourceFile":"core/spec/models/spree/webhook_endpoint_spec.rb"},{"name":"#subscribed_to? with mixed subscriptions does not match non-subscribed events","suite":"Spree::WebhookEndpoint at ./spec/models/spree/webhook_endpoint_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:5:3\"}}","suiteSourceFile":"core/spec/models/spree/webhook_endpoint_spec.rb"},{"name":"#subscribed_events with empty subscriptions returns wildcard","suite":"Spree::WebhookEndpoint at ./spec/models/spree/webhook_endpoint_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:1\"}}","suiteSourceFile":"core/spec/models/spree/webhook_endpoint_spec.rb"},{"name":"#subscribed_events with specific subscriptions returns the subscriptions","suite":"Spree::WebhookEndpoint at ./spec/models/spree/webhook_endpoint_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1\"}}","suiteSourceFile":"core/spec/models/spree/webhook_endpoint_spec.rb"},{"name":"soft delete soft deletes the record","suite":"Spree::WebhookEndpoint at ./spec/models/spree/webhook_endpoint_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","suiteSourceFile":"core/spec/models/spree/webhook_endpoint_spec.rb"},{"name":"behaves like lifecycle events lifecycle events wished_item.created publishes created event when record is created","suite":"Spree::WishedItem at ./spec/models/spree/wished_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/wished_item_spec.rb"},{"name":"behaves like lifecycle events lifecycle events wished_item.updated publishes updated event when record is updated","suite":"Spree::WishedItem at ./spec/models/spree/wished_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/wished_item_spec.rb"},{"name":"behaves like lifecycle events lifecycle events wished_item.deleted publishes deleted event when record is deleted","suite":"Spree::WishedItem at ./spec/models/spree/wished_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/wished_item_spec.rb"},{"name":".quantity example at ./spec/models/spree/wished_item_spec.rb:13","suite":"Spree::WishedItem at ./spec/models/spree/wished_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/wished_item_spec.rb"},{"name":".quantity example at ./spec/models/spree/wished_item_spec.rb:14","suite":"Spree::WishedItem at ./spec/models/spree/wished_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","suiteSourceFile":"core/spec/models/spree/wished_item_spec.rb"},{"name":".quantity validates presence of wishlist","suite":"Spree::WishedItem at ./spec/models/spree/wished_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3\"}}","suiteSourceFile":"core/spec/models/spree/wished_item_spec.rb"},{"name":".quantity validates presence of variant","suite":"Spree::WishedItem at ./spec/models/spree/wished_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:4\"}}","suiteSourceFile":"core/spec/models/spree/wished_item_spec.rb"},{"name":".quantity validates numericality of quantity","suite":"Spree::WishedItem at ./spec/models/spree/wished_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:5\"}}","suiteSourceFile":"core/spec/models/spree/wished_item_spec.rb"},{"name":".quantity validates numericality must be greater than 0","suite":"Spree::WishedItem at ./spec/models/spree/wished_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:6\"}}","suiteSourceFile":"core/spec/models/spree/wished_item_spec.rb"},{"name":".quantity when wished_item is already associated with the wishlist validates uniqueness of variant within scope of wishlist","suite":"Spree::WishedItem at ./spec/models/spree/wished_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:7:1\"}}","suiteSourceFile":"core/spec/models/spree/wished_item_spec.rb"},{"name":".quantity .price example at ./spec/models/spree/wished_item_spec.rb:44","suite":"Spree::WishedItem at ./spec/models/spree/wished_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:8:1\"}}","suiteSourceFile":"core/spec/models/spree/wished_item_spec.rb"},{"name":".quantity .total example at ./spec/models/spree/wished_item_spec.rb:48","suite":"Spree::WishedItem at ./spec/models/spree/wished_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:9:1\"}}","suiteSourceFile":"core/spec/models/spree/wished_item_spec.rb"},{"name":".quantity .display_price example at ./spec/models/spree/wished_item_spec.rb:52","suite":"Spree::WishedItem at ./spec/models/spree/wished_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:10:1\"}}","suiteSourceFile":"core/spec/models/spree/wished_item_spec.rb"},{"name":".quantity .display_total example at ./spec/models/spree/wished_item_spec.rb:56","suite":"Spree::WishedItem at ./spec/models/spree/wished_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:11:1\"}}","suiteSourceFile":"core/spec/models/spree/wished_item_spec.rb"},{"name":"has a valid factory","suite":"Spree::Wishlist at ./spec/models/spree/wishlist_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2\"}}","suiteSourceFile":"core/spec/models/spree/wishlist_spec.rb"},{"name":"validates presence of name","suite":"Spree::Wishlist at ./spec/models/spree/wishlist_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3\"}}","suiteSourceFile":"core/spec/models/spree/wishlist_spec.rb"},{"name":"validates presence of store","suite":"Spree::Wishlist at ./spec/models/spree/wishlist_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4\"}}","suiteSourceFile":"core/spec/models/spree/wishlist_spec.rb"},{"name":"validates presence of user","suite":"Spree::Wishlist at ./spec/models/spree/wishlist_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5\"}}","suiteSourceFile":"core/spec/models/spree/wishlist_spec.rb"},{"name":"lifecycle events wishlist.created publishes created event when record is created","suite":"Spree::Wishlist at ./spec/models/spree/wishlist_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/wishlist_spec.rb"},{"name":"lifecycle events wishlist.updated publishes updated event when record is updated","suite":"Spree::Wishlist at ./spec/models/spree/wishlist_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/wishlist_spec.rb"},{"name":"lifecycle events wishlist.deleted publishes deleted event when record is destroyed","suite":"Spree::Wishlist at ./spec/models/spree/wishlist_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/wishlist_spec.rb"},{"name":".ensure_default_exists_and_is_unique when user creates a new default store preserves is_default: true for new wishlist","suite":"Spree::Wishlist at ./spec/models/spree/wishlist_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1:1\"}}","suiteSourceFile":"core/spec/models/spree/wishlist_spec.rb"},{"name":".ensure_default_exists_and_is_unique when user creates a new default store sets is_default: false on the wishlist that was the previous default","suite":"Spree::Wishlist at ./spec/models/spree/wishlist_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1:2\"}}","suiteSourceFile":"core/spec/models/spree/wishlist_spec.rb"},{"name":".ensure_default_exists_and_is_unique when user creates a new default store does not alter the state of wishlist belonging to other users","suite":"Spree::Wishlist at ./spec/models/spree/wishlist_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1:3\"}}","suiteSourceFile":"core/spec/models/spree/wishlist_spec.rb"},{"name":".ensure_default_exists_and_is_unique when user creates a new default store does not alter the state of wishlist belonging to same users, but in other stores","suite":"Spree::Wishlist at ./spec/models/spree/wishlist_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1:4\"}}","suiteSourceFile":"core/spec/models/spree/wishlist_spec.rb"},{"name":".include? is true if the wishlist includes the specified variant","suite":"Spree::Wishlist at ./spec/models/spree/wishlist_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","suiteSourceFile":"core/spec/models/spree/wishlist_spec.rb"},{"name":".to_param returns the wishlists token","suite":"Spree::Wishlist at ./spec/models/spree/wishlist_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1\"}}","suiteSourceFile":"core/spec/models/spree/wishlist_spec.rb"},{"name":".get_by_param returns the wishlist of the token","suite":"Spree::Wishlist at ./spec/models/spree/wishlist_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1\"}}","suiteSourceFile":"core/spec/models/spree/wishlist_spec.rb"},{"name":".get_by_param returns nil when not found","suite":"Spree::Wishlist at ./spec/models/spree/wishlist_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:2\"}}","suiteSourceFile":"core/spec/models/spree/wishlist_spec.rb"},{"name":"#destroy deletes associated wished variants","suite":"Spree::Wishlist at ./spec/models/spree/wishlist_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1\"}}","suiteSourceFile":"core/spec/models/spree/wishlist_spec.rb"},{"name":"#product_ids returns the product ids","suite":"Spree::Wishlist at ./spec/models/spree/wishlist_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1\"}}","suiteSourceFile":"core/spec/models/spree/wishlist_spec.rb"},{"name":"#wished_items_count returns the wished items count","suite":"Spree::Wishlist at ./spec/models/spree/wishlist_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:1\"}}","suiteSourceFile":"core/spec/models/spree/wishlist_spec.rb"},{"name":"#variant_ids returns the variant ids","suite":"Spree::Wishlist at ./spec/models/spree/wishlist_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:1\"}}","suiteSourceFile":"core/spec/models/spree/wishlist_spec.rb"},{"name":"scopes .defunct_without_kind zoneable is present and is of defunct kind example at ./spec/models/spree/zone_member_spec.rb:14","suite":"Spree::ZoneMember at ./spec/models/spree/zone_member_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/zone_member_spec.rb"},{"name":"scopes .defunct_without_kind zoneable is not of defunct kind example at ./spec/models/spree/zone_member_spec.rb:20","suite":"Spree::ZoneMember at ./spec/models/spree/zone_member_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/zone_member_spec.rb"},{"name":"scopes .defunct_without_kind zoneable is absent example at ./spec/models/spree/zone_member_spec.rb:26","suite":"Spree::ZoneMember at ./spec/models/spree/zone_member_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/zone_member_spec.rb"},{"name":"#match scopes .remove_previous_default is expected to include zone with default tax","suite":"Spree::Zone at ./spec/models/spree/zone_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/zone_spec.rb"},{"name":"#match scopes .remove_previous_default is expected to not include zone with default tax","suite":"Spree::Zone at ./spec/models/spree/zone_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/zone_spec.rb"},{"name":"#match callbacks #remove_previous_default is expected to make previous default tax zones to non default tax zones","suite":"Spree::Zone at ./spec/models/spree/zone_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/zone_spec.rb"},{"name":"#match callbacks #nullify_checkout_zone is expected to nullify checkout zone","suite":"Spree::Zone at ./spec/models/spree/zone_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/zone_spec.rb"},{"name":"#match when there is only one qualifying zone returns the qualifying zone","suite":"Spree::Zone at ./spec/models/spree/zone_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/zone_spec.rb"},{"name":"#match when there are two qualified zones with same member type when both zones have the same number of members returns the zone that was created first","suite":"Spree::Zone at ./spec/models/spree/zone_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1:1\"}}","suiteSourceFile":"core/spec/models/spree/zone_spec.rb"},{"name":"#match when there are two qualified zones with same member type when one of the zones has fewer members returns the zone with fewer members","suite":"Spree::Zone at ./spec/models/spree/zone_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:2:1\"}}","suiteSourceFile":"core/spec/models/spree/zone_spec.rb"},{"name":"#match when there are two qualified zones with different member types returns the zone with the more specific member type","suite":"Spree::Zone at ./spec/models/spree/zone_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5:1\"}}","suiteSourceFile":"core/spec/models/spree/zone_spec.rb"},{"name":"#match when there are no qualifying zones returns nil","suite":"Spree::Zone at ./spec/models/spree/zone_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6:1\"}}","suiteSourceFile":"core/spec/models/spree/zone_spec.rb"},{"name":"#country_list when zone consists of countries returns a list of countries","suite":"Spree::Zone at ./spec/models/spree/zone_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/zone_spec.rb"},{"name":"#country_list when zone consists of states returns a list of countries","suite":"Spree::Zone at ./spec/models/spree/zone_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/zone_spec.rb"},{"name":"#include? when zone is country type is true","suite":"Spree::Zone at ./spec/models/spree/zone_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","suiteSourceFile":"core/spec/models/spree/zone_spec.rb"},{"name":"#include? when zone is state type is true","suite":"Spree::Zone at ./spec/models/spree/zone_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","suiteSourceFile":"core/spec/models/spree/zone_spec.rb"},{"name":".default_tax when there is a default tax zone specified is the correct zone","suite":"Spree::Zone at ./spec/models/spree/zone_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1\"}}","suiteSourceFile":"core/spec/models/spree/zone_spec.rb"},{"name":".default_tax when there is no default tax zone specified is nil","suite":"Spree::Zone at ./spec/models/spree/zone_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1\"}}","suiteSourceFile":"core/spec/models/spree/zone_spec.rb"},{"name":"#contains? when the target has no members is false","suite":"Spree::Zone at ./spec/models/spree/zone_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:1\"}}","suiteSourceFile":"core/spec/models/spree/zone_spec.rb"},{"name":"#contains? when the source has no members is false","suite":"Spree::Zone at ./spec/models/spree/zone_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1\"}}","suiteSourceFile":"core/spec/models/spree/zone_spec.rb"},{"name":"#contains? when both zones are the same zone is true","suite":"Spree::Zone at ./spec/models/spree/zone_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3:1\"}}","suiteSourceFile":"core/spec/models/spree/zone_spec.rb"},{"name":"#contains? when checking countries against countries when all members are included in the zone we check against is true","suite":"Spree::Zone at ./spec/models/spree/zone_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:4:1:1\"}}","suiteSourceFile":"core/spec/models/spree/zone_spec.rb"},{"name":"#contains? when checking countries against countries when some members are included in the zone we check against is false","suite":"Spree::Zone at ./spec/models/spree/zone_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:4:2:1\"}}","suiteSourceFile":"core/spec/models/spree/zone_spec.rb"},{"name":"#contains? when checking countries against countries when none of the members are included in the zone we check against is false","suite":"Spree::Zone at ./spec/models/spree/zone_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:4:3:1\"}}","suiteSourceFile":"core/spec/models/spree/zone_spec.rb"},{"name":"#contains? when checking states against states when all members are included in the zone we check against is true","suite":"Spree::Zone at ./spec/models/spree/zone_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:5:1:1\"}}","suiteSourceFile":"core/spec/models/spree/zone_spec.rb"},{"name":"#contains? when checking states against states when some members are included in the zone we check against is false","suite":"Spree::Zone at ./spec/models/spree/zone_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:5:2:1\"}}","suiteSourceFile":"core/spec/models/spree/zone_spec.rb"},{"name":"#contains? when checking states against states when none of the members are included in the zone we check against is false","suite":"Spree::Zone at ./spec/models/spree/zone_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:5:3:1\"}}","suiteSourceFile":"core/spec/models/spree/zone_spec.rb"},{"name":"#contains? when checking country against state is false","suite":"Spree::Zone at ./spec/models/spree/zone_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:6:1\"}}","suiteSourceFile":"core/spec/models/spree/zone_spec.rb"},{"name":"#contains? when checking state against country when all states contained in one of the countries we check against is true","suite":"Spree::Zone at ./spec/models/spree/zone_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:7:1:1\"}}","suiteSourceFile":"core/spec/models/spree/zone_spec.rb"},{"name":"#contains? when checking state against country when some states contained in one of the countries we check against is false","suite":"Spree::Zone at ./spec/models/spree/zone_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:7:2:1\"}}","suiteSourceFile":"core/spec/models/spree/zone_spec.rb"},{"name":"#contains? when checking state against country when none of the states contained in any of the countries we check against is false","suite":"Spree::Zone at ./spec/models/spree/zone_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:7:3:1\"}}","suiteSourceFile":"core/spec/models/spree/zone_spec.rb"},{"name":"#save when default_tax is true clears previous default tax zone","suite":"Spree::Zone at ./spec/models/spree/zone_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1:1\"}}","suiteSourceFile":"core/spec/models/spree/zone_spec.rb"},{"name":"#save when a zone member country is added to an existing zone consisting of state members removes existing country members","suite":"Spree::Zone at ./spec/models/spree/zone_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2:1\"}}","suiteSourceFile":"core/spec/models/spree/zone_spec.rb"},{"name":"#kind returns whatever value you set","suite":"Spree::Zone at ./spec/models/spree/zone_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","suiteSourceFile":"core/spec/models/spree/zone_spec.rb"},{"name":"#kind when the zone consists of country zone members returns the kind of zone member","suite":"Spree::Zone at ./spec/models/spree/zone_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2:1\"}}","suiteSourceFile":"core/spec/models/spree/zone_spec.rb"},{"name":"#potential_matching_zones finding potential matches for a country zone will find all zones with countries covered by the passed in zone","suite":"Spree::Zone at ./spec/models/spree/zone_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1:1\"}}","suiteSourceFile":"core/spec/models/spree/zone_spec.rb"},{"name":"#potential_matching_zones finding potential matches for a country zone only returns each zone once","suite":"Spree::Zone at ./spec/models/spree/zone_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1:2\"}}","suiteSourceFile":"core/spec/models/spree/zone_spec.rb"},{"name":"#potential_matching_zones finding potential matches for a state zone will find all zones which share states covered by passed in zone","suite":"Spree::Zone at ./spec/models/spree/zone_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2:1\"}}","suiteSourceFile":"core/spec/models/spree/zone_spec.rb"},{"name":"#potential_matching_zones finding potential matches for a state zone will find zones that share countries with any states of the passed in zone","suite":"Spree::Zone at ./spec/models/spree/zone_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2:2\"}}","suiteSourceFile":"core/spec/models/spree/zone_spec.rb"},{"name":"#potential_matching_zones finding potential matches for a state zone only returns each zone once","suite":"Spree::Zone at ./spec/models/spree/zone_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2:3\"}}","suiteSourceFile":"core/spec/models/spree/zone_spec.rb"},{"name":"state and country associations has countries associated can access associated countries","suite":"Spree::Zone at ./spec/models/spree/zone_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1:1\"}}","suiteSourceFile":"core/spec/models/spree/zone_spec.rb"},{"name":"state and country associations has states associated can access associated states","suite":"Spree::Zone at ./spec/models/spree/zone_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:2:1\"}}","suiteSourceFile":"core/spec/models/spree/zone_spec.rb"},{"name":"#state_list has countries associated returns states associated to that countries","suite":"Spree::Zone at ./spec/models/spree/zone_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1:1\"}}","suiteSourceFile":"core/spec/models/spree/zone_spec.rb"},{"name":"#state_list has states associated returns that states","suite":"Spree::Zone at ./spec/models/spree/zone_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:2:1\"}}","suiteSourceFile":"core/spec/models/spree/zone_spec.rb"},{"name":"#state_list_for has countries associated returns states associated with the country","suite":"Spree::Zone at ./spec/models/spree/zone_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1:1\"}}","suiteSourceFile":"core/spec/models/spree/zone_spec.rb"},{"name":"#state_list_for has states associated returns states associated with the country","suite":"Spree::Zone at ./spec/models/spree/zone_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2:1\"}}","suiteSourceFile":"core/spec/models/spree/zone_spec.rb"},{"name":"#call returns array with correct values","suite":"Spree::CSV::CustomerPresenter at ./spec/presenters/spree/csv/customer_presenter_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/presenters/spree/csv/customer_presenter_spec.rb"},{"name":"#call when customer does not accept email marketing returns say_no for email marketing","suite":"Spree::CSV::CustomerPresenter at ./spec/presenters/spree/csv/customer_presenter_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/presenters/spree/csv/customer_presenter_spec.rb"},{"name":"#call when customer has no address returns nil for address fields","suite":"Spree::CSV::CustomerPresenter at ./spec/presenters/spree/csv/customer_presenter_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","suiteSourceFile":"core/spec/presenters/spree/csv/customer_presenter_spec.rb"},{"name":"#call when customer has no orders returns zero for total orders and amount spent","suite":"Spree::CSV::CustomerPresenter at ./spec/presenters/spree/csv/customer_presenter_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1\"}}","suiteSourceFile":"core/spec/presenters/spree/csv/customer_presenter_spec.rb"},{"name":"HEADERS constant contains all expected headers","suite":"Spree::CSV::CustomerPresenter at ./spec/presenters/spree/csv/customer_presenter_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/presenters/spree/csv/customer_presenter_spec.rb"},{"name":"metafields includes metafield values at the end of the array","suite":"Spree::CSV::CustomerPresenter at ./spec/presenters/spree/csv/customer_presenter_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/presenters/spree/csv/customer_presenter_spec.rb"},{"name":"metafields when customer has no metafield value returns nil for metafield","suite":"Spree::CSV::CustomerPresenter at ./spec/presenters/spree/csv/customer_presenter_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","suiteSourceFile":"core/spec/presenters/spree/csv/customer_presenter_spec.rb"},{"name":"#call returns the correct CSV data","suite":"Spree::CSV::GiftCardPresenter at ./spec/presenters/spree/csv/gift_card_presenter_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/presenters/spree/csv/gift_card_presenter_spec.rb"},{"name":"#call when gift card has no user returns nil for customer fields","suite":"Spree::CSV::GiftCardPresenter at ./spec/presenters/spree/csv/gift_card_presenter_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/presenters/spree/csv/gift_card_presenter_spec.rb"},{"name":"#call when gift card has no expiration date returns nil for expires at","suite":"Spree::CSV::GiftCardPresenter at ./spec/presenters/spree/csv/gift_card_presenter_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","suiteSourceFile":"core/spec/presenters/spree/csv/gift_card_presenter_spec.rb"},{"name":"HEADERS has the correct headers","suite":"Spree::CSV::GiftCardPresenter at ./spec/presenters/spree/csv/gift_card_presenter_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/presenters/spree/csv/gift_card_presenter_spec.rb"},{"name":"metafields includes metafield values at the end of the array","suite":"Spree::CSV::GiftCardPresenter at ./spec/presenters/spree/csv/gift_card_presenter_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/presenters/spree/csv/gift_card_presenter_spec.rb"},{"name":"metafields when gift card has no metafield value returns nil for metafield","suite":"Spree::CSV::GiftCardPresenter at ./spec/presenters/spree/csv/gift_card_presenter_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","suiteSourceFile":"core/spec/presenters/spree/csv/gift_card_presenter_spec.rb"},{"name":"#call returns array with correct values","suite":"Spree::CSV::NewsletterSubscriberPresenter at ./spec/presenters/spree/csv/newsletter_subscriber_presenter_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/presenters/spree/csv/newsletter_subscriber_presenter_spec.rb"},{"name":"#call when subscriber is not verified returns say_no for verified and nil for verified_at","suite":"Spree::CSV::NewsletterSubscriberPresenter at ./spec/presenters/spree/csv/newsletter_subscriber_presenter_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/presenters/spree/csv/newsletter_subscriber_presenter_spec.rb"},{"name":"#call when subscriber has no user returns nil for customer name and id","suite":"Spree::CSV::NewsletterSubscriberPresenter at ./spec/presenters/spree/csv/newsletter_subscriber_presenter_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","suiteSourceFile":"core/spec/presenters/spree/csv/newsletter_subscriber_presenter_spec.rb"},{"name":"HEADERS constant contains all expected headers","suite":"Spree::CSV::NewsletterSubscriberPresenter at ./spec/presenters/spree/csv/newsletter_subscriber_presenter_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/presenters/spree/csv/newsletter_subscriber_presenter_spec.rb"},{"name":"metafields includes metafield values at the end of the array","suite":"Spree::CSV::NewsletterSubscriberPresenter at ./spec/presenters/spree/csv/newsletter_subscriber_presenter_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/presenters/spree/csv/newsletter_subscriber_presenter_spec.rb"},{"name":"metafields when subscriber has no metafield value returns nil for metafield","suite":"Spree::CSV::NewsletterSubscriberPresenter at ./spec/presenters/spree/csv/newsletter_subscriber_presenter_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","suiteSourceFile":"core/spec/presenters/spree/csv/newsletter_subscriber_presenter_spec.rb"},{"name":"#call returns array with correct values","suite":"Spree::CSV::OrderLineItemPresenter at ./spec/presenters/spree/csv/order_line_items_presenter_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/presenters/spree/csv/order_line_items_presenter_spec.rb"},{"name":"#call when index is not zero returns nil for order-level fields","suite":"Spree::CSV::OrderLineItemPresenter at ./spec/presenters/spree/csv/order_line_items_presenter_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/presenters/spree/csv/order_line_items_presenter_spec.rb"},{"name":"#call when index is not zero returns line item specific fields","suite":"Spree::CSV::OrderLineItemPresenter at ./spec/presenters/spree/csv/order_line_items_presenter_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2\"}}","suiteSourceFile":"core/spec/presenters/spree/csv/order_line_items_presenter_spec.rb"},{"name":"#taxon_dict splits taxon pretty name into array","suite":"Spree::CSV::OrderLineItemPresenter at ./spec/presenters/spree/csv/order_line_items_presenter_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/presenters/spree/csv/order_line_items_presenter_spec.rb"},{"name":"#taxon_dict returns empty array for nil taxon","suite":"Spree::CSV::OrderLineItemPresenter at ./spec/presenters/spree/csv/order_line_items_presenter_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","suiteSourceFile":"core/spec/presenters/spree/csv/order_line_items_presenter_spec.rb"},{"name":"#format_date formats date according to store timezone","suite":"Spree::CSV::OrderLineItemPresenter at ./spec/presenters/spree/csv/order_line_items_presenter_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/presenters/spree/csv/order_line_items_presenter_spec.rb"},{"name":"#format_date returns nil for blank date","suite":"Spree::CSV::OrderLineItemPresenter at ./spec/presenters/spree/csv/order_line_items_presenter_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","suiteSourceFile":"core/spec/presenters/spree/csv/order_line_items_presenter_spec.rb"},{"name":"metafields when index is zero includes metafields at the end of the array","suite":"Spree::CSV::OrderLineItemPresenter at ./spec/presenters/spree/csv/order_line_items_presenter_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1\"}}","suiteSourceFile":"core/spec/presenters/spree/csv/order_line_items_presenter_spec.rb"},{"name":"metafields when index is not zero does not include metafields","suite":"Spree::CSV::OrderLineItemPresenter at ./spec/presenters/spree/csv/order_line_items_presenter_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1\"}}","suiteSourceFile":"core/spec/presenters/spree/csv/order_line_items_presenter_spec.rb"},{"name":"#call returns array with correct values","suite":"Spree::CSV::ProductVariantPresenter at ./spec/presenters/spree/csv/product_variant_presenter_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/presenters/spree/csv/product_variant_presenter_spec.rb"},{"name":"#call when index is not zero returns nil for product-level fields","suite":"Spree::CSV::ProductVariantPresenter at ./spec/presenters/spree/csv/product_variant_presenter_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/presenters/spree/csv/product_variant_presenter_spec.rb"},{"name":"#call when index is not zero returns variant specific fields","suite":"Spree::CSV::ProductVariantPresenter at ./spec/presenters/spree/csv/product_variant_presenter_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2\"}}","suiteSourceFile":"core/spec/presenters/spree/csv/product_variant_presenter_spec.rb"},{"name":"#call images host when default host is set returns images with default host","suite":"Spree::CSV::ProductVariantPresenter at ./spec/presenters/spree/csv/product_variant_presenter_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1:1\"}}","suiteSourceFile":"core/spec/presenters/spree/csv/product_variant_presenter_spec.rb"},{"name":"#call images host when there is no default host returns images with the store url","suite":"Spree::CSV::ProductVariantPresenter at ./spec/presenters/spree/csv/product_variant_presenter_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:2:1\"}}","suiteSourceFile":"core/spec/presenters/spree/csv/product_variant_presenter_spec.rb"},{"name":"#call images host when there is no default host when custom domain is set returns images with the custom domain","suite":"Spree::CSV::ProductVariantPresenter at ./spec/presenters/spree/csv/product_variant_presenter_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:2:2:1\"}}","suiteSourceFile":"core/spec/presenters/spree/csv/product_variant_presenter_spec.rb"},{"name":"#option_type returns option type at given index","suite":"Spree::CSV::ProductVariantPresenter at ./spec/presenters/spree/csv/product_variant_presenter_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/presenters/spree/csv/product_variant_presenter_spec.rb"},{"name":"#option_type returns nil for non-existent index","suite":"Spree::CSV::ProductVariantPresenter at ./spec/presenters/spree/csv/product_variant_presenter_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","suiteSourceFile":"core/spec/presenters/spree/csv/product_variant_presenter_spec.rb"},{"name":"#option_value returns option value presentation for given option type","suite":"Spree::CSV::ProductVariantPresenter at ./spec/presenters/spree/csv/product_variant_presenter_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/presenters/spree/csv/product_variant_presenter_spec.rb"},{"name":"#option_value returns nil for option type without value","suite":"Spree::CSV::ProductVariantPresenter at ./spec/presenters/spree/csv/product_variant_presenter_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","suiteSourceFile":"core/spec/presenters/spree/csv/product_variant_presenter_spec.rb"},{"name":"metafields when index is zero includes metafields at the end of the array","suite":"Spree::CSV::ProductVariantPresenter at ./spec/presenters/spree/csv/product_variant_presenter_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1\"}}","suiteSourceFile":"core/spec/presenters/spree/csv/product_variant_presenter_spec.rb"},{"name":"metafields when index is not zero does not include metafields","suite":"Spree::CSV::ProductVariantPresenter at ./spec/presenters/spree/csv/product_variant_presenter_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1\"}}","suiteSourceFile":"core/spec/presenters/spree/csv/product_variant_presenter_spec.rb"},{"name":"shipping_category when product has shipping category exports shipping category name","suite":"Spree::CSV::ProductVariantPresenter at ./spec/presenters/spree/csv/product_variant_presenter_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:1\"}}","suiteSourceFile":"core/spec/presenters/spree/csv/product_variant_presenter_spec.rb"},{"name":"shipping_category when product has no shipping category explicitly set exports the assigned shipping category","suite":"Spree::CSV::ProductVariantPresenter at ./spec/presenters/spree/csv/product_variant_presenter_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1\"}}","suiteSourceFile":"core/spec/presenters/spree/csv/product_variant_presenter_spec.rb"},{"name":"#to_a returns filterable Option Types and Values","suite":"Spree::Filters::OptionsPresenter at ./spec/presenters/spree/filters/options_presenter_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/presenters/spree/filters/options_presenter_spec.rb"},{"name":"#to_i returns price amount","suite":"Spree::Filters::PricePresenter at ./spec/presenters/spree/filters/price_presenter_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/presenters/spree/filters/price_presenter_spec.rb"},{"name":"#to_s returns a formatted price","suite":"Spree::Filters::PricePresenter at ./spec/presenters/spree/filters/price_presenter_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/presenters/spree/filters/price_presenter_spec.rb"},{"name":".from_param builds a price range based on a param","suite":"Spree::Filters::PriceRangePresenter at ./spec/presenters/spree/filters/price_range_presenter_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/presenters/spree/filters/price_range_presenter_spec.rb"},{"name":"#to_param returns price range as param","suite":"Spree::Filters::PriceRangePresenter at ./spec/presenters/spree/filters/price_range_presenter_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/presenters/spree/filters/price_range_presenter_spec.rb"},{"name":"#to_s returns a formatted price range","suite":"Spree::Filters::PriceRangePresenter at ./spec/presenters/spree/filters/price_range_presenter_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/presenters/spree/filters/price_range_presenter_spec.rb"},{"name":"#to_a returns filterable Product Properties","suite":"Spree::Filters::PropertiesPresenter at ./spec/presenters/spree/filters/properties_presenter_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/presenters/spree/filters/properties_presenter_spec.rb"},{"name":"#uniq_values returns unique Product Properties values for a given list of Product Properties","suite":"Spree::Filters::PropertyPresenter at ./spec/presenters/spree/filters/property_presenter_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/presenters/spree/filters/property_presenter_spec.rb"},{"name":"when the quantifier is less_than #to_param returns price range as param","suite":"Spree::Filters::QuantifiedPriceRangePresenter at ./spec/presenters/spree/filters/quantified_price_range_presenter_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/presenters/spree/filters/quantified_price_range_presenter_spec.rb"},{"name":"when the quantifier is less_than #to_s returns a formatted price range","suite":"Spree::Filters::QuantifiedPriceRangePresenter at ./spec/presenters/spree/filters/quantified_price_range_presenter_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/presenters/spree/filters/quantified_price_range_presenter_spec.rb"},{"name":"when the quantifier is more_than #to_param returns price range as param","suite":"Spree::Filters::QuantifiedPriceRangePresenter at ./spec/presenters/spree/filters/quantified_price_range_presenter_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","suiteSourceFile":"core/spec/presenters/spree/filters/quantified_price_range_presenter_spec.rb"},{"name":"when the quantifier is more_than #to_s returns a formatted price range","suite":"Spree::Filters::QuantifiedPriceRangePresenter at ./spec/presenters/spree/filters/quantified_price_range_presenter_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","suiteSourceFile":"core/spec/presenters/spree/filters/quantified_price_range_presenter_spec.rb"},{"name":"#call returns an array of variant with option_values and images","suite":"Spree::VariantPresenter at ./spec/presenters/spree/variant_presenter_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/presenters/spree/variant_presenter_spec.rb"},{"name":"#call generates request body without raising any errors","suite":"Spree::VariantPresenter at ./spec/presenters/spree/variant_presenter_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/presenters/spree/variant_presenter_spec.rb"},{"name":"#default_variant returns first Variant of first Option Value of first Option Type","suite":"Spree::Variants::OptionTypesPresenter at ./spec/presenters/spree/variants/option_types_presenter_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/presenters/spree/variants/option_types_presenter_spec.rb"},{"name":"#default_variant default variant of product backorderable returns the same Variant as Product#default_variant","suite":"Spree::Variants::OptionTypesPresenter at ./spec/presenters/spree/variants/option_types_presenter_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","suiteSourceFile":"core/spec/presenters/spree/variants/option_types_presenter_spec.rb"},{"name":"#default_variant default variant of product in stock returns the same Variant as Product#default_variant","suite":"Spree::Variants::OptionTypesPresenter at ./spec/presenters/spree/variants/option_types_presenter_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","suiteSourceFile":"core/spec/presenters/spree/variants/option_types_presenter_spec.rb"},{"name":"#default_variant with in-stock Variant returns first in-stock Variant","suite":"Spree::Variants::OptionTypesPresenter at ./spec/presenters/spree/variants/option_types_presenter_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","suiteSourceFile":"core/spec/presenters/spree/variants/option_types_presenter_spec.rb"},{"name":"#default_variant with backorderable Variant returns first backorderable Variant","suite":"Spree::Variants::OptionTypesPresenter at ./spec/presenters/spree/variants/option_types_presenter_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1\"}}","suiteSourceFile":"core/spec/presenters/spree/variants/option_types_presenter_spec.rb"},{"name":"#default_variant without Option Types example at ./spec/presenters/spree/variants/option_types_presenter_spec.rb:85","suite":"Spree::Variants::OptionTypesPresenter at ./spec/presenters/spree/variants/option_types_presenter_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5:1\"}}","suiteSourceFile":"core/spec/presenters/spree/variants/option_types_presenter_spec.rb"},{"name":"#options returns serialized options for Option Types and Option Values","suite":"Spree::Variants::OptionTypesPresenter at ./spec/presenters/spree/variants/option_types_presenter_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/presenters/spree/variants/option_types_presenter_spec.rb"},{"name":"#options without Option Types example at ./spec/presenters/spree/variants/option_types_presenter_spec.rb:166","suite":"Spree::Variants::OptionTypesPresenter at ./spec/presenters/spree/variants/option_types_presenter_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","suiteSourceFile":"core/spec/presenters/spree/variants/option_types_presenter_spec.rb"},{"name":"#to_sentence orders by bar than foo","suite":"Spree::Variants::OptionsPresenter at ./spec/presenters/spree/variants/options_presenter_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/presenters/spree/variants/options_presenter_spec.rb"},{"name":"#to_hash when variant has option values returns valid hash","suite":"Spree::Variants::OptionsPresenter at ./spec/presenters/spree/variants/options_presenter_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","suiteSourceFile":"core/spec/presenters/spree/variants/options_presenter_spec.rb"},{"name":"#to_hash when variant has no option values returns empty hash","suite":"Spree::Variants::OptionsPresenter at ./spec/presenters/spree/variants/options_presenter_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","suiteSourceFile":"core/spec/presenters/spree/variants/options_presenter_spec.rb"},{"name":"#as_json includes identity attributes","suite":"Spree::Events::AssetSerializer at ./spec/serializers/spree/events/asset_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/serializers/spree/events/asset_serializer_spec.rb"},{"name":"#as_json includes viewable polymorphic reference","suite":"Spree::Events::AssetSerializer at ./spec/serializers/spree/events/asset_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/serializers/spree/events/asset_serializer_spec.rb"},{"name":"#as_json includes position","suite":"Spree::Events::AssetSerializer at ./spec/serializers/spree/events/asset_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/serializers/spree/events/asset_serializer_spec.rb"},{"name":"#as_json includes alt text","suite":"Spree::Events::AssetSerializer at ./spec/serializers/spree/events/asset_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","suiteSourceFile":"core/spec/serializers/spree/events/asset_serializer_spec.rb"},{"name":"#as_json includes timestamps","suite":"Spree::Events::AssetSerializer at ./spec/serializers/spree/events/asset_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","suiteSourceFile":"core/spec/serializers/spree/events/asset_serializer_spec.rb"},{"name":"#as_json returns a hash with attributes","suite":"Spree::Events::BaseSerializer at ./spec/serializers/spree/events/base_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/serializers/spree/events/base_serializer_spec.rb"},{"name":"#as_json formats timestamps as ISO8601","suite":"Spree::Events::BaseSerializer at ./spec/serializers/spree/events/base_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/serializers/spree/events/base_serializer_spec.rb"},{"name":".serialize creates an instance and calls as_json","suite":"Spree::Events::BaseSerializer at ./spec/serializers/spree/events/base_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/serializers/spree/events/base_serializer_spec.rb"},{"name":"#timestamp returns nil for nil values","suite":"Spree::Events::BaseSerializer at ./spec/serializers/spree/events/base_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/serializers/spree/events/base_serializer_spec.rb"},{"name":"#timestamp returns ISO8601 formatted string","suite":"Spree::Events::BaseSerializer at ./spec/serializers/spree/events/base_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","suiteSourceFile":"core/spec/serializers/spree/events/base_serializer_spec.rb"},{"name":"#money returns nil for nil values","suite":"Spree::Events::BaseSerializer at ./spec/serializers/spree/events/base_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/serializers/spree/events/base_serializer_spec.rb"},{"name":"#money returns decimal value for numbers","suite":"Spree::Events::BaseSerializer at ./spec/serializers/spree/events/base_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2\"}}","suiteSourceFile":"core/spec/serializers/spree/events/base_serializer_spec.rb"},{"name":"#money returns decimal value for BigDecimal","suite":"Spree::Events::BaseSerializer at ./spec/serializers/spree/events/base_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3\"}}","suiteSourceFile":"core/spec/serializers/spree/events/base_serializer_spec.rb"},{"name":"#event_name returns the event name from context","suite":"Spree::Events::BaseSerializer at ./spec/serializers/spree/events/base_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","suiteSourceFile":"core/spec/serializers/spree/events/base_serializer_spec.rb"},{"name":"#attribute returns the attribute value if it exists","suite":"Spree::Events::BaseSerializer at ./spec/serializers/spree/events/base_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","suiteSourceFile":"core/spec/serializers/spree/events/base_serializer_spec.rb"},{"name":"#attribute returns nil if the attribute does not exist","suite":"Spree::Events::BaseSerializer at ./spec/serializers/spree/events/base_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2\"}}","suiteSourceFile":"core/spec/serializers/spree/events/base_serializer_spec.rb"},{"name":"#as_json includes identity attributes","suite":"Spree::Events::CustomerReturnSerializer at ./spec/serializers/spree/events/customer_return_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/serializers/spree/events/customer_return_serializer_spec.rb"},{"name":"#as_json includes foreign keys","suite":"Spree::Events::CustomerReturnSerializer at ./spec/serializers/spree/events/customer_return_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/serializers/spree/events/customer_return_serializer_spec.rb"},{"name":"#as_json includes timestamps","suite":"Spree::Events::CustomerReturnSerializer at ./spec/serializers/spree/events/customer_return_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/serializers/spree/events/customer_return_serializer_spec.rb"},{"name":"#as_json includes identity attributes","suite":"Spree::Events::DigitalLinkSerializer at ./spec/serializers/spree/events/digital_link_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/serializers/spree/events/digital_link_serializer_spec.rb"},{"name":"#as_json includes foreign keys","suite":"Spree::Events::DigitalLinkSerializer at ./spec/serializers/spree/events/digital_link_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/serializers/spree/events/digital_link_serializer_spec.rb"},{"name":"#as_json includes access_counter","suite":"Spree::Events::DigitalLinkSerializer at ./spec/serializers/spree/events/digital_link_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/serializers/spree/events/digital_link_serializer_spec.rb"},{"name":"#as_json includes timestamps","suite":"Spree::Events::DigitalLinkSerializer at ./spec/serializers/spree/events/digital_link_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","suiteSourceFile":"core/spec/serializers/spree/events/digital_link_serializer_spec.rb"},{"name":"#as_json includes identity attributes","suite":"Spree::Events::DigitalSerializer at ./spec/serializers/spree/events/digital_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/serializers/spree/events/digital_serializer_spec.rb"},{"name":"#as_json includes variant_id","suite":"Spree::Events::DigitalSerializer at ./spec/serializers/spree/events/digital_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/serializers/spree/events/digital_serializer_spec.rb"},{"name":"#as_json includes timestamps","suite":"Spree::Events::DigitalSerializer at ./spec/serializers/spree/events/digital_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/serializers/spree/events/digital_serializer_spec.rb"},{"name":"#as_json includes identity attributes","suite":"Spree::Events::ExportSerializer at ./spec/serializers/spree/events/export_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/serializers/spree/events/export_serializer_spec.rb"},{"name":"#as_json includes type","suite":"Spree::Events::ExportSerializer at ./spec/serializers/spree/events/export_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/serializers/spree/events/export_serializer_spec.rb"},{"name":"#as_json includes format","suite":"Spree::Events::ExportSerializer at ./spec/serializers/spree/events/export_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/serializers/spree/events/export_serializer_spec.rb"},{"name":"#as_json includes foreign keys","suite":"Spree::Events::ExportSerializer at ./spec/serializers/spree/events/export_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","suiteSourceFile":"core/spec/serializers/spree/events/export_serializer_spec.rb"},{"name":"#as_json includes timestamps","suite":"Spree::Events::ExportSerializer at ./spec/serializers/spree/events/export_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","suiteSourceFile":"core/spec/serializers/spree/events/export_serializer_spec.rb"},{"name":"#as_json includes identity attributes","suite":"Spree::Events::GiftCardBatchSerializer at ./spec/serializers/spree/events/gift_card_batch_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/serializers/spree/events/gift_card_batch_serializer_spec.rb"},{"name":"#as_json includes codes_count","suite":"Spree::Events::GiftCardBatchSerializer at ./spec/serializers/spree/events/gift_card_batch_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/serializers/spree/events/gift_card_batch_serializer_spec.rb"},{"name":"#as_json includes amount fields","suite":"Spree::Events::GiftCardBatchSerializer at ./spec/serializers/spree/events/gift_card_batch_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/serializers/spree/events/gift_card_batch_serializer_spec.rb"},{"name":"#as_json includes prefix","suite":"Spree::Events::GiftCardBatchSerializer at ./spec/serializers/spree/events/gift_card_batch_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","suiteSourceFile":"core/spec/serializers/spree/events/gift_card_batch_serializer_spec.rb"},{"name":"#as_json includes expires_at","suite":"Spree::Events::GiftCardBatchSerializer at ./spec/serializers/spree/events/gift_card_batch_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","suiteSourceFile":"core/spec/serializers/spree/events/gift_card_batch_serializer_spec.rb"},{"name":"#as_json includes foreign keys","suite":"Spree::Events::GiftCardBatchSerializer at ./spec/serializers/spree/events/gift_card_batch_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","suiteSourceFile":"core/spec/serializers/spree/events/gift_card_batch_serializer_spec.rb"},{"name":"#as_json includes timestamps","suite":"Spree::Events::GiftCardBatchSerializer at ./spec/serializers/spree/events/gift_card_batch_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7\"}}","suiteSourceFile":"core/spec/serializers/spree/events/gift_card_batch_serializer_spec.rb"},{"name":"#as_json includes identity attributes","suite":"Spree::Events::GiftCardSerializer at ./spec/serializers/spree/events/gift_card_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/serializers/spree/events/gift_card_serializer_spec.rb"},{"name":"#as_json includes state as string","suite":"Spree::Events::GiftCardSerializer at ./spec/serializers/spree/events/gift_card_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/serializers/spree/events/gift_card_serializer_spec.rb"},{"name":"#as_json includes amount fields","suite":"Spree::Events::GiftCardSerializer at ./spec/serializers/spree/events/gift_card_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/serializers/spree/events/gift_card_serializer_spec.rb"},{"name":"#as_json includes currency","suite":"Spree::Events::GiftCardSerializer at ./spec/serializers/spree/events/gift_card_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","suiteSourceFile":"core/spec/serializers/spree/events/gift_card_serializer_spec.rb"},{"name":"#as_json includes foreign keys","suite":"Spree::Events::GiftCardSerializer at ./spec/serializers/spree/events/gift_card_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","suiteSourceFile":"core/spec/serializers/spree/events/gift_card_serializer_spec.rb"},{"name":"#as_json includes dates","suite":"Spree::Events::GiftCardSerializer at ./spec/serializers/spree/events/gift_card_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","suiteSourceFile":"core/spec/serializers/spree/events/gift_card_serializer_spec.rb"},{"name":"#as_json includes timestamps","suite":"Spree::Events::GiftCardSerializer at ./spec/serializers/spree/events/gift_card_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7\"}}","suiteSourceFile":"core/spec/serializers/spree/events/gift_card_serializer_spec.rb"},{"name":"#as_json includes identity attributes","suite":"Spree::Events::ImportRowSerializer at ./spec/serializers/spree/events/import_row_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/serializers/spree/events/import_row_serializer_spec.rb"},{"name":"#as_json includes import reference","suite":"Spree::Events::ImportRowSerializer at ./spec/serializers/spree/events/import_row_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/serializers/spree/events/import_row_serializer_spec.rb"},{"name":"#as_json includes row_number","suite":"Spree::Events::ImportRowSerializer at ./spec/serializers/spree/events/import_row_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/serializers/spree/events/import_row_serializer_spec.rb"},{"name":"#as_json includes status","suite":"Spree::Events::ImportRowSerializer at ./spec/serializers/spree/events/import_row_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","suiteSourceFile":"core/spec/serializers/spree/events/import_row_serializer_spec.rb"},{"name":"#as_json includes validation_errors","suite":"Spree::Events::ImportRowSerializer at ./spec/serializers/spree/events/import_row_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","suiteSourceFile":"core/spec/serializers/spree/events/import_row_serializer_spec.rb"},{"name":"#as_json includes item polymorphic reference","suite":"Spree::Events::ImportRowSerializer at ./spec/serializers/spree/events/import_row_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","suiteSourceFile":"core/spec/serializers/spree/events/import_row_serializer_spec.rb"},{"name":"#as_json includes timestamps","suite":"Spree::Events::ImportRowSerializer at ./spec/serializers/spree/events/import_row_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7\"}}","suiteSourceFile":"core/spec/serializers/spree/events/import_row_serializer_spec.rb"},{"name":"#as_json with validation errors includes validation error message","suite":"Spree::Events::ImportRowSerializer at ./spec/serializers/spree/events/import_row_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8:1\"}}","suiteSourceFile":"core/spec/serializers/spree/events/import_row_serializer_spec.rb"},{"name":"#as_json includes identity attributes","suite":"Spree::Events::ImportSerializer at ./spec/serializers/spree/events/import_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/serializers/spree/events/import_serializer_spec.rb"},{"name":"#as_json includes type","suite":"Spree::Events::ImportSerializer at ./spec/serializers/spree/events/import_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/serializers/spree/events/import_serializer_spec.rb"},{"name":"#as_json includes status as string","suite":"Spree::Events::ImportSerializer at ./spec/serializers/spree/events/import_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/serializers/spree/events/import_serializer_spec.rb"},{"name":"#as_json includes owner polymorphic reference","suite":"Spree::Events::ImportSerializer at ./spec/serializers/spree/events/import_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","suiteSourceFile":"core/spec/serializers/spree/events/import_serializer_spec.rb"},{"name":"#as_json includes user_id","suite":"Spree::Events::ImportSerializer at ./spec/serializers/spree/events/import_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","suiteSourceFile":"core/spec/serializers/spree/events/import_serializer_spec.rb"},{"name":"#as_json includes rows_count","suite":"Spree::Events::ImportSerializer at ./spec/serializers/spree/events/import_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","suiteSourceFile":"core/spec/serializers/spree/events/import_serializer_spec.rb"},{"name":"#as_json includes timestamps","suite":"Spree::Events::ImportSerializer at ./spec/serializers/spree/events/import_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7\"}}","suiteSourceFile":"core/spec/serializers/spree/events/import_serializer_spec.rb"},{"name":"#as_json includes identity attributes","suite":"Spree::Events::InvitationSerializer at ./spec/serializers/spree/events/invitation_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/serializers/spree/events/invitation_serializer_spec.rb"},{"name":"#as_json includes status as string","suite":"Spree::Events::InvitationSerializer at ./spec/serializers/spree/events/invitation_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/serializers/spree/events/invitation_serializer_spec.rb"},{"name":"#as_json includes resource polymorphic reference","suite":"Spree::Events::InvitationSerializer at ./spec/serializers/spree/events/invitation_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/serializers/spree/events/invitation_serializer_spec.rb"},{"name":"#as_json includes inviter polymorphic reference","suite":"Spree::Events::InvitationSerializer at ./spec/serializers/spree/events/invitation_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","suiteSourceFile":"core/spec/serializers/spree/events/invitation_serializer_spec.rb"},{"name":"#as_json includes invitee polymorphic reference","suite":"Spree::Events::InvitationSerializer at ./spec/serializers/spree/events/invitation_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","suiteSourceFile":"core/spec/serializers/spree/events/invitation_serializer_spec.rb"},{"name":"#as_json includes role_id","suite":"Spree::Events::InvitationSerializer at ./spec/serializers/spree/events/invitation_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","suiteSourceFile":"core/spec/serializers/spree/events/invitation_serializer_spec.rb"},{"name":"#as_json includes dates","suite":"Spree::Events::InvitationSerializer at ./spec/serializers/spree/events/invitation_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7\"}}","suiteSourceFile":"core/spec/serializers/spree/events/invitation_serializer_spec.rb"},{"name":"#as_json includes timestamps","suite":"Spree::Events::InvitationSerializer at ./spec/serializers/spree/events/invitation_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8\"}}","suiteSourceFile":"core/spec/serializers/spree/events/invitation_serializer_spec.rb"},{"name":"#as_json includes identity attributes","suite":"Spree::Events::LineItemSerializer at ./spec/serializers/spree/events/line_item_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/serializers/spree/events/line_item_serializer_spec.rb"},{"name":"#as_json includes quantity","suite":"Spree::Events::LineItemSerializer at ./spec/serializers/spree/events/line_item_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/serializers/spree/events/line_item_serializer_spec.rb"},{"name":"#as_json includes price fields","suite":"Spree::Events::LineItemSerializer at ./spec/serializers/spree/events/line_item_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/serializers/spree/events/line_item_serializer_spec.rb"},{"name":"#as_json includes adjustment totals","suite":"Spree::Events::LineItemSerializer at ./spec/serializers/spree/events/line_item_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","suiteSourceFile":"core/spec/serializers/spree/events/line_item_serializer_spec.rb"},{"name":"#as_json includes foreign keys","suite":"Spree::Events::LineItemSerializer at ./spec/serializers/spree/events/line_item_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","suiteSourceFile":"core/spec/serializers/spree/events/line_item_serializer_spec.rb"},{"name":"#as_json includes timestamps","suite":"Spree::Events::LineItemSerializer at ./spec/serializers/spree/events/line_item_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","suiteSourceFile":"core/spec/serializers/spree/events/line_item_serializer_spec.rb"},{"name":"#as_json includes identity attributes","suite":"Spree::Events::NewsletterSubscriberSerializer at ./spec/serializers/spree/events/newsletter_subscriber_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/serializers/spree/events/newsletter_subscriber_serializer_spec.rb"},{"name":"#as_json includes verified status","suite":"Spree::Events::NewsletterSubscriberSerializer at ./spec/serializers/spree/events/newsletter_subscriber_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/serializers/spree/events/newsletter_subscriber_serializer_spec.rb"},{"name":"#as_json includes user_id","suite":"Spree::Events::NewsletterSubscriberSerializer at ./spec/serializers/spree/events/newsletter_subscriber_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/serializers/spree/events/newsletter_subscriber_serializer_spec.rb"},{"name":"#as_json includes timestamps","suite":"Spree::Events::NewsletterSubscriberSerializer at ./spec/serializers/spree/events/newsletter_subscriber_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","suiteSourceFile":"core/spec/serializers/spree/events/newsletter_subscriber_serializer_spec.rb"},{"name":"#as_json when not verified returns verified as false","suite":"Spree::Events::NewsletterSubscriberSerializer at ./spec/serializers/spree/events/newsletter_subscriber_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5:1\"}}","suiteSourceFile":"core/spec/serializers/spree/events/newsletter_subscriber_serializer_spec.rb"},{"name":"#as_json includes identity attributes","suite":"Spree::Events::OrderSerializer at ./spec/serializers/spree/events/order_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/serializers/spree/events/order_serializer_spec.rb"},{"name":"#as_json includes state attributes as strings","suite":"Spree::Events::OrderSerializer at ./spec/serializers/spree/events/order_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/serializers/spree/events/order_serializer_spec.rb"},{"name":"#as_json includes totals","suite":"Spree::Events::OrderSerializer at ./spec/serializers/spree/events/order_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/serializers/spree/events/order_serializer_spec.rb"},{"name":"#as_json includes tax totals","suite":"Spree::Events::OrderSerializer at ./spec/serializers/spree/events/order_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","suiteSourceFile":"core/spec/serializers/spree/events/order_serializer_spec.rb"},{"name":"#as_json includes item count and currency","suite":"Spree::Events::OrderSerializer at ./spec/serializers/spree/events/order_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","suiteSourceFile":"core/spec/serializers/spree/events/order_serializer_spec.rb"},{"name":"#as_json includes email","suite":"Spree::Events::OrderSerializer at ./spec/serializers/spree/events/order_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","suiteSourceFile":"core/spec/serializers/spree/events/order_serializer_spec.rb"},{"name":"#as_json includes foreign keys","suite":"Spree::Events::OrderSerializer at ./spec/serializers/spree/events/order_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7\"}}","suiteSourceFile":"core/spec/serializers/spree/events/order_serializer_spec.rb"},{"name":"#as_json includes timestamps","suite":"Spree::Events::OrderSerializer at ./spec/serializers/spree/events/order_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8\"}}","suiteSourceFile":"core/spec/serializers/spree/events/order_serializer_spec.rb"},{"name":"#as_json does not include associations","suite":"Spree::Events::OrderSerializer at ./spec/serializers/spree/events/order_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:9\"}}","suiteSourceFile":"core/spec/serializers/spree/events/order_serializer_spec.rb"},{"name":"#as_json includes identity attributes","suite":"Spree::Events::PaymentSerializer at ./spec/serializers/spree/events/payment_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/serializers/spree/events/payment_serializer_spec.rb"},{"name":"#as_json includes state as string","suite":"Spree::Events::PaymentSerializer at ./spec/serializers/spree/events/payment_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/serializers/spree/events/payment_serializer_spec.rb"},{"name":"#as_json includes amount","suite":"Spree::Events::PaymentSerializer at ./spec/serializers/spree/events/payment_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/serializers/spree/events/payment_serializer_spec.rb"},{"name":"#as_json includes foreign keys","suite":"Spree::Events::PaymentSerializer at ./spec/serializers/spree/events/payment_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","suiteSourceFile":"core/spec/serializers/spree/events/payment_serializer_spec.rb"},{"name":"#as_json includes source polymorphic reference","suite":"Spree::Events::PaymentSerializer at ./spec/serializers/spree/events/payment_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","suiteSourceFile":"core/spec/serializers/spree/events/payment_serializer_spec.rb"},{"name":"#as_json includes timestamps","suite":"Spree::Events::PaymentSerializer at ./spec/serializers/spree/events/payment_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","suiteSourceFile":"core/spec/serializers/spree/events/payment_serializer_spec.rb"},{"name":"#as_json does not include associations","suite":"Spree::Events::PaymentSerializer at ./spec/serializers/spree/events/payment_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7\"}}","suiteSourceFile":"core/spec/serializers/spree/events/payment_serializer_spec.rb"},{"name":"#as_json includes identity attributes","suite":"Spree::Events::PostCategorySerializer at ./spec/serializers/spree/events/post_category_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/serializers/spree/events/post_category_serializer_spec.rb"},{"name":"#as_json includes store_id","suite":"Spree::Events::PostCategorySerializer at ./spec/serializers/spree/events/post_category_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/serializers/spree/events/post_category_serializer_spec.rb"},{"name":"#as_json includes timestamps","suite":"Spree::Events::PostCategorySerializer at ./spec/serializers/spree/events/post_category_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/serializers/spree/events/post_category_serializer_spec.rb"},{"name":"#as_json includes identity attributes","suite":"Spree::Events::PostSerializer at ./spec/serializers/spree/events/post_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/serializers/spree/events/post_serializer_spec.rb"},{"name":"#as_json includes meta fields","suite":"Spree::Events::PostSerializer at ./spec/serializers/spree/events/post_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/serializers/spree/events/post_serializer_spec.rb"},{"name":"#as_json includes published_at","suite":"Spree::Events::PostSerializer at ./spec/serializers/spree/events/post_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/serializers/spree/events/post_serializer_spec.rb"},{"name":"#as_json includes deleted_at","suite":"Spree::Events::PostSerializer at ./spec/serializers/spree/events/post_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","suiteSourceFile":"core/spec/serializers/spree/events/post_serializer_spec.rb"},{"name":"#as_json includes foreign keys","suite":"Spree::Events::PostSerializer at ./spec/serializers/spree/events/post_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","suiteSourceFile":"core/spec/serializers/spree/events/post_serializer_spec.rb"},{"name":"#as_json includes timestamps","suite":"Spree::Events::PostSerializer at ./spec/serializers/spree/events/post_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","suiteSourceFile":"core/spec/serializers/spree/events/post_serializer_spec.rb"},{"name":"#as_json includes identity attributes","suite":"Spree::Events::PriceSerializer at ./spec/serializers/spree/events/price_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/serializers/spree/events/price_serializer_spec.rb"},{"name":"#as_json includes amount fields","suite":"Spree::Events::PriceSerializer at ./spec/serializers/spree/events/price_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/serializers/spree/events/price_serializer_spec.rb"},{"name":"#as_json includes variant_id","suite":"Spree::Events::PriceSerializer at ./spec/serializers/spree/events/price_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/serializers/spree/events/price_serializer_spec.rb"},{"name":"#as_json includes deleted_at","suite":"Spree::Events::PriceSerializer at ./spec/serializers/spree/events/price_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","suiteSourceFile":"core/spec/serializers/spree/events/price_serializer_spec.rb"},{"name":"#as_json includes timestamps","suite":"Spree::Events::PriceSerializer at ./spec/serializers/spree/events/price_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","suiteSourceFile":"core/spec/serializers/spree/events/price_serializer_spec.rb"},{"name":"#as_json includes identity attributes","suite":"Spree::Events::ProductSerializer at ./spec/serializers/spree/events/product_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/serializers/spree/events/product_serializer_spec.rb"},{"name":"#as_json includes status as string","suite":"Spree::Events::ProductSerializer at ./spec/serializers/spree/events/product_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/serializers/spree/events/product_serializer_spec.rb"},{"name":"#as_json includes availability timestamps","suite":"Spree::Events::ProductSerializer at ./spec/serializers/spree/events/product_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/serializers/spree/events/product_serializer_spec.rb"},{"name":"#as_json includes timestamps","suite":"Spree::Events::ProductSerializer at ./spec/serializers/spree/events/product_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","suiteSourceFile":"core/spec/serializers/spree/events/product_serializer_spec.rb"},{"name":"#as_json does not include associations","suite":"Spree::Events::ProductSerializer at ./spec/serializers/spree/events/product_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","suiteSourceFile":"core/spec/serializers/spree/events/product_serializer_spec.rb"},{"name":"#as_json includes identity attributes","suite":"Spree::Events::PromotionSerializer at ./spec/serializers/spree/events/promotion_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/serializers/spree/events/promotion_serializer_spec.rb"},{"name":"#as_json includes code","suite":"Spree::Events::PromotionSerializer at ./spec/serializers/spree/events/promotion_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/serializers/spree/events/promotion_serializer_spec.rb"},{"name":"#as_json includes description","suite":"Spree::Events::PromotionSerializer at ./spec/serializers/spree/events/promotion_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/serializers/spree/events/promotion_serializer_spec.rb"},{"name":"#as_json includes type and kind","suite":"Spree::Events::PromotionSerializer at ./spec/serializers/spree/events/promotion_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","suiteSourceFile":"core/spec/serializers/spree/events/promotion_serializer_spec.rb"},{"name":"#as_json includes policy settings","suite":"Spree::Events::PromotionSerializer at ./spec/serializers/spree/events/promotion_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","suiteSourceFile":"core/spec/serializers/spree/events/promotion_serializer_spec.rb"},{"name":"#as_json includes multi-code settings","suite":"Spree::Events::PromotionSerializer at ./spec/serializers/spree/events/promotion_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","suiteSourceFile":"core/spec/serializers/spree/events/promotion_serializer_spec.rb"},{"name":"#as_json includes date range","suite":"Spree::Events::PromotionSerializer at ./spec/serializers/spree/events/promotion_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7\"}}","suiteSourceFile":"core/spec/serializers/spree/events/promotion_serializer_spec.rb"},{"name":"#as_json includes promotion_category_id","suite":"Spree::Events::PromotionSerializer at ./spec/serializers/spree/events/promotion_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8\"}}","suiteSourceFile":"core/spec/serializers/spree/events/promotion_serializer_spec.rb"},{"name":"#as_json includes timestamps","suite":"Spree::Events::PromotionSerializer at ./spec/serializers/spree/events/promotion_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:9\"}}","suiteSourceFile":"core/spec/serializers/spree/events/promotion_serializer_spec.rb"},{"name":"#as_json includes identity attributes","suite":"Spree::Events::RefundSerializer at ./spec/serializers/spree/events/refund_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/serializers/spree/events/refund_serializer_spec.rb"},{"name":"#as_json includes amount","suite":"Spree::Events::RefundSerializer at ./spec/serializers/spree/events/refund_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/serializers/spree/events/refund_serializer_spec.rb"},{"name":"#as_json includes transaction_id","suite":"Spree::Events::RefundSerializer at ./spec/serializers/spree/events/refund_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/serializers/spree/events/refund_serializer_spec.rb"},{"name":"#as_json includes foreign keys","suite":"Spree::Events::RefundSerializer at ./spec/serializers/spree/events/refund_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","suiteSourceFile":"core/spec/serializers/spree/events/refund_serializer_spec.rb"},{"name":"#as_json includes timestamps","suite":"Spree::Events::RefundSerializer at ./spec/serializers/spree/events/refund_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","suiteSourceFile":"core/spec/serializers/spree/events/refund_serializer_spec.rb"},{"name":"#as_json includes identity attributes","suite":"Spree::Events::ReimbursementSerializer at ./spec/serializers/spree/events/reimbursement_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/serializers/spree/events/reimbursement_serializer_spec.rb"},{"name":"#as_json includes reimbursement_status","suite":"Spree::Events::ReimbursementSerializer at ./spec/serializers/spree/events/reimbursement_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/serializers/spree/events/reimbursement_serializer_spec.rb"},{"name":"#as_json includes total","suite":"Spree::Events::ReimbursementSerializer at ./spec/serializers/spree/events/reimbursement_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/serializers/spree/events/reimbursement_serializer_spec.rb"},{"name":"#as_json includes foreign keys","suite":"Spree::Events::ReimbursementSerializer at ./spec/serializers/spree/events/reimbursement_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","suiteSourceFile":"core/spec/serializers/spree/events/reimbursement_serializer_spec.rb"},{"name":"#as_json includes timestamps","suite":"Spree::Events::ReimbursementSerializer at ./spec/serializers/spree/events/reimbursement_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","suiteSourceFile":"core/spec/serializers/spree/events/reimbursement_serializer_spec.rb"},{"name":"#as_json includes identity attributes","suite":"Spree::Events::ReportSerializer at ./spec/serializers/spree/events/report_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/serializers/spree/events/report_serializer_spec.rb"},{"name":"#as_json includes store reference","suite":"Spree::Events::ReportSerializer at ./spec/serializers/spree/events/report_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/serializers/spree/events/report_serializer_spec.rb"},{"name":"#as_json includes user reference","suite":"Spree::Events::ReportSerializer at ./spec/serializers/spree/events/report_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/serializers/spree/events/report_serializer_spec.rb"},{"name":"#as_json includes currency","suite":"Spree::Events::ReportSerializer at ./spec/serializers/spree/events/report_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","suiteSourceFile":"core/spec/serializers/spree/events/report_serializer_spec.rb"},{"name":"#as_json includes date range","suite":"Spree::Events::ReportSerializer at ./spec/serializers/spree/events/report_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","suiteSourceFile":"core/spec/serializers/spree/events/report_serializer_spec.rb"},{"name":"#as_json includes timestamps","suite":"Spree::Events::ReportSerializer at ./spec/serializers/spree/events/report_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","suiteSourceFile":"core/spec/serializers/spree/events/report_serializer_spec.rb"},{"name":"#as_json includes identity attributes","suite":"Spree::Events::ReturnAuthorizationSerializer at ./spec/serializers/spree/events/return_authorization_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/serializers/spree/events/return_authorization_serializer_spec.rb"},{"name":"#as_json includes state as string","suite":"Spree::Events::ReturnAuthorizationSerializer at ./spec/serializers/spree/events/return_authorization_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/serializers/spree/events/return_authorization_serializer_spec.rb"},{"name":"#as_json includes foreign keys","suite":"Spree::Events::ReturnAuthorizationSerializer at ./spec/serializers/spree/events/return_authorization_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/serializers/spree/events/return_authorization_serializer_spec.rb"},{"name":"#as_json includes timestamps","suite":"Spree::Events::ReturnAuthorizationSerializer at ./spec/serializers/spree/events/return_authorization_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","suiteSourceFile":"core/spec/serializers/spree/events/return_authorization_serializer_spec.rb"},{"name":"#as_json does not include associations","suite":"Spree::Events::ReturnAuthorizationSerializer at ./spec/serializers/spree/events/return_authorization_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","suiteSourceFile":"core/spec/serializers/spree/events/return_authorization_serializer_spec.rb"},{"name":"#as_json includes identity attributes","suite":"Spree::Events::ReturnItemSerializer at ./spec/serializers/spree/events/return_item_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/serializers/spree/events/return_item_serializer_spec.rb"},{"name":"#as_json includes status fields","suite":"Spree::Events::ReturnItemSerializer at ./spec/serializers/spree/events/return_item_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/serializers/spree/events/return_item_serializer_spec.rb"},{"name":"#as_json includes amount fields","suite":"Spree::Events::ReturnItemSerializer at ./spec/serializers/spree/events/return_item_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/serializers/spree/events/return_item_serializer_spec.rb"},{"name":"#as_json includes foreign keys","suite":"Spree::Events::ReturnItemSerializer at ./spec/serializers/spree/events/return_item_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","suiteSourceFile":"core/spec/serializers/spree/events/return_item_serializer_spec.rb"},{"name":"#as_json includes timestamps","suite":"Spree::Events::ReturnItemSerializer at ./spec/serializers/spree/events/return_item_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","suiteSourceFile":"core/spec/serializers/spree/events/return_item_serializer_spec.rb"},{"name":"#as_json includes identity attributes","suite":"Spree::Events::ShipmentSerializer at ./spec/serializers/spree/events/shipment_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/serializers/spree/events/shipment_serializer_spec.rb"},{"name":"#as_json includes state as string","suite":"Spree::Events::ShipmentSerializer at ./spec/serializers/spree/events/shipment_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/serializers/spree/events/shipment_serializer_spec.rb"},{"name":"#as_json includes tracking","suite":"Spree::Events::ShipmentSerializer at ./spec/serializers/spree/events/shipment_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/serializers/spree/events/shipment_serializer_spec.rb"},{"name":"#as_json includes cost","suite":"Spree::Events::ShipmentSerializer at ./spec/serializers/spree/events/shipment_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","suiteSourceFile":"core/spec/serializers/spree/events/shipment_serializer_spec.rb"},{"name":"#as_json includes foreign keys","suite":"Spree::Events::ShipmentSerializer at ./spec/serializers/spree/events/shipment_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","suiteSourceFile":"core/spec/serializers/spree/events/shipment_serializer_spec.rb"},{"name":"#as_json includes timestamps","suite":"Spree::Events::ShipmentSerializer at ./spec/serializers/spree/events/shipment_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","suiteSourceFile":"core/spec/serializers/spree/events/shipment_serializer_spec.rb"},{"name":"#as_json does not include associations","suite":"Spree::Events::ShipmentSerializer at ./spec/serializers/spree/events/shipment_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7\"}}","suiteSourceFile":"core/spec/serializers/spree/events/shipment_serializer_spec.rb"},{"name":"#as_json includes identity attributes","suite":"Spree::Events::StockItemSerializer at ./spec/serializers/spree/events/stock_item_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/serializers/spree/events/stock_item_serializer_spec.rb"},{"name":"#as_json includes count_on_hand","suite":"Spree::Events::StockItemSerializer at ./spec/serializers/spree/events/stock_item_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/serializers/spree/events/stock_item_serializer_spec.rb"},{"name":"#as_json includes backorderable","suite":"Spree::Events::StockItemSerializer at ./spec/serializers/spree/events/stock_item_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/serializers/spree/events/stock_item_serializer_spec.rb"},{"name":"#as_json includes foreign keys","suite":"Spree::Events::StockItemSerializer at ./spec/serializers/spree/events/stock_item_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","suiteSourceFile":"core/spec/serializers/spree/events/stock_item_serializer_spec.rb"},{"name":"#as_json includes deleted_at","suite":"Spree::Events::StockItemSerializer at ./spec/serializers/spree/events/stock_item_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","suiteSourceFile":"core/spec/serializers/spree/events/stock_item_serializer_spec.rb"},{"name":"#as_json includes timestamps","suite":"Spree::Events::StockItemSerializer at ./spec/serializers/spree/events/stock_item_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","suiteSourceFile":"core/spec/serializers/spree/events/stock_item_serializer_spec.rb"},{"name":"#as_json includes identity attributes","suite":"Spree::Events::StockMovementSerializer at ./spec/serializers/spree/events/stock_movement_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/serializers/spree/events/stock_movement_serializer_spec.rb"},{"name":"#as_json includes quantity","suite":"Spree::Events::StockMovementSerializer at ./spec/serializers/spree/events/stock_movement_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/serializers/spree/events/stock_movement_serializer_spec.rb"},{"name":"#as_json includes action","suite":"Spree::Events::StockMovementSerializer at ./spec/serializers/spree/events/stock_movement_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/serializers/spree/events/stock_movement_serializer_spec.rb"},{"name":"#as_json includes originator polymorphic reference","suite":"Spree::Events::StockMovementSerializer at ./spec/serializers/spree/events/stock_movement_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","suiteSourceFile":"core/spec/serializers/spree/events/stock_movement_serializer_spec.rb"},{"name":"#as_json includes stock_item_id","suite":"Spree::Events::StockMovementSerializer at ./spec/serializers/spree/events/stock_movement_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","suiteSourceFile":"core/spec/serializers/spree/events/stock_movement_serializer_spec.rb"},{"name":"#as_json includes timestamps","suite":"Spree::Events::StockMovementSerializer at ./spec/serializers/spree/events/stock_movement_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","suiteSourceFile":"core/spec/serializers/spree/events/stock_movement_serializer_spec.rb"},{"name":"#as_json includes identity attributes","suite":"Spree::Events::StockTransferSerializer at ./spec/serializers/spree/events/stock_transfer_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/serializers/spree/events/stock_transfer_serializer_spec.rb"},{"name":"#as_json includes type","suite":"Spree::Events::StockTransferSerializer at ./spec/serializers/spree/events/stock_transfer_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/serializers/spree/events/stock_transfer_serializer_spec.rb"},{"name":"#as_json includes reference","suite":"Spree::Events::StockTransferSerializer at ./spec/serializers/spree/events/stock_transfer_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/serializers/spree/events/stock_transfer_serializer_spec.rb"},{"name":"#as_json includes location foreign keys","suite":"Spree::Events::StockTransferSerializer at ./spec/serializers/spree/events/stock_transfer_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","suiteSourceFile":"core/spec/serializers/spree/events/stock_transfer_serializer_spec.rb"},{"name":"#as_json includes timestamps","suite":"Spree::Events::StockTransferSerializer at ./spec/serializers/spree/events/stock_transfer_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","suiteSourceFile":"core/spec/serializers/spree/events/stock_transfer_serializer_spec.rb"},{"name":"#as_json includes identity attributes","suite":"Spree::Events::StoreCreditSerializer at ./spec/serializers/spree/events/store_credit_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/serializers/spree/events/store_credit_serializer_spec.rb"},{"name":"#as_json includes amount fields","suite":"Spree::Events::StoreCreditSerializer at ./spec/serializers/spree/events/store_credit_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/serializers/spree/events/store_credit_serializer_spec.rb"},{"name":"#as_json includes memo","suite":"Spree::Events::StoreCreditSerializer at ./spec/serializers/spree/events/store_credit_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/serializers/spree/events/store_credit_serializer_spec.rb"},{"name":"#as_json includes user foreign keys","suite":"Spree::Events::StoreCreditSerializer at ./spec/serializers/spree/events/store_credit_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","suiteSourceFile":"core/spec/serializers/spree/events/store_credit_serializer_spec.rb"},{"name":"#as_json includes category and type ids","suite":"Spree::Events::StoreCreditSerializer at ./spec/serializers/spree/events/store_credit_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","suiteSourceFile":"core/spec/serializers/spree/events/store_credit_serializer_spec.rb"},{"name":"#as_json includes store_id","suite":"Spree::Events::StoreCreditSerializer at ./spec/serializers/spree/events/store_credit_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","suiteSourceFile":"core/spec/serializers/spree/events/store_credit_serializer_spec.rb"},{"name":"#as_json includes originator polymorphic reference","suite":"Spree::Events::StoreCreditSerializer at ./spec/serializers/spree/events/store_credit_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7\"}}","suiteSourceFile":"core/spec/serializers/spree/events/store_credit_serializer_spec.rb"},{"name":"#as_json includes deleted_at","suite":"Spree::Events::StoreCreditSerializer at ./spec/serializers/spree/events/store_credit_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8\"}}","suiteSourceFile":"core/spec/serializers/spree/events/store_credit_serializer_spec.rb"},{"name":"#as_json includes timestamps","suite":"Spree::Events::StoreCreditSerializer at ./spec/serializers/spree/events/store_credit_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:9\"}}","suiteSourceFile":"core/spec/serializers/spree/events/store_credit_serializer_spec.rb"},{"name":"#as_json includes identity attributes","suite":"Spree::Events::UserSerializer at ./spec/serializers/spree/events/user_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/serializers/spree/events/user_serializer_spec.rb"},{"name":"#as_json includes timestamps","suite":"Spree::Events::UserSerializer at ./spec/serializers/spree/events/user_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/serializers/spree/events/user_serializer_spec.rb"},{"name":"#as_json does not include sensitive data","suite":"Spree::Events::UserSerializer at ./spec/serializers/spree/events/user_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/serializers/spree/events/user_serializer_spec.rb"},{"name":"#as_json includes identity attributes","suite":"Spree::Events::VariantSerializer at ./spec/serializers/spree/events/variant_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/serializers/spree/events/variant_serializer_spec.rb"},{"name":"#as_json includes barcode","suite":"Spree::Events::VariantSerializer at ./spec/serializers/spree/events/variant_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/serializers/spree/events/variant_serializer_spec.rb"},{"name":"#as_json includes is_master","suite":"Spree::Events::VariantSerializer at ./spec/serializers/spree/events/variant_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/serializers/spree/events/variant_serializer_spec.rb"},{"name":"#as_json includes position","suite":"Spree::Events::VariantSerializer at ./spec/serializers/spree/events/variant_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","suiteSourceFile":"core/spec/serializers/spree/events/variant_serializer_spec.rb"},{"name":"#as_json includes dimensions","suite":"Spree::Events::VariantSerializer at ./spec/serializers/spree/events/variant_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","suiteSourceFile":"core/spec/serializers/spree/events/variant_serializer_spec.rb"},{"name":"#as_json includes cost fields","suite":"Spree::Events::VariantSerializer at ./spec/serializers/spree/events/variant_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","suiteSourceFile":"core/spec/serializers/spree/events/variant_serializer_spec.rb"},{"name":"#as_json includes track_inventory","suite":"Spree::Events::VariantSerializer at ./spec/serializers/spree/events/variant_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7\"}}","suiteSourceFile":"core/spec/serializers/spree/events/variant_serializer_spec.rb"},{"name":"#as_json includes foreign keys","suite":"Spree::Events::VariantSerializer at ./spec/serializers/spree/events/variant_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8\"}}","suiteSourceFile":"core/spec/serializers/spree/events/variant_serializer_spec.rb"},{"name":"#as_json includes discontinue_on","suite":"Spree::Events::VariantSerializer at ./spec/serializers/spree/events/variant_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:9\"}}","suiteSourceFile":"core/spec/serializers/spree/events/variant_serializer_spec.rb"},{"name":"#as_json includes deleted_at","suite":"Spree::Events::VariantSerializer at ./spec/serializers/spree/events/variant_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:10\"}}","suiteSourceFile":"core/spec/serializers/spree/events/variant_serializer_spec.rb"},{"name":"#as_json includes timestamps","suite":"Spree::Events::VariantSerializer at ./spec/serializers/spree/events/variant_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:11\"}}","suiteSourceFile":"core/spec/serializers/spree/events/variant_serializer_spec.rb"},{"name":"#as_json includes identity attributes","suite":"Spree::Events::WishedItemSerializer at ./spec/serializers/spree/events/wished_item_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/serializers/spree/events/wished_item_serializer_spec.rb"},{"name":"#as_json includes quantity","suite":"Spree::Events::WishedItemSerializer at ./spec/serializers/spree/events/wished_item_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/serializers/spree/events/wished_item_serializer_spec.rb"},{"name":"#as_json includes foreign keys","suite":"Spree::Events::WishedItemSerializer at ./spec/serializers/spree/events/wished_item_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/serializers/spree/events/wished_item_serializer_spec.rb"},{"name":"#as_json includes timestamps","suite":"Spree::Events::WishedItemSerializer at ./spec/serializers/spree/events/wished_item_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","suiteSourceFile":"core/spec/serializers/spree/events/wished_item_serializer_spec.rb"},{"name":"#as_json includes identity attributes","suite":"Spree::Events::WishlistSerializer at ./spec/serializers/spree/events/wishlist_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/serializers/spree/events/wishlist_serializer_spec.rb"},{"name":"#as_json includes privacy settings","suite":"Spree::Events::WishlistSerializer at ./spec/serializers/spree/events/wishlist_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/serializers/spree/events/wishlist_serializer_spec.rb"},{"name":"#as_json includes foreign keys","suite":"Spree::Events::WishlistSerializer at ./spec/serializers/spree/events/wishlist_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/serializers/spree/events/wishlist_serializer_spec.rb"},{"name":"#as_json includes timestamps","suite":"Spree::Events::WishlistSerializer at ./spec/serializers/spree/events/wishlist_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","suiteSourceFile":"core/spec/serializers/spree/events/wishlist_serializer_spec.rb"},{"name":"#as_json does not include token","suite":"Spree::Events::WishlistSerializer at ./spec/serializers/spree/events/wishlist_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","suiteSourceFile":"core/spec/serializers/spree/events/wishlist_serializer_spec.rb"},{"name":"#call with valid params creates address","suite":"Spree::Account::Addresses::Create at ./spec/services/spree/account/addresses/create_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/services/spree/account/addresses/create_spec.rb"},{"name":"#call with valid params without user example at ./spec/services/spree/account/addresses/create_spec.rb:38","suite":"Spree::Account::Addresses::Create at ./spec/services/spree/account/addresses/create_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","suiteSourceFile":"core/spec/services/spree/account/addresses/create_spec.rb"},{"name":"#call with valid params user default address when created address is first user address assigns created address as default user bill address","suite":"Spree::Account::Addresses::Create at ./spec/services/spree/account/addresses/create_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:1:1\"}}","suiteSourceFile":"core/spec/services/spree/account/addresses/create_spec.rb"},{"name":"#call with valid params user default address when created address is first user address assigns created address as default user ship address","suite":"Spree::Account::Addresses::Create at ./spec/services/spree/account/addresses/create_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:1:2\"}}","suiteSourceFile":"core/spec/services/spree/account/addresses/create_spec.rb"},{"name":"#call with valid params user default address when user has some address already with default bill and ship address does not assign created address as default user bill address","suite":"Spree::Account::Addresses::Create at ./spec/services/spree/account/addresses/create_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:2:1:1\"}}","suiteSourceFile":"core/spec/services/spree/account/addresses/create_spec.rb"},{"name":"#call with valid params user default address when user has some address already with default bill and ship address does not assign created address as default user ship address","suite":"Spree::Account::Addresses::Create at ./spec/services/spree/account/addresses/create_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:2:1:2\"}}","suiteSourceFile":"core/spec/services/spree/account/addresses/create_spec.rb"},{"name":"#call with valid params user default address when user has some address already without default bill and ship address does not assign created address as default user bill address","suite":"Spree::Account::Addresses::Create at ./spec/services/spree/account/addresses/create_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:2:2:1\"}}","suiteSourceFile":"core/spec/services/spree/account/addresses/create_spec.rb"},{"name":"#call with valid params user default address when user has some address already without default bill and ship address does not assign created address as default user ship address","suite":"Spree::Account::Addresses::Create at ./spec/services/spree/account/addresses/create_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:2:2:2\"}}","suiteSourceFile":"core/spec/services/spree/account/addresses/create_spec.rb"},{"name":"#call with valid params when order is passed assigns a new ship address to the order","suite":"Spree::Account::Addresses::Create at ./spec/services/spree/account/addresses/create_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:4:1\"}}","suiteSourceFile":"core/spec/services/spree/account/addresses/create_spec.rb"},{"name":"#call with valid params when order is passed updates order to address state","suite":"Spree::Account::Addresses::Create at ./spec/services/spree/account/addresses/create_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:4:2\"}}","suiteSourceFile":"core/spec/services/spree/account/addresses/create_spec.rb"},{"name":"#call with valid params when default billing is passed updates user's bill address","suite":"Spree::Account::Addresses::Create at ./spec/services/spree/account/addresses/create_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:5:1\"}}","suiteSourceFile":"core/spec/services/spree/account/addresses/create_spec.rb"},{"name":"#call with valid params when default shipping is passed updates user's ship address","suite":"Spree::Account::Addresses::Create at ./spec/services/spree/account/addresses/create_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:6:1\"}}","suiteSourceFile":"core/spec/services/spree/account/addresses/create_spec.rb"},{"name":"#call with invalid params returns errors","suite":"Spree::Account::Addresses::Create at ./spec/services/spree/account/addresses/create_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/services/spree/account/addresses/create_spec.rb"},{"name":"#call with valid params creates address","suite":"Spree::Account::Addresses::Update at ./spec/services/spree/account/addresses/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/services/spree/account/addresses/update_spec.rb"},{"name":"#call with invalid params returns errors","suite":"Spree::Account::Addresses::Update at ./spec/services/spree/account/addresses/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/services/spree/account/addresses/update_spec.rb"},{"name":"#call with valid params creates new user","suite":"Spree::Account::Create at ./spec/services/spree/account/create_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/services/spree/account/create_spec.rb"},{"name":"#call with valid params creates user with given params","suite":"Spree::Account::Create at ./spec/services/spree/account/create_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2\"}}","suiteSourceFile":"core/spec/services/spree/account/create_spec.rb"},{"name":"#call with valid params result is successful","suite":"Spree::Account::Create at ./spec/services/spree/account/create_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3\"}}","suiteSourceFile":"core/spec/services/spree/account/create_spec.rb"},{"name":"#call with valid params when all params are given behaves like user not created does not create new user","suite":"Spree::Account::Update at ./spec/services/spree/account/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1:1\"}}","suiteSourceFile":"core/spec/services/spree/account/update_spec.rb"},{"name":"#call with valid params when all params are given behaves like successful response result is successful","suite":"Spree::Account::Update at ./spec/services/spree/account/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:2:1\"}}","suiteSourceFile":"core/spec/services/spree/account/update_spec.rb"},{"name":"#call with valid params when all params are given behaves like updated attributes updates user with given params","suite":"Spree::Account::Update at ./spec/services/spree/account/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:3:1\"}}","suiteSourceFile":"core/spec/services/spree/account/update_spec.rb"},{"name":"#call with valid params when all params are given behaves like both default addresses changed changes both default bill address and ship address","suite":"Spree::Account::Update at ./spec/services/spree/account/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:4:1\"}}","suiteSourceFile":"core/spec/services/spree/account/update_spec.rb"},{"name":"#call with valid params when only address params are given behaves like user not created does not create new user","suite":"Spree::Account::Update at ./spec/services/spree/account/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1:1\"}}","suiteSourceFile":"core/spec/services/spree/account/update_spec.rb"},{"name":"#call with valid params when only address params are given behaves like successful response result is successful","suite":"Spree::Account::Update at ./spec/services/spree/account/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:2:1\"}}","suiteSourceFile":"core/spec/services/spree/account/update_spec.rb"},{"name":"#call with valid params when only address params are given behaves like updated attributes updates user with given params","suite":"Spree::Account::Update at ./spec/services/spree/account/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:3:1\"}}","suiteSourceFile":"core/spec/services/spree/account/update_spec.rb"},{"name":"#call with valid params when only address params are given behaves like both default addresses changed changes both default bill address and ship address","suite":"Spree::Account::Update at ./spec/services/spree/account/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:4:1\"}}","suiteSourceFile":"core/spec/services/spree/account/update_spec.rb"},{"name":"#call with valid params when only address params are given when only bill address is given changes only user default bill address","suite":"Spree::Account::Update at ./spec/services/spree/account/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:5:4\"}}","suiteSourceFile":"core/spec/services/spree/account/update_spec.rb"},{"name":"#call with valid params when only address params are given when only bill address is given behaves like user not created does not create new user","suite":"Spree::Account::Update at ./spec/services/spree/account/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:5:1:1\"}}","suiteSourceFile":"core/spec/services/spree/account/update_spec.rb"},{"name":"#call with valid params when only address params are given when only bill address is given behaves like successful response result is successful","suite":"Spree::Account::Update at ./spec/services/spree/account/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:5:2:1\"}}","suiteSourceFile":"core/spec/services/spree/account/update_spec.rb"},{"name":"#call with valid params when only address params are given when only bill address is given behaves like updated attributes updates user with given params","suite":"Spree::Account::Update at ./spec/services/spree/account/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:5:3:1\"}}","suiteSourceFile":"core/spec/services/spree/account/update_spec.rb"},{"name":"#call with valid params when only address params are given when only ship address is given changes only user default ship address","suite":"Spree::Account::Update at ./spec/services/spree/account/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:6:4\"}}","suiteSourceFile":"core/spec/services/spree/account/update_spec.rb"},{"name":"#call with valid params when only address params are given when only ship address is given behaves like user not created does not create new user","suite":"Spree::Account::Update at ./spec/services/spree/account/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:6:1:1\"}}","suiteSourceFile":"core/spec/services/spree/account/update_spec.rb"},{"name":"#call with valid params when only address params are given when only ship address is given behaves like successful response result is successful","suite":"Spree::Account::Update at ./spec/services/spree/account/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:6:2:1\"}}","suiteSourceFile":"core/spec/services/spree/account/update_spec.rb"},{"name":"#call with valid params when only address params are given when only ship address is given behaves like updated attributes updates user with given params","suite":"Spree::Account::Update at ./spec/services/spree/account/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:6:3:1\"}}","suiteSourceFile":"core/spec/services/spree/account/update_spec.rb"},{"name":"#validate when no phone is provided behaves like does not add a phone error does not add an error","suite":"Spree::Addresses::PhoneValidator at ./spec/services/spree/addresses/phone_validator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","suiteSourceFile":"core/spec/services/spree/addresses/phone_validator_spec.rb"},{"name":"#validate when no country is provided behaves like does not add a phone error does not add an error","suite":"Spree::Addresses::PhoneValidator at ./spec/services/spree/addresses/phone_validator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1:1\"}}","suiteSourceFile":"core/spec/services/spree/addresses/phone_validator_spec.rb"},{"name":"#validate when no country iso is provided behaves like does not add a phone error does not add an error","suite":"Spree::Addresses::PhoneValidator at ./spec/services/spree/addresses/phone_validator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1:1\"}}","suiteSourceFile":"core/spec/services/spree/addresses/phone_validator_spec.rb"},{"name":"#validate when phone is provided and country is US and phone is valid without prefix behaves like does not add a phone error does not add an error","suite":"Spree::Addresses::PhoneValidator at ./spec/services/spree/addresses/phone_validator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1:1:1:1:1\"}}","suiteSourceFile":"core/spec/services/spree/addresses/phone_validator_spec.rb"},{"name":"#validate when phone is provided and country is US and phone is valid and has prefix with plus sign behaves like does not add a phone error does not add an error","suite":"Spree::Addresses::PhoneValidator at ./spec/services/spree/addresses/phone_validator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1:1:2:1:1\"}}","suiteSourceFile":"core/spec/services/spree/addresses/phone_validator_spec.rb"},{"name":"#validate when phone is provided and country is US and phone is valid and has prefix without plus sign behaves like does not add a phone error does not add an error","suite":"Spree::Addresses::PhoneValidator at ./spec/services/spree/addresses/phone_validator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1:1:3:1:1\"}}","suiteSourceFile":"core/spec/services/spree/addresses/phone_validator_spec.rb"},{"name":"#validate when phone is provided and country is US and phone is valid and has dashes behaves like does not add a phone error does not add an error","suite":"Spree::Addresses::PhoneValidator at ./spec/services/spree/addresses/phone_validator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1:1:4:1:1\"}}","suiteSourceFile":"core/spec/services/spree/addresses/phone_validator_spec.rb"},{"name":"#validate when phone is provided and country is US and phone is valid and has dashes and prefix behaves like does not add a phone error does not add an error","suite":"Spree::Addresses::PhoneValidator at ./spec/services/spree/addresses/phone_validator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1:1:5:1:1\"}}","suiteSourceFile":"core/spec/services/spree/addresses/phone_validator_spec.rb"},{"name":"#validate when phone is provided and country is US and phone is valid and has dashes and prefix without plus sign behaves like does not add a phone error does not add an error","suite":"Spree::Addresses::PhoneValidator at ./spec/services/spree/addresses/phone_validator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1:1:6:1:1\"}}","suiteSourceFile":"core/spec/services/spree/addresses/phone_validator_spec.rb"},{"name":"#validate when phone is provided and country is US and phone is valid and has dashes and prefix after dash behaves like does not add a phone error does not add an error","suite":"Spree::Addresses::PhoneValidator at ./spec/services/spree/addresses/phone_validator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1:1:7:1:1\"}}","suiteSourceFile":"core/spec/services/spree/addresses/phone_validator_spec.rb"},{"name":"#validate when phone is provided and country is US and phone is valid and has dashed and parenthesized behaves like does not add a phone error does not add an error","suite":"Spree::Addresses::PhoneValidator at ./spec/services/spree/addresses/phone_validator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1:1:8:1:1\"}}","suiteSourceFile":"core/spec/services/spree/addresses/phone_validator_spec.rb"},{"name":"#validate when phone is provided and country is US and phone is valid and has dashed and parenthesized and prefix behaves like does not add a phone error does not add an error","suite":"Spree::Addresses::PhoneValidator at ./spec/services/spree/addresses/phone_validator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1:1:9:1:1\"}}","suiteSourceFile":"core/spec/services/spree/addresses/phone_validator_spec.rb"},{"name":"#validate when phone is provided and country is US and phone is valid and has dashed and parenthesized and prefix without plus sign behaves like does not add a phone error does not add an error","suite":"Spree::Addresses::PhoneValidator at ./spec/services/spree/addresses/phone_validator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1:1:10:1:1\"}}","suiteSourceFile":"core/spec/services/spree/addresses/phone_validator_spec.rb"},{"name":"#validate when phone is provided and country is US and phone is invalid and phone is from another country adds an error","suite":"Spree::Addresses::PhoneValidator at ./spec/services/spree/addresses/phone_validator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1:2:1:1\"}}","suiteSourceFile":"core/spec/services/spree/addresses/phone_validator_spec.rb"},{"name":"#validate when phone is provided and country is US and phone is invalid because not matching US area code adds an error","suite":"Spree::Addresses::PhoneValidator at ./spec/services/spree/addresses/phone_validator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1:2:2:1\"}}","suiteSourceFile":"core/spec/services/spree/addresses/phone_validator_spec.rb"},{"name":"#validate when phone is provided because country is not matching phone adds an error","suite":"Spree::Addresses::PhoneValidator at ./spec/services/spree/addresses/phone_validator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:2:1\"}}","suiteSourceFile":"core/spec/services/spree/addresses/phone_validator_spec.rb"},{"name":"#call with valid params when address is editable updates address","suite":"Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","suiteSourceFile":"core/spec/services/spree/addresses/update_spec.rb"},{"name":"#call with valid params when address is editable when user sets address as default shipping updates user's ship address","suite":"Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:2:1\"}}","suiteSourceFile":"core/spec/services/spree/addresses/update_spec.rb"},{"name":"#call with valid params when address is editable when user sets address as default billing updates user's bill address","suite":"Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:3:1\"}}","suiteSourceFile":"core/spec/services/spree/addresses/update_spec.rb"},{"name":"#call with valid params when address is editable when order is passed updates order to address state","suite":"Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:4:1\"}}","suiteSourceFile":"core/spec/services/spree/addresses/update_spec.rb"},{"name":"#call with valid params when address is editable behaves like updating with same params when params are the same does not update address","suite":"Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:5:1:1\"}}","suiteSourceFile":"core/spec/services/spree/addresses/update_spec.rb"},{"name":"#call with valid params when address is editable behaves like updating with same params when params are the same does not create new address","suite":"Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:5:1:2\"}}","suiteSourceFile":"core/spec/services/spree/addresses/update_spec.rb"},{"name":"#call with valid params when address is editable behaves like updating with same params when params are the same returns success","suite":"Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:5:1:3\"}}","suiteSourceFile":"core/spec/services/spree/addresses/update_spec.rb"},{"name":"#call with valid params when address is editable behaves like updating with same params when params are the same does not update address nor create when attribute changed from nil to blank string","suite":"Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:5:1:4\"}}","suiteSourceFile":"core/spec/services/spree/addresses/update_spec.rb"},{"name":"#call with valid params when address is editable behaves like updating with same params when params are the same does not update address nor create when attribute changed only in case","suite":"Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:5:1:5\"}}","suiteSourceFile":"core/spec/services/spree/addresses/update_spec.rb"},{"name":"#call with valid params when address is editable behaves like updating with same params when params are the same when setting the create_new_address_on_update param to true does not create new address","suite":"Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:5:1:6:1\"}}","suiteSourceFile":"core/spec/services/spree/addresses/update_spec.rb"},{"name":"#call with valid params when address is editable behaves like updating with same params when user only sets the address as default shipping updates user's ship address","suite":"Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:5:2:1\"}}","suiteSourceFile":"core/spec/services/spree/addresses/update_spec.rb"},{"name":"#call with valid params when address is editable behaves like updating with same params when user only sets the address as default billing updates user's bill address","suite":"Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:5:3:1\"}}","suiteSourceFile":"core/spec/services/spree/addresses/update_spec.rb"},{"name":"#call with valid params when address is editable when the create_new_address_on_update param is set to true creates a new address and keeps the previous one","suite":"Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:6:1\"}}","suiteSourceFile":"core/spec/services/spree/addresses/update_spec.rb"},{"name":"#call with valid params when address is editable when the create_new_address_on_update param is set to true with a user doesn't change the user's bill and ship addresses by default","suite":"Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:6:2:1\"}}","suiteSourceFile":"core/spec/services/spree/addresses/update_spec.rb"},{"name":"#call with valid params when address is editable when the create_new_address_on_update param is set to true with a user when the default_billing param is set to true changes user's bill address","suite":"Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:6:2:2:1\"}}","suiteSourceFile":"core/spec/services/spree/addresses/update_spec.rb"},{"name":"#call with valid params when address is editable when the create_new_address_on_update param is set to true with a user when the default_shipping param is set to true changes user's ship address","suite":"Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:6:2:3:1\"}}","suiteSourceFile":"core/spec/services/spree/addresses/update_spec.rb"},{"name":"#call with valid params when address is editable when the create_new_address_on_update param is set to true with an order doesn't change the order addresses","suite":"Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:6:3:1\"}}","suiteSourceFile":"core/spec/services/spree/addresses/update_spec.rb"},{"name":"#call with valid params when address is uneditable when there have been created same address with new params when is not deleted takes that address","suite":"Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1:1:1\"}}","suiteSourceFile":"core/spec/services/spree/addresses/update_spec.rb"},{"name":"#call with valid params when address is uneditable when there have been created same address with new params when its soft deleted creates new address","suite":"Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1:2:1\"}}","suiteSourceFile":"core/spec/services/spree/addresses/update_spec.rb"},{"name":"#call with valid params when address is uneditable when there is no such existing address with given params creates new address and soft-deletes the previous one","suite":"Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:2:1\"}}","suiteSourceFile":"core/spec/services/spree/addresses/update_spec.rb"},{"name":"#call with valid params when address is uneditable when there is no such existing address with given params when the old address was set as default billing sets the new address as default billing","suite":"Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:2:2:1\"}}","suiteSourceFile":"core/spec/services/spree/addresses/update_spec.rb"},{"name":"#call with valid params when address is uneditable when there is no such existing address with given params when the old address was set as default shipping sets the new address as default shipping","suite":"Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:2:3:1\"}}","suiteSourceFile":"core/spec/services/spree/addresses/update_spec.rb"},{"name":"#call with valid params when address is uneditable when user sets address as default shipping updates user's ship address","suite":"Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:3:1\"}}","suiteSourceFile":"core/spec/services/spree/addresses/update_spec.rb"},{"name":"#call with valid params when address is uneditable when user sets address as default billing updates user's bill address","suite":"Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:4:1\"}}","suiteSourceFile":"core/spec/services/spree/addresses/update_spec.rb"},{"name":"#call with valid params when address is uneditable when order with deleted address is passed updates order to address state","suite":"Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:5:1\"}}","suiteSourceFile":"core/spec/services/spree/addresses/update_spec.rb"},{"name":"#call with valid params when address is uneditable when order with deleted address is passed updates order ship address","suite":"Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:5:2\"}}","suiteSourceFile":"core/spec/services/spree/addresses/update_spec.rb"},{"name":"#call with valid params when address is uneditable when order with deleted address is passed updates order bill address","suite":"Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:5:3\"}}","suiteSourceFile":"core/spec/services/spree/addresses/update_spec.rb"},{"name":"#call with valid params when address is uneditable behaves like updating with same params when params are the same does not update address","suite":"Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:6:1:1\"}}","suiteSourceFile":"core/spec/services/spree/addresses/update_spec.rb"},{"name":"#call with valid params when address is uneditable behaves like updating with same params when params are the same does not create new address","suite":"Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:6:1:2\"}}","suiteSourceFile":"core/spec/services/spree/addresses/update_spec.rb"},{"name":"#call with valid params when address is uneditable behaves like updating with same params when params are the same returns success","suite":"Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:6:1:3\"}}","suiteSourceFile":"core/spec/services/spree/addresses/update_spec.rb"},{"name":"#call with valid params when address is uneditable behaves like updating with same params when params are the same does not update address nor create when attribute changed from nil to blank string","suite":"Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:6:1:4\"}}","suiteSourceFile":"core/spec/services/spree/addresses/update_spec.rb"},{"name":"#call with valid params when address is uneditable behaves like updating with same params when params are the same does not update address nor create when attribute changed only in case","suite":"Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:6:1:5\"}}","suiteSourceFile":"core/spec/services/spree/addresses/update_spec.rb"},{"name":"#call with valid params when address is uneditable behaves like updating with same params when params are the same when setting the create_new_address_on_update param to true does not create new address","suite":"Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:6:1:6:1\"}}","suiteSourceFile":"core/spec/services/spree/addresses/update_spec.rb"},{"name":"#call with valid params when address is uneditable behaves like updating with same params when user only sets the address as default shipping updates user's ship address","suite":"Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:6:2:1\"}}","suiteSourceFile":"core/spec/services/spree/addresses/update_spec.rb"},{"name":"#call with valid params when address is uneditable behaves like updating with same params when user only sets the address as default billing updates user's bill address","suite":"Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:6:3:1\"}}","suiteSourceFile":"core/spec/services/spree/addresses/update_spec.rb"},{"name":"#call with valid params when address is uneditable when the create_new_address_on_update param is set to true creates a new address and keeps the previous one","suite":"Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:7:1\"}}","suiteSourceFile":"core/spec/services/spree/addresses/update_spec.rb"},{"name":"#call with valid params when address is uneditable when the create_new_address_on_update param is set to true with a user doesn't change the user's bill and ship addresses by default","suite":"Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:7:2:1\"}}","suiteSourceFile":"core/spec/services/spree/addresses/update_spec.rb"},{"name":"#call with valid params when address is uneditable when the create_new_address_on_update param is set to true with a user when the default_billing param is set to true changes user's bill address","suite":"Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:7:2:2:1\"}}","suiteSourceFile":"core/spec/services/spree/addresses/update_spec.rb"},{"name":"#call with valid params when address is uneditable when the create_new_address_on_update param is set to true with a user when the default_shipping param is set to true changes user's ship address","suite":"Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:7:2:3:1\"}}","suiteSourceFile":"core/spec/services/spree/addresses/update_spec.rb"},{"name":"#call with valid params when address is uneditable when the create_new_address_on_update param is set to true with an order doesn't change the order addresses","suite":"Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:7:3:1\"}}","suiteSourceFile":"core/spec/services/spree/addresses/update_spec.rb"},{"name":"#call with invalid params returns errors","suite":"Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/services/spree/addresses/update_spec.rb"},{"name":"add line item to order change by one and recalculate amount","suite":"Spree::Cart::AddItem at ./spec/services/spree/cart/add_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/services/spree/cart/add_item_spec.rb"},{"name":"with same line item not to add","suite":"Spree::Cart::AddItem at ./spec/services/spree/cart/add_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/services/spree/cart/add_item_spec.rb"},{"name":"with given shipment ensure shipment calls update_amounts instead of order calling ensure_updated_shipments","suite":"Spree::Cart::AddItem at ./spec/services/spree/cart/add_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/services/spree/cart/add_item_spec.rb"},{"name":"not given a shipment ensures updated shipments","suite":"Spree::Cart::AddItem at ./spec/services/spree/cart/add_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/services/spree/cart/add_item_spec.rb"},{"name":"with store_credits payment example at ./spec/services/spree/cart/add_item_spec.rb:62","suite":"Spree::Cart::AddItem at ./spec/services/spree/cart/add_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","suiteSourceFile":"core/spec/services/spree/cart/add_item_spec.rb"},{"name":"running promotions one active order promotion creates valid discount on order","suite":"Spree::Cart::AddItem at ./spec/services/spree/cart/add_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1:1\"}}","suiteSourceFile":"core/spec/services/spree/cart/add_item_spec.rb"},{"name":"running promotions one active line item promotion creates valid discount on order","suite":"Spree::Cart::AddItem at ./spec/services/spree/cart/add_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2:1\"}}","suiteSourceFile":"core/spec/services/spree/cart/add_item_spec.rb"},{"name":"running promotions VAT for variant with percent promotion updates included_tax_total","suite":"Spree::Cart::AddItem at ./spec/services/spree/cart/add_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:3:1\"}}","suiteSourceFile":"core/spec/services/spree/cart/add_item_spec.rb"},{"name":"running promotions VAT for variant with percent promotion updates included_tax_total after adding two line items","suite":"Spree::Cart::AddItem at ./spec/services/spree/cart/add_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:3:2\"}}","suiteSourceFile":"core/spec/services/spree/cart/add_item_spec.rb"},{"name":"pass valid params hash in options example at ./spec/services/spree/cart/add_item_spec.rb:136","suite":"Spree::Cart::AddItem at ./spec/services/spree/cart/add_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","suiteSourceFile":"core/spec/services/spree/cart/add_item_spec.rb"},{"name":"pass invalid arguments different quantity in argument and in options take value from options","suite":"Spree::Cart::AddItem at ./spec/services/spree/cart/add_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1:1\"}}","suiteSourceFile":"core/spec/services/spree/cart/add_item_spec.rb"},{"name":"pass invalid arguments different quantity no quantity in argument and in params set default","suite":"Spree::Cart::AddItem at ./spec/services/spree/cart/add_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2:1\"}}","suiteSourceFile":"core/spec/services/spree/cart/add_item_spec.rb"},{"name":"pass invalid arguments not permitted example at ./spec/services/spree/cart/add_item_spec.rb:171","suite":"Spree::Cart::AddItem at ./spec/services/spree/cart/add_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:3:1\"}}","suiteSourceFile":"core/spec/services/spree/cart/add_item_spec.rb"},{"name":"pass invalid arguments pass non-existing variant example at ./spec/services/spree/cart/add_item_spec.rb:184","suite":"Spree::Cart::AddItem at ./spec/services/spree/cart/add_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:4:1\"}}","suiteSourceFile":"core/spec/services/spree/cart/add_item_spec.rb"},{"name":"pass invalid arguments variant have not desired quantity example at ./spec/services/spree/cart/add_item_spec.rb:196","suite":"Spree::Cart::AddItem at ./spec/services/spree/cart/add_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:5:1\"}}","suiteSourceFile":"core/spec/services/spree/cart/add_item_spec.rb"},{"name":"pass invalid arguments variant has been descontinued example at ./spec/services/spree/cart/add_item_spec.rb:207","suite":"Spree::Cart::AddItem at ./spec/services/spree/cart/add_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:6:1\"}}","suiteSourceFile":"core/spec/services/spree/cart/add_item_spec.rb"},{"name":"setting metadata private metadata example at ./spec/services/spree/cart/add_item_spec.rb:221","suite":"Spree::Cart::AddItem at ./spec/services/spree/cart/add_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1:1\"}}","suiteSourceFile":"core/spec/services/spree/cart/add_item_spec.rb"},{"name":"setting metadata public metadata example at ./spec/services/spree/cart/add_item_spec.rb:229","suite":"Spree::Cart::AddItem at ./spec/services/spree/cart/add_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:2:1\"}}","suiteSourceFile":"core/spec/services/spree/cart/add_item_spec.rb"},{"name":"when variant has price in the cart currency, but with amount set to nil does not add the item and raises error","suite":"Spree::Cart::AddItem at ./spec/services/spree/cart/add_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1\"}}","suiteSourceFile":"core/spec/services/spree/cart/add_item_spec.rb"},{"name":"when guest order is given assigns order to user","suite":"Spree::Cart::Associate at ./spec/services/spree/cart/associate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/services/spree/cart/associate_spec.rb"},{"name":"when already assigned order is given returns failure","suite":"Spree::Cart::Associate at ./spec/services/spree/cart/associate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/services/spree/cart/associate_spec.rb"},{"name":"when switching to a supported currency when product has a price in given currency changes order and line items currency","suite":"Spree::Cart::ChangeCurrency at ./spec/services/spree/cart/change_currency_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/services/spree/cart/change_currency_spec.rb"},{"name":"when switching to a supported currency when product has a price in given currency removes the shipment and restarts the checkout flow","suite":"Spree::Cart::ChangeCurrency at ./spec/services/spree/cart/change_currency_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2\"}}","suiteSourceFile":"core/spec/services/spree/cart/change_currency_spec.rb"},{"name":"when switching to a supported currency when product has a price in given currency when the order has no shipment does not restart the checkout flow","suite":"Spree::Cart::ChangeCurrency at ./spec/services/spree/cart/change_currency_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:1\"}}","suiteSourceFile":"core/spec/services/spree/cart/change_currency_spec.rb"},{"name":"when switching to an unsupported currency returns failure","suite":"Spree::Cart::ChangeCurrency at ./spec/services/spree/cart/change_currency_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/services/spree/cart/change_currency_spec.rb"},{"name":"when there are items that are not available in the new currency removes them from the Cart","suite":"Spree::Cart::ChangeCurrency at ./spec/services/spree/cart/change_currency_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/services/spree/cart/change_currency_spec.rb"},{"name":"create an order example at ./spec/services/spree/cart/create_spec.rb:18","suite":"Spree::Cart::Create at ./spec/services/spree/cart/create_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/services/spree/cart/create_spec.rb"},{"name":"create an order with store in params example at ./spec/services/spree/cart/create_spec.rb:32","suite":"Spree::Cart::Create at ./spec/services/spree/cart/create_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/services/spree/cart/create_spec.rb"},{"name":"create an order with store currency example at ./spec/services/spree/cart/create_spec.rb:48","suite":"Spree::Cart::Create at ./spec/services/spree/cart/create_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/services/spree/cart/create_spec.rb"},{"name":"returns failure when no store is passed example at ./spec/services/spree/cart/create_spec.rb:64","suite":"Spree::Cart::Create at ./spec/services/spree/cart/create_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/services/spree/cart/create_spec.rb"},{"name":"when order is given when can be destroyed returns success","suite":"Spree::Cart::Destroy at ./spec/services/spree/cart/destroy_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/services/spree/cart/destroy_spec.rb"},{"name":"when order is given when can be destroyed voids pending payments","suite":"Spree::Cart::Destroy at ./spec/services/spree/cart/destroy_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2\"}}","suiteSourceFile":"core/spec/services/spree/cart/destroy_spec.rb"},{"name":"when order is given when can be destroyed cancel not shipped shipments","suite":"Spree::Cart::Destroy at ./spec/services/spree/cart/destroy_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3\"}}","suiteSourceFile":"core/spec/services/spree/cart/destroy_spec.rb"},{"name":"when order is given when can be destroyed destroys the order","suite":"Spree::Cart::Destroy at ./spec/services/spree/cart/destroy_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:4\"}}","suiteSourceFile":"core/spec/services/spree/cart/destroy_spec.rb"},{"name":"when order is given when can be destroyed destroys line_items, addresses, shipments and payments","suite":"Spree::Cart::Destroy at ./spec/services/spree/cart/destroy_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:5\"}}","suiteSourceFile":"core/spec/services/spree/cart/destroy_spec.rb"},{"name":"when order is given when can be destroyed when addresses are assigned to other orders destroys the order","suite":"Spree::Cart::Destroy at ./spec/services/spree/cart/destroy_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:6:1\"}}","suiteSourceFile":"core/spec/services/spree/cart/destroy_spec.rb"},{"name":"when order is given when can be destroyed when addresses are assigned to other orders destroys line_items, shipments and payments, but keeps addresses","suite":"Spree::Cart::Destroy at ./spec/services/spree/cart/destroy_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:6:2\"}}","suiteSourceFile":"core/spec/services/spree/cart/destroy_spec.rb"},{"name":"when order is given when can be destroyed when empty service is called first destroys the order","suite":"Spree::Cart::Destroy at ./spec/services/spree/cart/destroy_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:7:1\"}}","suiteSourceFile":"core/spec/services/spree/cart/destroy_spec.rb"},{"name":"when order is given when cannot be destroyed returns failure","suite":"Spree::Cart::Destroy at ./spec/services/spree/cart/destroy_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/services/spree/cart/destroy_spec.rb"},{"name":"when nil is given returns failure","suite":"Spree::Cart::Destroy at ./spec/services/spree/cart/destroy_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/services/spree/cart/destroy_spec.rb"},{"name":"when order is given completed order returns failure","suite":"Spree::Cart::Empty at ./spec/services/spree/cart/empty_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/services/spree/cart/empty_spec.rb"},{"name":"when order is given incomplete order returns success","suite":"Spree::Cart::Empty at ./spec/services/spree/cart/empty_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/services/spree/cart/empty_spec.rb"},{"name":"when order is given incomplete order clears out line items, adjustments and update totals","suite":"Spree::Cart::Empty at ./spec/services/spree/cart/empty_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2\"}}","suiteSourceFile":"core/spec/services/spree/cart/empty_spec.rb"},{"name":"when nil is given returns failure","suite":"Spree::Cart::Empty at ./spec/services/spree/cart/empty_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/services/spree/cart/empty_spec.rb"},{"name":"single line item remove item from order","suite":"Spree::Cart::RemoveItem at ./spec/services/spree/cart/remove_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/services/spree/cart/remove_item_spec.rb"},{"name":"line items with more than one quantity remove quantity from line item","suite":"Spree::Cart::RemoveItem at ./spec/services/spree/cart/remove_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/services/spree/cart/remove_item_spec.rb"},{"name":"raise error when try remove non existing item","suite":"Spree::Cart::RemoveItem at ./spec/services/spree/cart/remove_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/services/spree/cart/remove_item_spec.rb"},{"name":"given a shipment ensure shipment calls update_amounts instead of order calling ensure_updated_shipments","suite":"Spree::Cart::RemoveItem at ./spec/services/spree/cart/remove_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/services/spree/cart/remove_item_spec.rb"},{"name":"not given a shipment ensures updated shipments","suite":"Spree::Cart::RemoveItem at ./spec/services/spree/cart/remove_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","suiteSourceFile":"core/spec/services/spree/cart/remove_item_spec.rb"},{"name":"when store_credits payment example at ./spec/services/spree/cart/remove_item_spec.rb:72","suite":"Spree::Cart::RemoveItem at ./spec/services/spree/cart/remove_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","suiteSourceFile":"core/spec/services/spree/cart/remove_item_spec.rb"},{"name":"remove line item with any quantity with any quantity","suite":"Spree::Cart::RemoveLineItem at ./spec/services/spree/cart/remove_line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/services/spree/cart/remove_line_item_spec.rb"},{"name":"remove line item with many unique items from order with many unique items","suite":"Spree::Cart::RemoveLineItem at ./spec/services/spree/cart/remove_line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/services/spree/cart/remove_line_item_spec.rb"},{"name":"given a shipment ensure shipment calls update_amounts instead of order calling ensure_updated_shipments","suite":"Spree::Cart::RemoveLineItem at ./spec/services/spree/cart/remove_line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/services/spree/cart/remove_line_item_spec.rb"},{"name":"not given a shipment ensures updated shipments","suite":"Spree::Cart::RemoveLineItem at ./spec/services/spree/cart/remove_line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/services/spree/cart/remove_line_item_spec.rb"},{"name":"evaluate service to success","suite":"Spree::Cart::RemoveOutOfStockItems at ./spec/services/spree/cart/remove_out_of_stock_items_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","suiteSourceFile":"core/spec/services/spree/cart/remove_out_of_stock_items_spec.rb"},{"name":"removes line item and render discontinued flash message","suite":"Spree::Cart::RemoveOutOfStockItems at ./spec/services/spree/cart/remove_out_of_stock_items_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2\"}}","suiteSourceFile":"core/spec/services/spree/cart/remove_out_of_stock_items_spec.rb"},{"name":"removes line item and render out of stock flash message","suite":"Spree::Cart::RemoveOutOfStockItems at ./spec/services/spree/cart/remove_out_of_stock_items_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3\"}}","suiteSourceFile":"core/spec/services/spree/cart/remove_out_of_stock_items_spec.rb"},{"name":"renders discontinued flash message when line item is deleted","suite":"Spree::Cart::RemoveOutOfStockItems at ./spec/services/spree/cart/remove_out_of_stock_items_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4\"}}","suiteSourceFile":"core/spec/services/spree/cart/remove_out_of_stock_items_spec.rb"},{"name":"renders discontinued flash message when line item is discontinued","suite":"Spree::Cart::RemoveOutOfStockItems at ./spec/services/spree/cart/remove_out_of_stock_items_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5\"}}","suiteSourceFile":"core/spec/services/spree/cart/remove_out_of_stock_items_spec.rb"},{"name":"renders discontinued flash message when a variant is discontinued","suite":"Spree::Cart::RemoveOutOfStockItems at ./spec/services/spree/cart/remove_out_of_stock_items_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6\"}}","suiteSourceFile":"core/spec/services/spree/cart/remove_out_of_stock_items_spec.rb"},{"name":"with non-backorderable item with sufficient stock quantity returns successful result","suite":"Spree::Cart::SetQuantity at ./spec/services/spree/cart/set_quantity_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/services/spree/cart/set_quantity_spec.rb"},{"name":"with non-backorderable item with insufficient stock quantity return result with success equal false","suite":"Spree::Cart::SetQuantity at ./spec/services/spree/cart/set_quantity_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/services/spree/cart/set_quantity_spec.rb"},{"name":"with backorderable item returns successful result","suite":"Spree::Cart::SetQuantity at ./spec/services/spree/cart/set_quantity_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/services/spree/cart/set_quantity_spec.rb"},{"name":"#call there is no store credit does not create a store credit payment","suite":"Spree::Checkout::AddStoreCredit at ./spec/services/spree/checkout/add_store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/services/spree/checkout/add_store_credit_spec.rb"},{"name":"#call there is no store credit returns error","suite":"Spree::Checkout::AddStoreCredit at ./spec/services/spree/checkout/add_store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2\"}}","suiteSourceFile":"core/spec/services/spree/checkout/add_store_credit_spec.rb"},{"name":"#call there is enough store credit to pay for the entire order with no amount specified creates a store credit payment for the full amount","suite":"Spree::Checkout::AddStoreCredit at ./spec/services/spree/checkout/add_store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1:1\"}}","suiteSourceFile":"core/spec/services/spree/checkout/add_store_credit_spec.rb"},{"name":"#call there is enough store credit to pay for the entire order with store credit amount specified creates a store credit payment for the specified amount","suite":"Spree::Checkout::AddStoreCredit at ./spec/services/spree/checkout/add_store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:1\"}}","suiteSourceFile":"core/spec/services/spree/checkout/add_store_credit_spec.rb"},{"name":"#call the available store credit is not enough to pay for the entire order creates a store credit payment for the available amount","suite":"Spree::Checkout::AddStoreCredit at ./spec/services/spree/checkout/add_store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","suiteSourceFile":"core/spec/services/spree/checkout/add_store_credit_spec.rb"},{"name":"#call there are multiple store credits uses the primary store credit type over the secondary","suite":"Spree::Checkout::AddStoreCredit at ./spec/services/spree/checkout/add_store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1\"}}","suiteSourceFile":"core/spec/services/spree/checkout/add_store_credit_spec.rb"},{"name":"#call with no specific target state advances the order until it cannot proceed further","suite":"Spree::Checkout::Advance at ./spec/services/spree/checkout/advance_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/services/spree/checkout/advance_spec.rb"},{"name":"#call with no specific target state updates order states after advancement","suite":"Spree::Checkout::Advance at ./spec/services/spree/checkout/advance_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2\"}}","suiteSourceFile":"core/spec/services/spree/checkout/advance_spec.rb"},{"name":"#call with no specific target state when no transition has been made responds with an error","suite":"Spree::Checkout::Advance at ./spec/services/spree/checkout/advance_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:1\"}}","suiteSourceFile":"core/spec/services/spree/checkout/advance_spec.rb"},{"name":"#call with specific target state returns failure for invalid state","suite":"Spree::Checkout::Advance at ./spec/services/spree/checkout/advance_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/services/spree/checkout/advance_spec.rb"},{"name":"#call with specific target state returns success if order already passed target state","suite":"Spree::Checkout::Advance at ./spec/services/spree/checkout/advance_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2\"}}","suiteSourceFile":"core/spec/services/spree/checkout/advance_spec.rb"},{"name":"#call with specific target state advances the order to target state","suite":"Spree::Checkout::Advance at ./spec/services/spree/checkout/advance_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:3\"}}","suiteSourceFile":"core/spec/services/spree/checkout/advance_spec.rb"},{"name":"#call with specific target state when unable to reach the targeted state responds with an error","suite":"Spree::Checkout::Advance at ./spec/services/spree/checkout/advance_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:4:1\"}}","suiteSourceFile":"core/spec/services/spree/checkout/advance_spec.rb"},{"name":"#call with shipping method selection updates shipping method during advancement","suite":"Spree::Checkout::Advance at ./spec/services/spree/checkout/advance_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","suiteSourceFile":"core/spec/services/spree/checkout/advance_spec.rb"},{"name":"#call with shipping method selection on shipping method failure keeps the old shipping method","suite":"Spree::Checkout::Advance at ./spec/services/spree/checkout/advance_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:2:1\"}}","suiteSourceFile":"core/spec/services/spree/checkout/advance_spec.rb"},{"name":"#call when next service fails returns failure result","suite":"Spree::Checkout::Advance at ./spec/services/spree/checkout/advance_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1\"}}","suiteSourceFile":"core/spec/services/spree/checkout/advance_spec.rb"},{"name":"#call when order is complete stops advancement","suite":"Spree::Checkout::Advance at ./spec/services/spree/checkout/advance_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5:1\"}}","suiteSourceFile":"core/spec/services/spree/checkout/advance_spec.rb"},{"name":"without shipping address behaves like failure returns error","suite":"Spree::Checkout::GetShippingRates at ./spec/services/spree/checkout/get_shipping_rates_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/services/spree/checkout/get_shipping_rates_spec.rb"},{"name":"without shipping address behaves like failure doesn't generate shipping rates","suite":"Spree::Checkout::GetShippingRates at ./spec/services/spree/checkout/get_shipping_rates_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2\"}}","suiteSourceFile":"core/spec/services/spree/checkout/get_shipping_rates_spec.rb"},{"name":"without line items behaves like failure returns error","suite":"Spree::Checkout::GetShippingRates at ./spec/services/spree/checkout/get_shipping_rates_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","suiteSourceFile":"core/spec/services/spree/checkout/get_shipping_rates_spec.rb"},{"name":"without line items behaves like failure doesn't generate shipping rates","suite":"Spree::Checkout::GetShippingRates at ./spec/services/spree/checkout/get_shipping_rates_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:2\"}}","suiteSourceFile":"core/spec/services/spree/checkout/get_shipping_rates_spec.rb"},{"name":"with line items and shipping address without shipments behaves like generates shipping rates returns shipping rates","suite":"Spree::Checkout::GetShippingRates at ./spec/services/spree/checkout/get_shipping_rates_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1:1\"}}","suiteSourceFile":"core/spec/services/spree/checkout/get_shipping_rates_spec.rb"},{"name":"with line items and shipping address without shipments behaves like generates shipping rates doesn't update checkout state","suite":"Spree::Checkout::GetShippingRates at ./spec/services/spree/checkout/get_shipping_rates_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1:2\"}}","suiteSourceFile":"core/spec/services/spree/checkout/get_shipping_rates_spec.rb"},{"name":"with line items and shipping address without shipments behaves like applies standard shipping costs for shipment","suite":"Spree::Checkout::GetShippingRates at ./spec/services/spree/checkout/get_shipping_rates_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:2:1\"}}","suiteSourceFile":"core/spec/services/spree/checkout/get_shipping_rates_spec.rb"},{"name":"with line items and shipping address without shipments behaves like applies standard shipping costs updates shipment total","suite":"Spree::Checkout::GetShippingRates at ./spec/services/spree/checkout/get_shipping_rates_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:2:2\"}}","suiteSourceFile":"core/spec/services/spree/checkout/get_shipping_rates_spec.rb"},{"name":"with line items and shipping address with already present shipments replaces current shipments with new ones","suite":"Spree::Checkout::GetShippingRates at ./spec/services/spree/checkout/get_shipping_rates_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:3\"}}","suiteSourceFile":"core/spec/services/spree/checkout/get_shipping_rates_spec.rb"},{"name":"with line items and shipping address with already present shipments behaves like generates shipping rates returns shipping rates","suite":"Spree::Checkout::GetShippingRates at ./spec/services/spree/checkout/get_shipping_rates_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1:1\"}}","suiteSourceFile":"core/spec/services/spree/checkout/get_shipping_rates_spec.rb"},{"name":"with line items and shipping address with already present shipments behaves like generates shipping rates doesn't update checkout state","suite":"Spree::Checkout::GetShippingRates at ./spec/services/spree/checkout/get_shipping_rates_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1:2\"}}","suiteSourceFile":"core/spec/services/spree/checkout/get_shipping_rates_spec.rb"},{"name":"with line items and shipping address with already present shipments behaves like applies standard shipping costs for shipment","suite":"Spree::Checkout::GetShippingRates at ./spec/services/spree/checkout/get_shipping_rates_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:2:1\"}}","suiteSourceFile":"core/spec/services/spree/checkout/get_shipping_rates_spec.rb"},{"name":"with line items and shipping address with already present shipments behaves like applies standard shipping costs updates shipment total","suite":"Spree::Checkout::GetShippingRates at ./spec/services/spree/checkout/get_shipping_rates_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:2:2\"}}","suiteSourceFile":"core/spec/services/spree/checkout/get_shipping_rates_spec.rb"},{"name":"with line items and shipping address with free shipping promotion applies promotion","suite":"Spree::Checkout::GetShippingRates at ./spec/services/spree/checkout/get_shipping_rates_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3:1\"}}","suiteSourceFile":"core/spec/services/spree/checkout/get_shipping_rates_spec.rb"},{"name":"#call when order is not complete example at ./spec/services/spree/checkout/remove_store_credit_spec.rb:19","suite":"Spree::Checkout::RemoveStoreCredit at ./spec/services/spree/checkout/remove_store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/services/spree/checkout/remove_store_credit_spec.rb"},{"name":"#call when order is not complete example at ./spec/services/spree/checkout/remove_store_credit_spec.rb:20","suite":"Spree::Checkout::RemoveStoreCredit at ./spec/services/spree/checkout/remove_store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2\"}}","suiteSourceFile":"core/spec/services/spree/checkout/remove_store_credit_spec.rb"},{"name":"#call when order is complete example at ./spec/services/spree/checkout/remove_store_credit_spec.rb:32","suite":"Spree::Checkout::RemoveStoreCredit at ./spec/services/spree/checkout/remove_store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/services/spree/checkout/remove_store_credit_spec.rb"},{"name":"one shipment valid shipping method example at ./spec/services/spree/checkout/select_shipping_method_spec.rb:53","suite":"Spree::Checkout::SelectShippingMethod at ./spec/services/spree/checkout/select_shipping_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/services/spree/checkout/select_shipping_method_spec.rb"},{"name":"one shipment valid shipping method example at ./spec/services/spree/checkout/select_shipping_method_spec.rb:54","suite":"Spree::Checkout::SelectShippingMethod at ./spec/services/spree/checkout/select_shipping_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2\"}}","suiteSourceFile":"core/spec/services/spree/checkout/select_shipping_method_spec.rb"},{"name":"one shipment valid shipping method example at ./spec/services/spree/checkout/select_shipping_method_spec.rb:55","suite":"Spree::Checkout::SelectShippingMethod at ./spec/services/spree/checkout/select_shipping_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3\"}}","suiteSourceFile":"core/spec/services/spree/checkout/select_shipping_method_spec.rb"},{"name":"one shipment valid shipping method sets selected shipping method for shipment","suite":"Spree::Checkout::SelectShippingMethod at ./spec/services/spree/checkout/select_shipping_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:4\"}}","suiteSourceFile":"core/spec/services/spree/checkout/select_shipping_method_spec.rb"},{"name":"one shipment missing shipping method example at ./spec/services/spree/checkout/select_shipping_method_spec.rb:71","suite":"Spree::Checkout::SelectShippingMethod at ./spec/services/spree/checkout/select_shipping_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/services/spree/checkout/select_shipping_method_spec.rb"},{"name":"one shipment missing shipping method example at ./spec/services/spree/checkout/select_shipping_method_spec.rb:72","suite":"Spree::Checkout::SelectShippingMethod at ./spec/services/spree/checkout/select_shipping_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2\"}}","suiteSourceFile":"core/spec/services/spree/checkout/select_shipping_method_spec.rb"},{"name":"one shipment missing shipping method example at ./spec/services/spree/checkout/select_shipping_method_spec.rb:73","suite":"Spree::Checkout::SelectShippingMethod at ./spec/services/spree/checkout/select_shipping_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:3\"}}","suiteSourceFile":"core/spec/services/spree/checkout/select_shipping_method_spec.rb"},{"name":"multiple shipments update selected shipment example at ./spec/services/spree/checkout/select_shipping_method_spec.rb:97","suite":"Spree::Checkout::SelectShippingMethod at ./spec/services/spree/checkout/select_shipping_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","suiteSourceFile":"core/spec/services/spree/checkout/select_shipping_method_spec.rb"},{"name":"multiple shipments update selected shipment sets selected shipping method for the specified shipment","suite":"Spree::Checkout::SelectShippingMethod at ./spec/services/spree/checkout/select_shipping_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:2\"}}","suiteSourceFile":"core/spec/services/spree/checkout/select_shipping_method_spec.rb"},{"name":"multiple shipments update all shipments example at ./spec/services/spree/checkout/select_shipping_method_spec.rb:110","suite":"Spree::Checkout::SelectShippingMethod at ./spec/services/spree/checkout/select_shipping_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","suiteSourceFile":"core/spec/services/spree/checkout/select_shipping_method_spec.rb"},{"name":"multiple shipments update all shipments sets selected shipping method for all shipments","suite":"Spree::Checkout::SelectShippingMethod at ./spec/services/spree/checkout/select_shipping_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:2\"}}","suiteSourceFile":"core/spec/services/spree/checkout/select_shipping_method_spec.rb"},{"name":"#transform_address_params with ship_address order params will return hash contain country_id","suite":"Spree::Checkout::Update at ./spec/services/spree/checkout/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/services/spree/checkout/update_spec.rb"},{"name":"#transform_address_params with ship_address order params will return hash without country_iso","suite":"Spree::Checkout::Update at ./spec/services/spree/checkout/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2\"}}","suiteSourceFile":"core/spec/services/spree/checkout/update_spec.rb"},{"name":"#transform_address_params with bill_address order params will return hash contain country_id","suite":"Spree::Checkout::Update at ./spec/services/spree/checkout/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/services/spree/checkout/update_spec.rb"},{"name":"#transform_address_params with bill_address order params will return hash without country_iso","suite":"Spree::Checkout::Update at ./spec/services/spree/checkout/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2\"}}","suiteSourceFile":"core/spec/services/spree/checkout/update_spec.rb"},{"name":"update address at cart state should set order back to address state","suite":"Spree::Checkout::Update at ./spec/services/spree/checkout/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","suiteSourceFile":"core/spec/services/spree/checkout/update_spec.rb"},{"name":"update address at cart state should not set order back to address state if do_not_change_state is true","suite":"Spree::Checkout::Update at ./spec/services/spree/checkout/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:2\"}}","suiteSourceFile":"core/spec/services/spree/checkout/update_spec.rb"},{"name":"update address at cart state should set order back to address state if quick checkout cancelled","suite":"Spree::Checkout::Update at ./spec/services/spree/checkout/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:3\"}}","suiteSourceFile":"core/spec/services/spree/checkout/update_spec.rb"},{"name":"update address at address state when address did not change does not change order addresses","suite":"Spree::Checkout::Update at ./spec/services/spree/checkout/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1:3\"}}","suiteSourceFile":"core/spec/services/spree/checkout/update_spec.rb"},{"name":"update address at address state when address did not change behaves like user default addresses did not change does not change user default addresses","suite":"Spree::Checkout::Update at ./spec/services/spree/checkout/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1:1:1\"}}","suiteSourceFile":"core/spec/services/spree/checkout/update_spec.rb"},{"name":"update address at address state when address did not change behaves like checkout is in address step keeps checkout in address step","suite":"Spree::Checkout::Update at ./spec/services/spree/checkout/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1:2:1\"}}","suiteSourceFile":"core/spec/services/spree/checkout/update_spec.rb"},{"name":"update address at address state when ship address changed should update order ship address","suite":"Spree::Checkout::Update at ./spec/services/spree/checkout/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:2:3\"}}","suiteSourceFile":"core/spec/services/spree/checkout/update_spec.rb"},{"name":"update address at address state when ship address changed behaves like user default addresses did not change does not change user default addresses","suite":"Spree::Checkout::Update at ./spec/services/spree/checkout/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:2:1:1\"}}","suiteSourceFile":"core/spec/services/spree/checkout/update_spec.rb"},{"name":"update address at address state when ship address changed behaves like checkout is in address step keeps checkout in address step","suite":"Spree::Checkout::Update at ./spec/services/spree/checkout/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:2:2:1\"}}","suiteSourceFile":"core/spec/services/spree/checkout/update_spec.rb"},{"name":"update address at address state when bill address changed should update order bill address","suite":"Spree::Checkout::Update at ./spec/services/spree/checkout/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:3:3\"}}","suiteSourceFile":"core/spec/services/spree/checkout/update_spec.rb"},{"name":"update address at address state when bill address changed behaves like user default addresses did not change does not change user default addresses","suite":"Spree::Checkout::Update at ./spec/services/spree/checkout/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:3:1:1\"}}","suiteSourceFile":"core/spec/services/spree/checkout/update_spec.rb"},{"name":"update address at address state when bill address changed behaves like checkout is in address step keeps checkout in address step","suite":"Spree::Checkout::Update at ./spec/services/spree/checkout/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:3:2:1\"}}","suiteSourceFile":"core/spec/services/spree/checkout/update_spec.rb"},{"name":"update address at address state when ship and bill address changed should update both order addresses","suite":"Spree::Checkout::Update at ./spec/services/spree/checkout/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:4:3\"}}","suiteSourceFile":"core/spec/services/spree/checkout/update_spec.rb"},{"name":"update address at address state when ship and bill address changed behaves like user default addresses did not change does not change user default addresses","suite":"Spree::Checkout::Update at ./spec/services/spree/checkout/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:4:1:1\"}}","suiteSourceFile":"core/spec/services/spree/checkout/update_spec.rb"},{"name":"update address at address state when ship and bill address changed behaves like checkout is in address step keeps checkout in address step","suite":"Spree::Checkout::Update at ./spec/services/spree/checkout/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:4:2:1\"}}","suiteSourceFile":"core/spec/services/spree/checkout/update_spec.rb"},{"name":"address ownership validation when bill_address_attributes contains id of another user address returns failure","suite":"Spree::Checkout::Update at ./spec/services/spree/checkout/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","suiteSourceFile":"core/spec/services/spree/checkout/update_spec.rb"},{"name":"address ownership validation when bill_address_attributes contains id of another user address does not associate the other user address with the order","suite":"Spree::Checkout::Update at ./spec/services/spree/checkout/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:2\"}}","suiteSourceFile":"core/spec/services/spree/checkout/update_spec.rb"},{"name":"address ownership validation when ship_address_attributes contains id of another user address returns failure","suite":"Spree::Checkout::Update at ./spec/services/spree/checkout/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","suiteSourceFile":"core/spec/services/spree/checkout/update_spec.rb"},{"name":"address ownership validation when ship_address_attributes contains id of another user address does not associate the other user address with the order","suite":"Spree::Checkout::Update at ./spec/services/spree/checkout/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:2\"}}","suiteSourceFile":"core/spec/services/spree/checkout/update_spec.rb"},{"name":"address ownership validation when address_attributes contains id of the same user address returns success","suite":"Spree::Checkout::Update at ./spec/services/spree/checkout/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3:1\"}}","suiteSourceFile":"core/spec/services/spree/checkout/update_spec.rb"},{"name":"address ownership validation when address_attributes contains id of address with no user returns success","suite":"Spree::Checkout::Update at ./spec/services/spree/checkout/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4:1\"}}","suiteSourceFile":"core/spec/services/spree/checkout/update_spec.rb"},{"name":"address ownership validation when address_attributes does not contain id returns success","suite":"Spree::Checkout::Update at ./spec/services/spree/checkout/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:5:1\"}}","suiteSourceFile":"core/spec/services/spree/checkout/update_spec.rb"},{"name":"update selected shipping rate should set order back to delivery state","suite":"Spree::Checkout::Update at ./spec/services/spree/checkout/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/services/spree/checkout/update_spec.rb"},{"name":"success example at ./spec/services/spree/classifications/reposition_spec.rb:12","suite":"Spree::Classifications::Reposition at ./spec/services/spree/classifications/reposition_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/services/spree/classifications/reposition_spec.rb"},{"name":"success example at ./spec/services/spree/classifications/reposition_spec.rb:13","suite":"Spree::Classifications::Reposition at ./spec/services/spree/classifications/reposition_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/services/spree/classifications/reposition_spec.rb"},{"name":"success example at ./spec/services/spree/classifications/reposition_spec.rb:14","suite":"Spree::Classifications::Reposition at ./spec/services/spree/classifications/reposition_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/services/spree/classifications/reposition_spec.rb"},{"name":"failure example at ./spec/services/spree/classifications/reposition_spec.rb:20","suite":"Spree::Classifications::Reposition at ./spec/services/spree/classifications/reposition_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/services/spree/classifications/reposition_spec.rb"},{"name":"failure example at ./spec/services/spree/classifications/reposition_spec.rb:21","suite":"Spree::Classifications::Reposition at ./spec/services/spree/classifications/reposition_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","suiteSourceFile":"core/spec/services/spree/classifications/reposition_spec.rb"},{"name":"#call destroy credit_card and update payment state","suite":"Spree::CreditCards::Destroy at ./spec/services/spree/credit_cards/destroy_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/services/spree/credit_cards/destroy_spec.rb"},{"name":"#invalidate_payments destroy credit_card and invalidate valid checkout payments","suite":"Spree::CreditCards::Destroy at ./spec/services/spree/credit_cards/destroy_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/services/spree/credit_cards/destroy_spec.rb"},{"name":"#void_payments destroy credit_card and void valid payments","suite":"Spree::CreditCards::Destroy at ./spec/services/spree/credit_cards/destroy_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/services/spree/credit_cards/destroy_spec.rb"},{"name":"#destroy remove credit_card","suite":"Spree::CreditCards::Destroy at ./spec/services/spree/credit_cards/destroy_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/services/spree/credit_cards/destroy_spec.rb"},{"name":"#call does not mutate product name when generating titles for multiple variants","suite":"Spree::DataFeeds::Google::RequiredAttributes at ./spec/services/spree/data_feeds/google/required_attributes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/services/spree/data_feeds/google/required_attributes_spec.rb"},{"name":"store header is generated correctly include store name","suite":"Spree::DataFeeds::Google::Rss at ./spec/services/spree/data_feeds/google/rss_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/services/spree/data_feeds/google/rss_spec.rb"},{"name":"store header is generated correctly includes store url","suite":"Spree::DataFeeds::Google::Rss at ./spec/services/spree/data_feeds/google/rss_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/services/spree/data_feeds/google/rss_spec.rb"},{"name":"store header is generated correctly includes store description","suite":"Spree::DataFeeds::Google::Rss at ./spec/services/spree/data_feeds/google/rss_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/services/spree/data_feeds/google/rss_spec.rb"},{"name":"required item attributes are generated correctly includes id","suite":"Spree::DataFeeds::Google::Rss at ./spec/services/spree/data_feeds/google/rss_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/services/spree/data_feeds/google/rss_spec.rb"},{"name":"required item attributes are generated correctly includes product id as item_group_id","suite":"Spree::DataFeeds::Google::Rss at ./spec/services/spree/data_feeds/google/rss_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","suiteSourceFile":"core/spec/services/spree/data_feeds/google/rss_spec.rb"},{"name":"required item attributes are generated correctly includes title","suite":"Spree::DataFeeds::Google::Rss at ./spec/services/spree/data_feeds/google/rss_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3\"}}","suiteSourceFile":"core/spec/services/spree/data_feeds/google/rss_spec.rb"},{"name":"required item attributes are generated correctly includes description","suite":"Spree::DataFeeds::Google::Rss at ./spec/services/spree/data_feeds/google/rss_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:4\"}}","suiteSourceFile":"core/spec/services/spree/data_feeds/google/rss_spec.rb"},{"name":"required item attributes are generated correctly includes link","suite":"Spree::DataFeeds::Google::Rss at ./spec/services/spree/data_feeds/google/rss_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:5\"}}","suiteSourceFile":"core/spec/services/spree/data_feeds/google/rss_spec.rb"},{"name":"required item attributes are generated correctly includes image link","suite":"Spree::DataFeeds::Google::Rss at ./spec/services/spree/data_feeds/google/rss_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:6\"}}","suiteSourceFile":"core/spec/services/spree/data_feeds/google/rss_spec.rb"},{"name":"required item attributes are generated correctly includes price","suite":"Spree::DataFeeds::Google::Rss at ./spec/services/spree/data_feeds/google/rss_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:7\"}}","suiteSourceFile":"core/spec/services/spree/data_feeds/google/rss_spec.rb"},{"name":"required item attributes are generated correctly product is set to available shows that product is in stock","suite":"Spree::DataFeeds::Google::Rss at ./spec/services/spree/data_feeds/google/rss_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:8:1\"}}","suiteSourceFile":"core/spec/services/spree/data_feeds/google/rss_spec.rb"},{"name":"required item attributes are generated correctly product is set to available shows that product availability date is the same","suite":"Spree::DataFeeds::Google::Rss at ./spec/services/spree/data_feeds/google/rss_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:8:2\"}}","suiteSourceFile":"core/spec/services/spree/data_feeds/google/rss_spec.rb"},{"name":"required item attributes are generated correctly product is set to backorderable shows that product is on backorder","suite":"Spree::DataFeeds::Google::Rss at ./spec/services/spree/data_feeds/google/rss_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:9:1\"}}","suiteSourceFile":"core/spec/services/spree/data_feeds/google/rss_spec.rb"},{"name":"required item attributes are generated correctly availability date is nil shows that product is in stock","suite":"Spree::DataFeeds::Google::Rss at ./spec/services/spree/data_feeds/google/rss_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:10:1\"}}","suiteSourceFile":"core/spec/services/spree/data_feeds/google/rss_spec.rb"},{"name":"required item attributes are generated correctly availability date is nil shows that product availability date is nil","suite":"Spree::DataFeeds::Google::Rss at ./spec/services/spree/data_feeds/google/rss_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:10:2\"}}","suiteSourceFile":"core/spec/services/spree/data_feeds/google/rss_spec.rb"},{"name":"optional item attributes are generated correctly adds brand to item attributes","suite":"Spree::DataFeeds::Google::Rss at ./spec/services/spree/data_feeds/google/rss_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/services/spree/data_feeds/google/rss_spec.rb"},{"name":"applies the gift card to an order","suite":"Spree::GiftCards::Apply at ./spec/services/spree/gift_cards/apply_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","suiteSourceFile":"core/spec/services/spree/gift_cards/apply_spec.rb"},{"name":"calls update_with_updater!","suite":"Spree::GiftCards::Apply at ./spec/services/spree/gift_cards/apply_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2\"}}","suiteSourceFile":"core/spec/services/spree/gift_cards/apply_spec.rb"},{"name":"when the order has applied store credit responds with an error","suite":"Spree::GiftCards::Apply at ./spec/services/spree/gift_cards/apply_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/services/spree/gift_cards/apply_spec.rb"},{"name":"when the gift card has a different currency responds with an error","suite":"Spree::GiftCards::Apply at ./spec/services/spree/gift_cards/apply_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/services/spree/gift_cards/apply_spec.rb"},{"name":"when the gift card is assigned to a user with valid user applies the gift card to the order","suite":"Spree::GiftCards::Apply at ./spec/services/spree/gift_cards/apply_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:1\"}}","suiteSourceFile":"core/spec/services/spree/gift_cards/apply_spec.rb"},{"name":"when the gift card is assigned to a user with valid user calls update_with_updater!","suite":"Spree::GiftCards::Apply at ./spec/services/spree/gift_cards/apply_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:2\"}}","suiteSourceFile":"core/spec/services/spree/gift_cards/apply_spec.rb"},{"name":"when the gift card is assigned to a user with guest order responds with an error","suite":"Spree::GiftCards::Apply at ./spec/services/spree/gift_cards/apply_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1\"}}","suiteSourceFile":"core/spec/services/spree/gift_cards/apply_spec.rb"},{"name":"when the gift card is assigned to a user with another user order responds with an error","suite":"Spree::GiftCards::Apply at ./spec/services/spree/gift_cards/apply_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3:1\"}}","suiteSourceFile":"core/spec/services/spree/gift_cards/apply_spec.rb"},{"name":"when the gift card has no amount remaining responds with an error","suite":"Spree::GiftCards::Apply at ./spec/services/spree/gift_cards/apply_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","suiteSourceFile":"core/spec/services/spree/gift_cards/apply_spec.rb"},{"name":"when the gift card has no amount remaining calls redeem! on the gift card","suite":"Spree::GiftCards::Redeem at ./spec/services/spree/gift_cards/redeem_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/services/spree/gift_cards/redeem_spec.rb"},{"name":"when the gift card has no amount remaining returns success with the gift card","suite":"Spree::GiftCards::Redeem at ./spec/services/spree/gift_cards/redeem_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/services/spree/gift_cards/redeem_spec.rb"},{"name":"when the gift card has amount remaining calls partial_redeem! on the gift card","suite":"Spree::GiftCards::Redeem at ./spec/services/spree/gift_cards/redeem_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/services/spree/gift_cards/redeem_spec.rb"},{"name":"when the gift card has amount remaining returns success with the gift card","suite":"Spree::GiftCards::Redeem at ./spec/services/spree/gift_cards/redeem_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","suiteSourceFile":"core/spec/services/spree/gift_cards/redeem_spec.rb"},{"name":"for an order with the gift card applied removes the gift card from an order","suite":"Spree::GiftCards::Remove at ./spec/services/spree/gift_cards/remove_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/services/spree/gift_cards/remove_spec.rb"},{"name":"for an order with the gift card applied calls update_with_updater!","suite":"Spree::GiftCards::Remove at ./spec/services/spree/gift_cards/remove_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/services/spree/gift_cards/remove_spec.rb"},{"name":"for an order with the gift card applied for a completed order responds with an error","suite":"Spree::GiftCards::Remove at ./spec/services/spree/gift_cards/remove_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","suiteSourceFile":"core/spec/services/spree/gift_cards/remove_spec.rb"},{"name":"for an order without a gift card does nothing","suite":"Spree::GiftCards::Remove at ./spec/services/spree/gift_cards/remove_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/services/spree/gift_cards/remove_spec.rb"},{"name":"when importing a master variant product row creates a product and sets correct attributes","suite":"Spree::Imports::RowProcessors::ProductVariant at ./spec/services/spree/imports/row_processors/product_variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/services/spree/imports/row_processors/product_variant_spec.rb"},{"name":"when importing a master variant product row when updating an existing master variant updates inventory_count and inventory_backorderable","suite":"Spree::Imports::RowProcessors::ProductVariant at ./spec/services/spree/imports/row_processors/product_variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/services/spree/imports/row_processors/product_variant_spec.rb"},{"name":"when importing a variant row with options assigns to existing product and creates/re-uses option values","suite":"Spree::Imports::RowProcessors::ProductVariant at ./spec/services/spree/imports/row_processors/product_variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/services/spree/imports/row_processors/product_variant_spec.rb"},{"name":"when importing a variant row with options when importing a variant row for existing variant updates the variant","suite":"Spree::Imports::RowProcessors::ProductVariant at ./spec/services/spree/imports/row_processors/product_variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","suiteSourceFile":"core/spec/services/spree/imports/row_processors/product_variant_spec.rb"},{"name":"when importing a variant row with options when importing a variant row for existing variant when updating inventory values updates inventory_count and inventory_backorderable","suite":"Spree::Imports::RowProcessors::ProductVariant at ./spec/services/spree/imports/row_processors/product_variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:2:1\"}}","suiteSourceFile":"core/spec/services/spree/imports/row_processors/product_variant_spec.rb"},{"name":"when importing a variant row with a new option type/value creates a new option type and value as needed","suite":"Spree::Imports::RowProcessors::ProductVariant at ./spec/services/spree/imports/row_processors/product_variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/services/spree/imports/row_processors/product_variant_spec.rb"},{"name":"with images saves the images","suite":"Spree::Imports::RowProcessors::ProductVariant at ./spec/services/spree/imports/row_processors/product_variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/services/spree/imports/row_processors/product_variant_spec.rb"},{"name":"with taxons assigns taxons to the product","suite":"Spree::Imports::RowProcessors::ProductVariant at ./spec/services/spree/imports/row_processors/product_variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","suiteSourceFile":"core/spec/services/spree/imports/row_processors/product_variant_spec.rb"},{"name":"with taxons when the taxons already exist assigns the existing taxons to the product","suite":"Spree::Imports::RowProcessors::ProductVariant at ./spec/services/spree/imports/row_processors/product_variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1\"}}","suiteSourceFile":"core/spec/services/spree/imports/row_processors/product_variant_spec.rb"},{"name":"with taxons when taxons are not provided assigns no taxons to the product","suite":"Spree::Imports::RowProcessors::ProductVariant at ./spec/services/spree/imports/row_processors/product_variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3:1\"}}","suiteSourceFile":"core/spec/services/spree/imports/row_processors/product_variant_spec.rb"},{"name":"with taxons when taxons format is invalid skips invalid taxons","suite":"Spree::Imports::RowProcessors::ProductVariant at ./spec/services/spree/imports/row_processors/product_variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:4:1\"}}","suiteSourceFile":"core/spec/services/spree/imports/row_processors/product_variant_spec.rb"},{"name":"with taxons when importing a variant row with no taxons keeps the product taxons","suite":"Spree::Imports::RowProcessors::ProductVariant at ./spec/services/spree/imports/row_processors/product_variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:5:1\"}}","suiteSourceFile":"core/spec/services/spree/imports/row_processors/product_variant_spec.rb"},{"name":"when importing a variant with all option columns empty does not create a variant","suite":"Spree::Imports::RowProcessors::ProductVariant at ./spec/services/spree/imports/row_processors/product_variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","suiteSourceFile":"core/spec/services/spree/imports/row_processors/product_variant_spec.rb"},{"name":"when importing a variant row with options but product does not exist raises ActiveRecord::RecordNotFound","suite":"Spree::Imports::RowProcessors::ProductVariant at ./spec/services/spree/imports/row_processors/product_variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","suiteSourceFile":"core/spec/services/spree/imports/row_processors/product_variant_spec.rb"},{"name":"when importing a variant row with options but slug is missing raises ActiveRecord::RecordNotFound with descriptive message","suite":"Spree::Imports::RowProcessors::ProductVariant at ./spec/services/spree/imports/row_processors/product_variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1\"}}","suiteSourceFile":"core/spec/services/spree/imports/row_processors/product_variant_spec.rb"},{"name":"when variant row refers to missing product slug creates a new product and assigns the variant as its master if no option1_name given","suite":"Spree::Imports::RowProcessors::ProductVariant at ./spec/services/spree/imports/row_processors/product_variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1\"}}","suiteSourceFile":"core/spec/services/spree/imports/row_processors/product_variant_spec.rb"},{"name":"with metafields creates mappings for metafields automatically","suite":"Spree::Imports::RowProcessors::ProductVariant at ./spec/services/spree/imports/row_processors/product_variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1\"}}","suiteSourceFile":"core/spec/services/spree/imports/row_processors/product_variant_spec.rb"},{"name":"with metafields auto-assigns file_column for metafield mappings when CSV headers match","suite":"Spree::Imports::RowProcessors::ProductVariant at ./spec/services/spree/imports/row_processors/product_variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:2\"}}","suiteSourceFile":"core/spec/services/spree/imports/row_processors/product_variant_spec.rb"},{"name":"with metafields sets metafields on the product","suite":"Spree::Imports::RowProcessors::ProductVariant at ./spec/services/spree/imports/row_processors/product_variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:3\"}}","suiteSourceFile":"core/spec/services/spree/imports/row_processors/product_variant_spec.rb"},{"name":"with metafields when updating an existing product with metafields updates existing metafields","suite":"Spree::Imports::RowProcessors::ProductVariant at ./spec/services/spree/imports/row_processors/product_variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:4:1\"}}","suiteSourceFile":"core/spec/services/spree/imports/row_processors/product_variant_spec.rb"},{"name":"with metafields when metafield value is blank skips blank metafield values","suite":"Spree::Imports::RowProcessors::ProductVariant at ./spec/services/spree/imports/row_processors/product_variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:5:1\"}}","suiteSourceFile":"core/spec/services/spree/imports/row_processors/product_variant_spec.rb"},{"name":"with metafields when updating existing product metafields with blank values removes existing metafield when empty value is uploaded","suite":"Spree::Imports::RowProcessors::ProductVariant at ./spec/services/spree/imports/row_processors/product_variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:6:1\"}}","suiteSourceFile":"core/spec/services/spree/imports/row_processors/product_variant_spec.rb"},{"name":"with metafields when updating existing product metafields with blank values when all metafields have blank values removes all existing metafields","suite":"Spree::Imports::RowProcessors::ProductVariant at ./spec/services/spree/imports/row_processors/product_variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:6:2:1\"}}","suiteSourceFile":"core/spec/services/spree/imports/row_processors/product_variant_spec.rb"},{"name":"with metafields when processing a non-master variant row does not clear out existing metafield values","suite":"Spree::Imports::RowProcessors::ProductVariant at ./spec/services/spree/imports/row_processors/product_variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:7:1\"}}","suiteSourceFile":"core/spec/services/spree/imports/row_processors/product_variant_spec.rb"},{"name":"when importing with shipping_category when shipping_category exists assigns the shipping category to the product","suite":"Spree::Imports::RowProcessors::ProductVariant at ./spec/services/spree/imports/row_processors/product_variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1:1\"}}","suiteSourceFile":"core/spec/services/spree/imports/row_processors/product_variant_spec.rb"},{"name":"when importing with shipping_category when shipping_category does not exist assigns the default shipping category","suite":"Spree::Imports::RowProcessors::ProductVariant at ./spec/services/spree/imports/row_processors/product_variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2:1\"}}","suiteSourceFile":"core/spec/services/spree/imports/row_processors/product_variant_spec.rb"},{"name":"when importing with shipping_category when updating product with different shipping_category updates the shipping category","suite":"Spree::Imports::RowProcessors::ProductVariant at ./spec/services/spree/imports/row_processors/product_variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:3:1\"}}","suiteSourceFile":"core/spec/services/spree/imports/row_processors/product_variant_spec.rb"},{"name":"when importing with shipping_category when shipping_category is not provided assigns the default shipping category","suite":"Spree::Imports::RowProcessors::ProductVariant at ./spec/services/spree/imports/row_processors/product_variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:4:1\"}}","suiteSourceFile":"core/spec/services/spree/imports/row_processors/product_variant_spec.rb"},{"name":"when importing with tax_category when tax_category exists assigns the tax category to the variant","suite":"Spree::Imports::RowProcessors::ProductVariant at ./spec/services/spree/imports/row_processors/product_variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:1:1\"}}","suiteSourceFile":"core/spec/services/spree/imports/row_processors/product_variant_spec.rb"},{"name":"when importing with tax_category when tax_category does not exist does not assign a tax category","suite":"Spree::Imports::RowProcessors::ProductVariant at ./spec/services/spree/imports/row_processors/product_variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:2:1\"}}","suiteSourceFile":"core/spec/services/spree/imports/row_processors/product_variant_spec.rb"},{"name":"when importing with tax_category when updating variant with different tax_category updates the tax category","suite":"Spree::Imports::RowProcessors::ProductVariant at ./spec/services/spree/imports/row_processors/product_variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:3:1\"}}","suiteSourceFile":"core/spec/services/spree/imports/row_processors/product_variant_spec.rb"},{"name":"when importing with tax_category when tax_category is not provided does not assign a tax category","suite":"Spree::Imports::RowProcessors::ProductVariant at ./spec/services/spree/imports/row_processors/product_variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:4:1\"}}","suiteSourceFile":"core/spec/services/spree/imports/row_processors/product_variant_spec.rb"},{"name":"when importing with tax_category when importing a non-master variant with tax_category assigns tax category to the non-master variant","suite":"Spree::Imports::RowProcessors::ProductVariant at ./spec/services/spree/imports/row_processors/product_variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:5:1\"}}","suiteSourceFile":"core/spec/services/spree/imports/row_processors/product_variant_spec.rb"},{"name":"creates a line item with any quantity","suite":"Spree::LineItems::Create at ./spec/services/spree/line_items/create_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/services/spree/line_items/create_spec.rb"},{"name":"remove line item with any quantity","suite":"Spree::LineItems::Destroy at ./spec/services/spree/line_items/destroy_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/services/spree/line_items/destroy_spec.rb"},{"name":"given a shipment ensure shipment calls update_amounts instead of order calling ensure_updated_shipments","suite":"Spree::LineItems::Destroy at ./spec/services/spree/line_items/destroy_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/services/spree/line_items/destroy_spec.rb"},{"name":"not given a shipment ensures updated shipments","suite":"Spree::LineItems::Destroy at ./spec/services/spree/line_items/destroy_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/services/spree/line_items/destroy_spec.rb"},{"name":"updates line item with any quantity","suite":"Spree::LineItems::Update at ./spec/services/spree/line_items/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/services/spree/line_items/update_spec.rb"},{"name":"given a shipment ensure shipment calls update_amounts instead of order calling ensure_updated_shipments","suite":"Spree::LineItems::Update at ./spec/services/spree/line_items/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/services/spree/line_items/update_spec.rb"},{"name":"not given a shipment ensures updated shipments","suite":"Spree::LineItems::Update at ./spec/services/spree/line_items/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/services/spree/line_items/update_spec.rb"},{"name":"#call when translatable object does not have a translation in the requested locale sets mobility to retrieve value in the fallback locale","suite":"Spree::Locales::SetFallbackLocaleForStore at ./spec/services/spree/locales/set_fallback_locale_for_store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/services/spree/locales/set_fallback_locale_for_store_spec.rb"},{"name":"#call when translatable object has a translation in the requested locale sets mobility to retrieve value directly","suite":"Spree::Locales::SetFallbackLocaleForStore at ./spec/services/spree/locales/set_fallback_locale_for_store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/services/spree/locales/set_fallback_locale_for_store_spec.rb"},{"name":"with invalid params returns a record with errors","suite":"Spree::Newsletter::Subscribe at ./spec/services/spree/newsletter/subscribe_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/services/spree/newsletter/subscribe_spec.rb"},{"name":"with invalid params does not send a confirmation email","suite":"Spree::Newsletter::Subscribe at ./spec/services/spree/newsletter/subscribe_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/services/spree/newsletter/subscribe_spec.rb"},{"name":"with invalid params does not create a new record","suite":"Spree::Newsletter::Subscribe at ./spec/services/spree/newsletter/subscribe_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/services/spree/newsletter/subscribe_spec.rb"},{"name":"when logged in user has the same email as inputed email returns an instance of NewsletterSubscriber","suite":"Spree::Newsletter::Subscribe at ./spec/services/spree/newsletter/subscribe_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/services/spree/newsletter/subscribe_spec.rb"},{"name":"when logged in user has the same email as inputed email does not send a confirmation email","suite":"Spree::Newsletter::Subscribe at ./spec/services/spree/newsletter/subscribe_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","suiteSourceFile":"core/spec/services/spree/newsletter/subscribe_spec.rb"},{"name":"when logged in user has the same email as inputed email creates a new verified subscriber","suite":"Spree::Newsletter::Subscribe at ./spec/services/spree/newsletter/subscribe_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3\"}}","suiteSourceFile":"core/spec/services/spree/newsletter/subscribe_spec.rb"},{"name":"when logged in user inputs another email sends a confirmation email","suite":"Spree::Newsletter::Subscribe at ./spec/services/spree/newsletter/subscribe_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/services/spree/newsletter/subscribe_spec.rb"},{"name":"when logged in user inputs another email returns an instance of NewsletterSubscriber","suite":"Spree::Newsletter::Subscribe at ./spec/services/spree/newsletter/subscribe_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","suiteSourceFile":"core/spec/services/spree/newsletter/subscribe_spec.rb"},{"name":"when logged in user inputs another email creates a new unverified subscriber","suite":"Spree::Newsletter::Subscribe at ./spec/services/spree/newsletter/subscribe_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3\"}}","suiteSourceFile":"core/spec/services/spree/newsletter/subscribe_spec.rb"},{"name":"when verified subscription already exists returns an instance of NewsletterSubscriber","suite":"Spree::Newsletter::Subscribe at ./spec/services/spree/newsletter/subscribe_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/services/spree/newsletter/subscribe_spec.rb"},{"name":"when verified subscription already exists does not create new subscriber","suite":"Spree::Newsletter::Subscribe at ./spec/services/spree/newsletter/subscribe_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2\"}}","suiteSourceFile":"core/spec/services/spree/newsletter/subscribe_spec.rb"},{"name":"when verified subscription already exists does not send a confirmation email","suite":"Spree::Newsletter::Subscribe at ./spec/services/spree/newsletter/subscribe_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3\"}}","suiteSourceFile":"core/spec/services/spree/newsletter/subscribe_spec.rb"},{"name":"when unverified subscription has been already created returns an instance of NewsletterSubscriber","suite":"Spree::Newsletter::Subscribe at ./spec/services/spree/newsletter/subscribe_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","suiteSourceFile":"core/spec/services/spree/newsletter/subscribe_spec.rb"},{"name":"when unverified subscription has been already created does not create new subscriber","suite":"Spree::Newsletter::Subscribe at ./spec/services/spree/newsletter/subscribe_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2\"}}","suiteSourceFile":"core/spec/services/spree/newsletter/subscribe_spec.rb"},{"name":"when unverified subscription has been already created sends a confirmation email","suite":"Spree::Newsletter::Subscribe at ./spec/services/spree/newsletter/subscribe_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3\"}}","suiteSourceFile":"core/spec/services/spree/newsletter/subscribe_spec.rb"},{"name":"with associated user verifies a subscription","suite":"Spree::Newsletter::Verify at ./spec/services/spree/newsletter/verify_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/services/spree/newsletter/verify_spec.rb"},{"name":"with associated user updates user email marketing attribute","suite":"Spree::Newsletter::Verify at ./spec/services/spree/newsletter/verify_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/services/spree/newsletter/verify_spec.rb"},{"name":"without user verifies a subscription","suite":"Spree::Newsletter::Verify at ./spec/services/spree/newsletter/verify_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/services/spree/newsletter/verify_spec.rb"},{"name":"custom events publishes newsletter_subscriber.verified event when verified","suite":"Spree::Newsletter::Verify at ./spec/services/spree/newsletter/verify_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/services/spree/newsletter/verify_spec.rb"},{"name":"with approver passed example at ./spec/services/spree/orders/approve_spec.rb:21","suite":"Spree::Orders::Approve at ./spec/services/spree/orders/approve_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/services/spree/orders/approve_spec.rb"},{"name":"with approver passed behaves like approves order example at ./spec/services/spree/orders/approve_spec.rb:13","suite":"Spree::Orders::Approve at ./spec/services/spree/orders/approve_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/services/spree/orders/approve_spec.rb"},{"name":"with approver passed behaves like approves order example at ./spec/services/spree/orders/approve_spec.rb:14","suite":"Spree::Orders::Approve at ./spec/services/spree/orders/approve_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2\"}}","suiteSourceFile":"core/spec/services/spree/orders/approve_spec.rb"},{"name":"with approver passed behaves like approves order example at ./spec/services/spree/orders/approve_spec.rb:15","suite":"Spree::Orders::Approve at ./spec/services/spree/orders/approve_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3\"}}","suiteSourceFile":"core/spec/services/spree/orders/approve_spec.rb"},{"name":"without approver passed behaves like approves order example at ./spec/services/spree/orders/approve_spec.rb:13","suite":"Spree::Orders::Approve at ./spec/services/spree/orders/approve_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","suiteSourceFile":"core/spec/services/spree/orders/approve_spec.rb"},{"name":"without approver passed behaves like approves order example at ./spec/services/spree/orders/approve_spec.rb:14","suite":"Spree::Orders::Approve at ./spec/services/spree/orders/approve_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:2\"}}","suiteSourceFile":"core/spec/services/spree/orders/approve_spec.rb"},{"name":"without approver passed behaves like approves order example at ./spec/services/spree/orders/approve_spec.rb:15","suite":"Spree::Orders::Approve at ./spec/services/spree/orders/approve_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:3\"}}","suiteSourceFile":"core/spec/services/spree/orders/approve_spec.rb"},{"name":"with canceler passed example at ./spec/services/spree/orders/cancel_spec.rb:30","suite":"Spree::Orders::Cancel at ./spec/services/spree/orders/cancel_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/services/spree/orders/cancel_spec.rb"},{"name":"with canceler passed behaves like tries to cancel completed order example at ./spec/services/spree/orders/cancel_spec.rb:14","suite":"Spree::Orders::Cancel at ./spec/services/spree/orders/cancel_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","suiteSourceFile":"core/spec/services/spree/orders/cancel_spec.rb"},{"name":"with canceler passed behaves like tries to cancel completed order example at ./spec/services/spree/orders/cancel_spec.rb:15","suite":"Spree::Orders::Cancel at ./spec/services/spree/orders/cancel_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:2\"}}","suiteSourceFile":"core/spec/services/spree/orders/cancel_spec.rb"},{"name":"with canceler passed behaves like tries to cancel completed order example at ./spec/services/spree/orders/cancel_spec.rb:16","suite":"Spree::Orders::Cancel at ./spec/services/spree/orders/cancel_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:3\"}}","suiteSourceFile":"core/spec/services/spree/orders/cancel_spec.rb"},{"name":"with canceler passed behaves like tries to cancel incomplete order example at ./spec/services/spree/orders/cancel_spec.rb:22","suite":"Spree::Orders::Cancel at ./spec/services/spree/orders/cancel_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","suiteSourceFile":"core/spec/services/spree/orders/cancel_spec.rb"},{"name":"with canceler passed behaves like tries to cancel incomplete order example at ./spec/services/spree/orders/cancel_spec.rb:23","suite":"Spree::Orders::Cancel at ./spec/services/spree/orders/cancel_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:2\"}}","suiteSourceFile":"core/spec/services/spree/orders/cancel_spec.rb"},{"name":"without canceler passed behaves like tries to cancel completed order example at ./spec/services/spree/orders/cancel_spec.rb:14","suite":"Spree::Orders::Cancel at ./spec/services/spree/orders/cancel_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1:1\"}}","suiteSourceFile":"core/spec/services/spree/orders/cancel_spec.rb"},{"name":"without canceler passed behaves like tries to cancel completed order example at ./spec/services/spree/orders/cancel_spec.rb:15","suite":"Spree::Orders::Cancel at ./spec/services/spree/orders/cancel_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1:2\"}}","suiteSourceFile":"core/spec/services/spree/orders/cancel_spec.rb"},{"name":"without canceler passed behaves like tries to cancel completed order example at ./spec/services/spree/orders/cancel_spec.rb:16","suite":"Spree::Orders::Cancel at ./spec/services/spree/orders/cancel_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1:3\"}}","suiteSourceFile":"core/spec/services/spree/orders/cancel_spec.rb"},{"name":"without canceler passed behaves like tries to cancel incomplete order example at ./spec/services/spree/orders/cancel_spec.rb:22","suite":"Spree::Orders::Cancel at ./spec/services/spree/orders/cancel_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:2:1\"}}","suiteSourceFile":"core/spec/services/spree/orders/cancel_spec.rb"},{"name":"without canceler passed behaves like tries to cancel incomplete order example at ./spec/services/spree/orders/cancel_spec.rb:23","suite":"Spree::Orders::Cancel at ./spec/services/spree/orders/cancel_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:2:2\"}}","suiteSourceFile":"core/spec/services/spree/orders/cancel_spec.rb"},{"name":"when order has no user creates a new user","suite":"Spree::Orders::CreateUserAccount at ./spec/services/spree/orders/create_user_account_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/services/spree/orders/create_user_account_spec.rb"},{"name":"when order has no user assigns the ship address to the user","suite":"Spree::Orders::CreateUserAccount at ./spec/services/spree/orders/create_user_account_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/services/spree/orders/create_user_account_spec.rb"},{"name":"when order has no user assigns the bill address to the user","suite":"Spree::Orders::CreateUserAccount at ./spec/services/spree/orders/create_user_account_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/services/spree/orders/create_user_account_spec.rb"},{"name":"when order has no user assigns the user to the order","suite":"Spree::Orders::CreateUserAccount at ./spec/services/spree/orders/create_user_account_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","suiteSourceFile":"core/spec/services/spree/orders/create_user_account_spec.rb"},{"name":"when user with the given email already exists does not create a new user","suite":"Spree::Orders::CreateUserAccount at ./spec/services/spree/orders/create_user_account_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/services/spree/orders/create_user_account_spec.rb"},{"name":"when user with the given email already exists assigns the user to the order","suite":"Spree::Orders::CreateUserAccount at ./spec/services/spree/orders/create_user_account_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","suiteSourceFile":"core/spec/services/spree/orders/create_user_account_spec.rb"},{"name":"when user with the given email already exists returns success with the user","suite":"Spree::Orders::CreateUserAccount at ./spec/services/spree/orders/create_user_account_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3\"}}","suiteSourceFile":"core/spec/services/spree/orders/create_user_account_spec.rb"},{"name":"valid attributes with new source attributes creates new payment record","suite":"Spree::Payments::Create at ./spec/services/spree/payments/create_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/services/spree/payments/create_spec.rb"},{"name":"valid attributes with new source attributes example at ./spec/services/spree/payments/create_spec.rb:39","suite":"Spree::Payments::Create at ./spec/services/spree/payments/create_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2\"}}","suiteSourceFile":"core/spec/services/spree/payments/create_spec.rb"},{"name":"valid attributes with new source attributes example at ./spec/services/spree/payments/create_spec.rb:40","suite":"Spree::Payments::Create at ./spec/services/spree/payments/create_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3\"}}","suiteSourceFile":"core/spec/services/spree/payments/create_spec.rb"},{"name":"valid attributes with new source attributes creates new payment source record","suite":"Spree::Payments::Create at ./spec/services/spree/payments/create_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:4\"}}","suiteSourceFile":"core/spec/services/spree/payments/create_spec.rb"},{"name":"valid attributes with new source attributes with user creates new payment record","suite":"Spree::Payments::Create at ./spec/services/spree/payments/create_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:5:1\"}}","suiteSourceFile":"core/spec/services/spree/payments/create_spec.rb"},{"name":"valid attributes with new source attributes with user example at ./spec/services/spree/payments/create_spec.rb:39","suite":"Spree::Payments::Create at ./spec/services/spree/payments/create_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:5:2\"}}","suiteSourceFile":"core/spec/services/spree/payments/create_spec.rb"},{"name":"valid attributes with new source attributes with user example at ./spec/services/spree/payments/create_spec.rb:40","suite":"Spree::Payments::Create at ./spec/services/spree/payments/create_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:5:3\"}}","suiteSourceFile":"core/spec/services/spree/payments/create_spec.rb"},{"name":"valid attributes with new source attributes with user creates new payment source record","suite":"Spree::Payments::Create at ./spec/services/spree/payments/create_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:5:4\"}}","suiteSourceFile":"core/spec/services/spree/payments/create_spec.rb"},{"name":"valid attributes with new source attributes with user assigns user example at ./spec/services/spree/payments/create_spec.rb:64","suite":"Spree::Payments::Create at ./spec/services/spree/payments/create_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:5:5:1\"}}","suiteSourceFile":"core/spec/services/spree/payments/create_spec.rb"},{"name":"valid attributes with existing source valid source creates new payment record","suite":"Spree::Payments::Create at ./spec/services/spree/payments/create_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1:1\"}}","suiteSourceFile":"core/spec/services/spree/payments/create_spec.rb"},{"name":"valid attributes with existing source valid source example at ./spec/services/spree/payments/create_spec.rb:39","suite":"Spree::Payments::Create at ./spec/services/spree/payments/create_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1:2\"}}","suiteSourceFile":"core/spec/services/spree/payments/create_spec.rb"},{"name":"valid attributes with existing source valid source example at ./spec/services/spree/payments/create_spec.rb:40","suite":"Spree::Payments::Create at ./spec/services/spree/payments/create_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1:3\"}}","suiteSourceFile":"core/spec/services/spree/payments/create_spec.rb"},{"name":"valid attributes with existing source valid source example at ./spec/services/spree/payments/create_spec.rb:85","suite":"Spree::Payments::Create at ./spec/services/spree/payments/create_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1:4\"}}","suiteSourceFile":"core/spec/services/spree/payments/create_spec.rb"},{"name":"valid attributes with existing source source assigned to a different user example at ./spec/services/spree/payments/create_spec.rb:93","suite":"Spree::Payments::Create at ./spec/services/spree/payments/create_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:1\"}}","suiteSourceFile":"core/spec/services/spree/payments/create_spec.rb"},{"name":"valid attributes with existing source source assigned to a different user example at ./spec/services/spree/payments/create_spec.rb:94","suite":"Spree::Payments::Create at ./spec/services/spree/payments/create_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:2\"}}","suiteSourceFile":"core/spec/services/spree/payments/create_spec.rb"},{"name":"valid attributes without source example at ./spec/services/spree/payments/create_spec.rb:110","suite":"Spree::Payments::Create at ./spec/services/spree/payments/create_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","suiteSourceFile":"core/spec/services/spree/payments/create_spec.rb"},{"name":"valid attributes without source example at ./spec/services/spree/payments/create_spec.rb:111","suite":"Spree::Payments::Create at ./spec/services/spree/payments/create_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:2\"}}","suiteSourceFile":"core/spec/services/spree/payments/create_spec.rb"},{"name":"missing payment method example at ./spec/services/spree/payments/create_spec.rb:131","suite":"Spree::Payments::Create at ./spec/services/spree/payments/create_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/services/spree/payments/create_spec.rb"},{"name":"missing payment method example at ./spec/services/spree/payments/create_spec.rb:132","suite":"Spree::Payments::Create at ./spec/services/spree/payments/create_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","suiteSourceFile":"core/spec/services/spree/payments/create_spec.rb"},{"name":"invalid attributes example at ./spec/services/spree/payments/create_spec.rb:151","suite":"Spree::Payments::Create at ./spec/services/spree/payments/create_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/services/spree/payments/create_spec.rb"},{"name":"invalid attributes example at ./spec/services/spree/payments/create_spec.rb:152","suite":"Spree::Payments::Create at ./spec/services/spree/payments/create_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","suiteSourceFile":"core/spec/services/spree/payments/create_spec.rb"},{"name":"when product matches new taxon should be added to the taxon","suite":"Spree::Products::AutoMatchTaxons at ./spec/services/spree/products/auto_match_taxons_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/services/spree/products/auto_match_taxons_spec.rb"},{"name":"when product matches new taxon doesn't do circular call","suite":"Spree::Products::AutoMatchTaxons at ./spec/services/spree/products/auto_match_taxons_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/services/spree/products/auto_match_taxons_spec.rb"},{"name":"when product no longer matches taxon should be removed from the taxon","suite":"Spree::Products::AutoMatchTaxons at ./spec/services/spree/products/auto_match_taxons_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/services/spree/products/auto_match_taxons_spec.rb"},{"name":"example at ./spec/services/spree/products/duplicator_spec.rb:31","suite":"Spree::Products::Duplicator at ./spec/services/spree/products/duplicator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","suiteSourceFile":"core/spec/services/spree/products/duplicator_spec.rb"},{"name":"duplicates the product","suite":"Spree::Products::Duplicator at ./spec/services/spree/products/duplicator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2\"}}","suiteSourceFile":"core/spec/services/spree/products/duplicator_spec.rb"},{"name":"duplicates already duplicated product","suite":"Spree::Products::Duplicator at ./spec/services/spree/products/duplicator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3\"}}","suiteSourceFile":"core/spec/services/spree/products/duplicator_spec.rb"},{"name":"image duplication clones images by default","suite":"Spree::Products::Duplicator at ./spec/services/spree/products/duplicator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/services/spree/products/duplicator_spec.rb"},{"name":"image duplication when excluding images from cloning doesn't clone images","suite":"Spree::Products::Duplicator at ./spec/services/spree/products/duplicator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1\"}}","suiteSourceFile":"core/spec/services/spree/products/duplicator_spec.rb"},{"name":"product attributes always sets the product as draft","suite":"Spree::Products::Duplicator at ./spec/services/spree/products/duplicator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","suiteSourceFile":"core/spec/services/spree/products/duplicator_spec.rb"},{"name":"product attributes sets an unique name","suite":"Spree::Products::Duplicator at ./spec/services/spree/products/duplicator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2\"}}","suiteSourceFile":"core/spec/services/spree/products/duplicator_spec.rb"},{"name":"product attributes sets an unique sku","suite":"Spree::Products::Duplicator at ./spec/services/spree/products/duplicator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3\"}}","suiteSourceFile":"core/spec/services/spree/products/duplicator_spec.rb"},{"name":"product attributes copies the properties","suite":"Spree::Products::Duplicator at ./spec/services/spree/products/duplicator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:4\"}}","suiteSourceFile":"core/spec/services/spree/products/duplicator_spec.rb"},{"name":"product attributes copies tags","suite":"Spree::Products::Duplicator at ./spec/services/spree/products/duplicator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:5\"}}","suiteSourceFile":"core/spec/services/spree/products/duplicator_spec.rb"},{"name":"product attributes clones barcode","suite":"Spree::Products::Duplicator at ./spec/services/spree/products/duplicator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:6\"}}","suiteSourceFile":"core/spec/services/spree/products/duplicator_spec.rb"},{"name":"product attributes clones backorderable and sets stock to 0","suite":"Spree::Products::Duplicator at ./spec/services/spree/products/duplicator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:7\"}}","suiteSourceFile":"core/spec/services/spree/products/duplicator_spec.rb"},{"name":"product prices clones prices","suite":"Spree::Products::Duplicator at ./spec/services/spree/products/duplicator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","suiteSourceFile":"core/spec/services/spree/products/duplicator_spec.rb"},{"name":"stores example at ./spec/services/spree/products/duplicator_spec.rb:115","suite":"Spree::Products::Duplicator at ./spec/services/spree/products/duplicator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","suiteSourceFile":"core/spec/services/spree/products/duplicator_spec.rb"},{"name":"with variants duplicates the variants","suite":"Spree::Products::Duplicator at ./spec/services/spree/products/duplicator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1\"}}","suiteSourceFile":"core/spec/services/spree/products/duplicator_spec.rb"},{"name":"with variants doesn't duplicate the option values","suite":"Spree::Products::Duplicator at ./spec/services/spree/products/duplicator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2\"}}","suiteSourceFile":"core/spec/services/spree/products/duplicator_spec.rb"},{"name":"with variants clones barcodes","suite":"Spree::Products::Duplicator at ./spec/services/spree/products/duplicator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:3\"}}","suiteSourceFile":"core/spec/services/spree/products/duplicator_spec.rb"},{"name":"with variants clones backorderable and sets stock to 0","suite":"Spree::Products::Duplicator at ./spec/services/spree/products/duplicator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:4\"}}","suiteSourceFile":"core/spec/services/spree/products/duplicator_spec.rb"},{"name":"with variants image duplication clones images by default","suite":"Spree::Products::Duplicator at ./spec/services/spree/products/duplicator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:5:1\"}}","suiteSourceFile":"core/spec/services/spree/products/duplicator_spec.rb"},{"name":"with variants image duplication when excluding images from cloning doesn't clone images","suite":"Spree::Products::Duplicator at ./spec/services/spree/products/duplicator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:5:2:1\"}}","suiteSourceFile":"core/spec/services/spree/products/duplicator_spec.rb"},{"name":"with variants variant prices clones prices","suite":"Spree::Products::Duplicator at ./spec/services/spree/products/duplicator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:6:1\"}}","suiteSourceFile":"core/spec/services/spree/products/duplicator_spec.rb"},{"name":"taxon preservation across stores when editing a product with taxons from multiple stores when updating taxon_ids from current store preserves taxons from other stores","suite":"Spree::Products::PrepareNestedAttributes at ./spec/services/spree/products/prepare_nested_attributes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","suiteSourceFile":"core/spec/services/spree/products/prepare_nested_attributes_spec.rb"},{"name":"taxon preservation across stores when editing a product with taxons from multiple stores when updating taxon_ids from current store includes the new taxon from current store","suite":"Spree::Products::PrepareNestedAttributes at ./spec/services/spree/products/prepare_nested_attributes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:2\"}}","suiteSourceFile":"core/spec/services/spree/products/prepare_nested_attributes_spec.rb"},{"name":"taxon preservation across stores when editing a product with taxons from multiple stores when updating taxon_ids from current store removes the old taxon from current store","suite":"Spree::Products::PrepareNestedAttributes at ./spec/services/spree/products/prepare_nested_attributes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:3\"}}","suiteSourceFile":"core/spec/services/spree/products/prepare_nested_attributes_spec.rb"},{"name":"taxon preservation across stores when editing a product with taxons from multiple stores when updating taxon_ids from current store returns unique taxon IDs","suite":"Spree::Products::PrepareNestedAttributes at ./spec/services/spree/products/prepare_nested_attributes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:4\"}}","suiteSourceFile":"core/spec/services/spree/products/prepare_nested_attributes_spec.rb"},{"name":"taxon preservation across stores when editing a product with taxons from multiple stores when removing all taxons from current store preserves taxons from other stores","suite":"Spree::Products::PrepareNestedAttributes at ./spec/services/spree/products/prepare_nested_attributes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","suiteSourceFile":"core/spec/services/spree/products/prepare_nested_attributes_spec.rb"},{"name":"taxon preservation across stores when editing a product with taxons from multiple stores when removing all taxons from current store does not include taxons from current store","suite":"Spree::Products::PrepareNestedAttributes at ./spec/services/spree/products/prepare_nested_attributes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:2\"}}","suiteSourceFile":"core/spec/services/spree/products/prepare_nested_attributes_spec.rb"},{"name":"taxon preservation across stores when editing a product with taxons from multiple stores when taxon_ids param is not present does not add taxon_ids key","suite":"Spree::Products::PrepareNestedAttributes at ./spec/services/spree/products/prepare_nested_attributes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:1\"}}","suiteSourceFile":"core/spec/services/spree/products/prepare_nested_attributes_spec.rb"},{"name":"taxon preservation across stores when creating a new product does not merge taxons from other stores","suite":"Spree::Products::PrepareNestedAttributes at ./spec/services/spree/products/prepare_nested_attributes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/services/spree/products/prepare_nested_attributes_spec.rb"},{"name":"taxon preservation across stores when creating a new product only includes submitted taxon IDs","suite":"Spree::Products::PrepareNestedAttributes at ./spec/services/spree/products/prepare_nested_attributes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2\"}}","suiteSourceFile":"core/spec/services/spree/products/prepare_nested_attributes_spec.rb"},{"name":"taxon preservation across stores when product has taxons from multiple other stores preserves taxons from all other stores","suite":"Spree::Products::PrepareNestedAttributes at ./spec/services/spree/products/prepare_nested_attributes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","suiteSourceFile":"core/spec/services/spree/products/prepare_nested_attributes_spec.rb"},{"name":"taxon preservation across stores when product has taxons from multiple other stores includes the new taxon from current store","suite":"Spree::Products::PrepareNestedAttributes at ./spec/services/spree/products/prepare_nested_attributes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:2\"}}","suiteSourceFile":"core/spec/services/spree/products/prepare_nested_attributes_spec.rb"},{"name":"taxon preservation across stores when product has taxons from multiple other stores has exactly 3 taxon IDs","suite":"Spree::Products::PrepareNestedAttributes at ./spec/services/spree/products/prepare_nested_attributes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:3\"}}","suiteSourceFile":"core/spec/services/spree/products/prepare_nested_attributes_spec.rb"},{"name":"store_ids handling when store_ids is blank adds current store to store_ids","suite":"Spree::Products::PrepareNestedAttributes at ./spec/services/spree/products/prepare_nested_attributes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","suiteSourceFile":"core/spec/services/spree/products/prepare_nested_attributes_spec.rb"},{"name":"store_ids handling when store_ids is present preserves submitted store_ids","suite":"Spree::Products::PrepareNestedAttributes at ./spec/services/spree/products/prepare_nested_attributes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","suiteSourceFile":"core/spec/services/spree/products/prepare_nested_attributes_spec.rb"},{"name":"product_properties_attributes handling when product property value is blank marks the product property for destruction","suite":"Spree::Products::PrepareNestedAttributes at ./spec/services/spree/products/prepare_nested_attributes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","suiteSourceFile":"core/spec/services/spree/products/prepare_nested_attributes_spec.rb"},{"name":"product_properties_attributes handling when product property value is present does not mark the product property for destruction","suite":"Spree::Products::PrepareNestedAttributes at ./spec/services/spree/products/prepare_nested_attributes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","suiteSourceFile":"core/spec/services/spree/products/prepare_nested_attributes_spec.rb"},{"name":"prices_attributes handling when user cannot update prices with variants_attributes removes prices_attributes from variants","suite":"Spree::Products::PrepareNestedAttributes at ./spec/services/spree/products/prepare_nested_attributes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1:1\"}}","suiteSourceFile":"core/spec/services/spree/products/prepare_nested_attributes_spec.rb"},{"name":"prices_attributes handling when user cannot update prices with master_attributes removes prices_attributes from master","suite":"Spree::Products::PrepareNestedAttributes at ./spec/services/spree/products/prepare_nested_attributes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:2:1\"}}","suiteSourceFile":"core/spec/services/spree/products/prepare_nested_attributes_spec.rb"},{"name":"prices_attributes handling when user can update prices when price amount is blank marks the price for destruction","suite":"Spree::Products::PrepareNestedAttributes at ./spec/services/spree/products/prepare_nested_attributes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1:1\"}}","suiteSourceFile":"core/spec/services/spree/products/prepare_nested_attributes_spec.rb"},{"name":"stock_items_attributes handling when user cannot update stock items with variants_attributes removes stock_items_attributes from variants","suite":"Spree::Products::PrepareNestedAttributes at ./spec/services/spree/products/prepare_nested_attributes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:1:1\"}}","suiteSourceFile":"core/spec/services/spree/products/prepare_nested_attributes_spec.rb"},{"name":"stock_items_attributes handling when user cannot update stock items with master_attributes removes stock_items_attributes from master","suite":"Spree::Products::PrepareNestedAttributes at ./spec/services/spree/products/prepare_nested_attributes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:2:1\"}}","suiteSourceFile":"core/spec/services/spree/products/prepare_nested_attributes_spec.rb"},{"name":"runs without raising errors","suite":"Spree::Seeds::All at ./spec/services/spree/seeds/all_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","suiteSourceFile":"core/spec/services/spree/seeds/all_spec.rb"},{"name":"ShippingMethod creates a Digital Delivery shipping method","suite":"Spree::Seeds::DigitalDelivery at ./spec/services/spree/seeds/digital_delivery_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/services/spree/seeds/digital_delivery_spec.rb"},{"name":"ShippingMethod when Digital Delivery shipping method already exists doesn't create a new shipping method","suite":"Spree::Seeds::DigitalDelivery at ./spec/services/spree/seeds/digital_delivery_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/services/spree/seeds/digital_delivery_spec.rb"},{"name":"creates a Store Credit payment method","suite":"Spree::Seeds::PaymentMethods at ./spec/services/spree/seeds/payment_methods_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","suiteSourceFile":"core/spec/services/spree/seeds/payment_methods_spec.rb"},{"name":"when the Store Credit payment method already exists doesn't create a new payment method","suite":"Spree::Seeds::PaymentMethods at ./spec/services/spree/seeds/payment_methods_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/services/spree/seeds/payment_methods_spec.rb"},{"name":"RefundReason creates a Return processing RefundReason","suite":"Spree::Seeds::ReturnsEnvironment at ./spec/services/spree/seeds/returns_environment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/services/spree/seeds/returns_environment_spec.rb"},{"name":"RefundReason when the RefundReason already exists doesn't create a new RefundReason","suite":"Spree::Seeds::ReturnsEnvironment at ./spec/services/spree/seeds/returns_environment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/services/spree/seeds/returns_environment_spec.rb"},{"name":"ReturnAuthorizationReason creates all ReturnAuthorizationReasons","suite":"Spree::Seeds::ReturnsEnvironment at ./spec/services/spree/seeds/returns_environment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/services/spree/seeds/returns_environment_spec.rb"},{"name":"ReturnAuthorizationReason when ReturnAuthorizationReasons already exist doesn't create new ReturnAuthorizationReasons","suite":"Spree::Seeds::ReturnsEnvironment at ./spec/services/spree/seeds/returns_environment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","suiteSourceFile":"core/spec/services/spree/seeds/returns_environment_spec.rb"},{"name":"ReimbursementType creates all ReimbursementTypes","suite":"Spree::Seeds::ReturnsEnvironment at ./spec/services/spree/seeds/returns_environment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/services/spree/seeds/returns_environment_spec.rb"},{"name":"ReimbursementType when ReimbursementTypes already exist doesn't create new ReimbursementTypes","suite":"Spree::Seeds::ReturnsEnvironment at ./spec/services/spree/seeds/returns_environment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","suiteSourceFile":"core/spec/services/spree/seeds/returns_environment_spec.rb"},{"name":"TaxCategory creates all TaxCategories","suite":"Spree::Seeds::TaxCategories at ./spec/services/spree/seeds/tax_categories_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/services/spree/seeds/tax_categories_spec.rb"},{"name":"TaxCategory when TaxCategories already exist doesn't create new TaxCategories","suite":"Spree::Seeds::TaxCategories at ./spec/services/spree/seeds/tax_categories_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/services/spree/seeds/tax_categories_spec.rb"},{"name":"valid attributes without pre-existing line item behaves like creates a line item example at ./spec/services/spree/shipments/add_item_spec.rb:28","suite":"Spree::Shipments::AddItem at ./spec/services/spree/shipments/add_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","suiteSourceFile":"core/spec/services/spree/shipments/add_item_spec.rb"},{"name":"valid attributes without pre-existing line item behaves like creates a line item creates new line item record","suite":"Spree::Shipments::AddItem at ./spec/services/spree/shipments/add_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:2\"}}","suiteSourceFile":"core/spec/services/spree/shipments/add_item_spec.rb"},{"name":"valid attributes without quantity passed example at ./spec/services/spree/shipments/add_item_spec.rb:49","suite":"Spree::Shipments::AddItem at ./spec/services/spree/shipments/add_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/services/spree/shipments/add_item_spec.rb"},{"name":"valid attributes without quantity passed creates new line item record","suite":"Spree::Shipments::AddItem at ./spec/services/spree/shipments/add_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2\"}}","suiteSourceFile":"core/spec/services/spree/shipments/add_item_spec.rb"},{"name":"valid attributes with existing line item does not create a new line item","suite":"Spree::Shipments::AddItem at ./spec/services/spree/shipments/add_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","suiteSourceFile":"core/spec/services/spree/shipments/add_item_spec.rb"},{"name":"valid attributes with existing line item adds quantity to the existing line item","suite":"Spree::Shipments::AddItem at ./spec/services/spree/shipments/add_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:2\"}}","suiteSourceFile":"core/spec/services/spree/shipments/add_item_spec.rb"},{"name":"valid attributes with existing line item updates line item totals","suite":"Spree::Shipments::AddItem at ./spec/services/spree/shipments/add_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:3\"}}","suiteSourceFile":"core/spec/services/spree/shipments/add_item_spec.rb"},{"name":"missing variant example at ./spec/services/spree/shipments/add_item_spec.rb:91","suite":"Spree::Shipments::AddItem at ./spec/services/spree/shipments/add_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/services/spree/shipments/add_item_spec.rb"},{"name":"missing variant example at ./spec/services/spree/shipments/add_item_spec.rb:92","suite":"Spree::Shipments::AddItem at ./spec/services/spree/shipments/add_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","suiteSourceFile":"core/spec/services/spree/shipments/add_item_spec.rb"},{"name":"valid attributes without pre-existing line item behaves like creates a shipment creates new shipment record","suite":"Spree::Shipments::Create at ./spec/services/spree/shipments/create_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","suiteSourceFile":"core/spec/services/spree/shipments/create_spec.rb"},{"name":"valid attributes without pre-existing line item behaves like creates a shipment example at ./spec/services/spree/shipments/create_spec.rb:35","suite":"Spree::Shipments::Create at ./spec/services/spree/shipments/create_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:2\"}}","suiteSourceFile":"core/spec/services/spree/shipments/create_spec.rb"},{"name":"valid attributes without pre-existing line item behaves like creates a shipment example at ./spec/services/spree/shipments/create_spec.rb:36","suite":"Spree::Shipments::Create at ./spec/services/spree/shipments/create_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:3\"}}","suiteSourceFile":"core/spec/services/spree/shipments/create_spec.rb"},{"name":"valid attributes without pre-existing line item behaves like creates a line item creates new line item record","suite":"Spree::Shipments::Create at ./spec/services/spree/shipments/create_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","suiteSourceFile":"core/spec/services/spree/shipments/create_spec.rb"},{"name":"valid attributes with existing line item does not create a new line item","suite":"Spree::Shipments::Create at ./spec/services/spree/shipments/create_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2\"}}","suiteSourceFile":"core/spec/services/spree/shipments/create_spec.rb"},{"name":"valid attributes with existing line item adds quantity to the existing line item","suite":"Spree::Shipments::Create at ./spec/services/spree/shipments/create_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:3\"}}","suiteSourceFile":"core/spec/services/spree/shipments/create_spec.rb"},{"name":"valid attributes with existing line item updates line item totals","suite":"Spree::Shipments::Create at ./spec/services/spree/shipments/create_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:4\"}}","suiteSourceFile":"core/spec/services/spree/shipments/create_spec.rb"},{"name":"valid attributes with existing line item behaves like creates a shipment creates new shipment record","suite":"Spree::Shipments::Create at ./spec/services/spree/shipments/create_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1:1\"}}","suiteSourceFile":"core/spec/services/spree/shipments/create_spec.rb"},{"name":"valid attributes with existing line item behaves like creates a shipment example at ./spec/services/spree/shipments/create_spec.rb:35","suite":"Spree::Shipments::Create at ./spec/services/spree/shipments/create_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1:2\"}}","suiteSourceFile":"core/spec/services/spree/shipments/create_spec.rb"},{"name":"valid attributes with existing line item behaves like creates a shipment example at ./spec/services/spree/shipments/create_spec.rb:36","suite":"Spree::Shipments::Create at ./spec/services/spree/shipments/create_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1:3\"}}","suiteSourceFile":"core/spec/services/spree/shipments/create_spec.rb"},{"name":"missing variant example at ./spec/services/spree/shipments/create_spec.rb:88","suite":"Spree::Shipments::Create at ./spec/services/spree/shipments/create_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/services/spree/shipments/create_spec.rb"},{"name":"missing variant example at ./spec/services/spree/shipments/create_spec.rb:89","suite":"Spree::Shipments::Create at ./spec/services/spree/shipments/create_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","suiteSourceFile":"core/spec/services/spree/shipments/create_spec.rb"},{"name":"missing order example at ./spec/services/spree/shipments/create_spec.rb:102","suite":"Spree::Shipments::Create at ./spec/services/spree/shipments/create_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/services/spree/shipments/create_spec.rb"},{"name":"missing order example at ./spec/services/spree/shipments/create_spec.rb:103","suite":"Spree::Shipments::Create at ./spec/services/spree/shipments/create_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","suiteSourceFile":"core/spec/services/spree/shipments/create_spec.rb"},{"name":"missing stock location example at ./spec/services/spree/shipments/create_spec.rb:116","suite":"Spree::Shipments::Create at ./spec/services/spree/shipments/create_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/services/spree/shipments/create_spec.rb"},{"name":"missing stock location example at ./spec/services/spree/shipments/create_spec.rb:117","suite":"Spree::Shipments::Create at ./spec/services/spree/shipments/create_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2\"}}","suiteSourceFile":"core/spec/services/spree/shipments/create_spec.rb"},{"name":"valid attributes part of the line item qty removed example at ./spec/services/spree/shipments/remove_item_spec.rb:51","suite":"Spree::Shipments::RemoveItem at ./spec/services/spree/shipments/remove_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2\"}}","suiteSourceFile":"core/spec/services/spree/shipments/remove_item_spec.rb"},{"name":"valid attributes part of the line item qty removed example at ./spec/services/spree/shipments/remove_item_spec.rb:52","suite":"Spree::Shipments::RemoveItem at ./spec/services/spree/shipments/remove_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3\"}}","suiteSourceFile":"core/spec/services/spree/shipments/remove_item_spec.rb"},{"name":"valid attributes part of the line item qty removed decreases line item quantity","suite":"Spree::Shipments::RemoveItem at ./spec/services/spree/shipments/remove_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:4\"}}","suiteSourceFile":"core/spec/services/spree/shipments/remove_item_spec.rb"},{"name":"valid attributes part of the line item qty removed example at ./spec/services/spree/shipments/remove_item_spec.rb:60","suite":"Spree::Shipments::RemoveItem at ./spec/services/spree/shipments/remove_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:5\"}}","suiteSourceFile":"core/spec/services/spree/shipments/remove_item_spec.rb"},{"name":"valid attributes part of the line item qty removed example at ./spec/services/spree/shipments/remove_item_spec.rb:61","suite":"Spree::Shipments::RemoveItem at ./spec/services/spree/shipments/remove_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:6\"}}","suiteSourceFile":"core/spec/services/spree/shipments/remove_item_spec.rb"},{"name":"valid attributes part of the line item qty removed behaves like successful example at ./spec/services/spree/shipments/remove_item_spec.rb:26","suite":"Spree::Shipments::RemoveItem at ./spec/services/spree/shipments/remove_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","suiteSourceFile":"core/spec/services/spree/shipments/remove_item_spec.rb"},{"name":"valid attributes entire shipment & line item qty removed behaves like successful example at ./spec/services/spree/shipments/remove_item_spec.rb:26","suite":"Spree::Shipments::RemoveItem at ./spec/services/spree/shipments/remove_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1:1\"}}","suiteSourceFile":"core/spec/services/spree/shipments/remove_item_spec.rb"},{"name":"valid attributes entire shipment & line item qty removed behaves like removes line item example at ./spec/services/spree/shipments/remove_item_spec.rb:30","suite":"Spree::Shipments::RemoveItem at ./spec/services/spree/shipments/remove_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:1\"}}","suiteSourceFile":"core/spec/services/spree/shipments/remove_item_spec.rb"},{"name":"valid attributes entire shipment & line item qty removed behaves like removes shipment example at ./spec/services/spree/shipments/remove_item_spec.rb:34","suite":"Spree::Shipments::RemoveItem at ./spec/services/spree/shipments/remove_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:3:1\"}}","suiteSourceFile":"core/spec/services/spree/shipments/remove_item_spec.rb"},{"name":"valid attributes entire shipment & line item qty removed behaves like removes shipment example at ./spec/services/spree/shipments/remove_item_spec.rb:35","suite":"Spree::Shipments::RemoveItem at ./spec/services/spree/shipments/remove_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:3:2\"}}","suiteSourceFile":"core/spec/services/spree/shipments/remove_item_spec.rb"},{"name":"valid attributes no quantity is passed behaves like successful example at ./spec/services/spree/shipments/remove_item_spec.rb:26","suite":"Spree::Shipments::RemoveItem at ./spec/services/spree/shipments/remove_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1:1\"}}","suiteSourceFile":"core/spec/services/spree/shipments/remove_item_spec.rb"},{"name":"valid attributes no quantity is passed behaves like removes line item example at ./spec/services/spree/shipments/remove_item_spec.rb:30","suite":"Spree::Shipments::RemoveItem at ./spec/services/spree/shipments/remove_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:2:1\"}}","suiteSourceFile":"core/spec/services/spree/shipments/remove_item_spec.rb"},{"name":"valid attributes no quantity is passed behaves like removes shipment example at ./spec/services/spree/shipments/remove_item_spec.rb:34","suite":"Spree::Shipments::RemoveItem at ./spec/services/spree/shipments/remove_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:3:1\"}}","suiteSourceFile":"core/spec/services/spree/shipments/remove_item_spec.rb"},{"name":"valid attributes no quantity is passed behaves like removes shipment example at ./spec/services/spree/shipments/remove_item_spec.rb:35","suite":"Spree::Shipments::RemoveItem at ./spec/services/spree/shipments/remove_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:3:2\"}}","suiteSourceFile":"core/spec/services/spree/shipments/remove_item_spec.rb"},{"name":"missing variant example at ./spec/services/spree/shipments/remove_item_spec.rb:93","suite":"Spree::Shipments::RemoveItem at ./spec/services/spree/shipments/remove_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/services/spree/shipments/remove_item_spec.rb"},{"name":"missing variant example at ./spec/services/spree/shipments/remove_item_spec.rb:94","suite":"Spree::Shipments::RemoveItem at ./spec/services/spree/shipments/remove_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","suiteSourceFile":"core/spec/services/spree/shipments/remove_item_spec.rb"},{"name":"#call with prepared stock items with stock items in the db inserts stock items without duplicates","suite":"Spree::StockLocations::StockItems::Create at ./spec/services/spree/stock_locations/stock_items/create_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","suiteSourceFile":"core/spec/services/spree/stock_locations/stock_items/create_spec.rb"},{"name":"#call with prepared stock items without stock items in the db inserts the stock location stock items","suite":"Spree::StockLocations::StockItems::Create at ./spec/services/spree/stock_locations/stock_items/create_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","suiteSourceFile":"core/spec/services/spree/stock_locations/stock_items/create_spec.rb"},{"name":"#call with prepared stock items without stock items in the db sets the stock location data necessary for the inserted stock items","suite":"Spree::StockLocations::StockItems::Create at ./spec/services/spree/stock_locations/stock_items/create_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:2\"}}","suiteSourceFile":"core/spec/services/spree/stock_locations/stock_items/create_spec.rb"},{"name":"#call with prepared stock items without stock items in the db invalidates the Variant cache","suite":"Spree::StockLocations::StockItems::Create at ./spec/services/spree/stock_locations/stock_items/create_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:3\"}}","suiteSourceFile":"core/spec/services/spree/stock_locations/stock_items/create_spec.rb"},{"name":"#call without prepared stock items does not insert stock items","suite":"Spree::StockLocations::StockItems::Create at ./spec/services/spree/stock_locations/stock_items/create_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/services/spree/stock_locations/stock_items/create_spec.rb"},{"name":"#call without prepared stock items does not invalidates the Variant cache","suite":"Spree::StockLocations::StockItems::Create at ./spec/services/spree/stock_locations/stock_items/create_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2\"}}","suiteSourceFile":"core/spec/services/spree/stock_locations/stock_items/create_spec.rb"},{"name":"when country code is US returns imperial unit system","suite":"Spree::Stores::SettingsDefaultsByCountry at ./spec/services/spree/stores/settings_defaults_by_country_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/services/spree/stores/settings_defaults_by_country_spec.rb"},{"name":"when country code is not US returns metric unit system","suite":"Spree::Stores::SettingsDefaultsByCountry at ./spec/services/spree/stores/settings_defaults_by_country_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/services/spree/stores/settings_defaults_by_country_spec.rb"},{"name":"#call creates tags for each tag name","suite":"Spree::Tags::BulkAdd at ./spec/services/spree/tags/bulk_add_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/services/spree/tags/bulk_add_spec.rb"},{"name":"#call creates taggings for each product-tag pair","suite":"Spree::Tags::BulkAdd at ./spec/services/spree/tags/bulk_add_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/services/spree/tags/bulk_add_spec.rb"},{"name":"#call assigns correct attributes to taggings","suite":"Spree::Tags::BulkAdd at ./spec/services/spree/tags/bulk_add_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/services/spree/tags/bulk_add_spec.rb"},{"name":"#call touches all products","suite":"Spree::Tags::BulkAdd at ./spec/services/spree/tags/bulk_add_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","suiteSourceFile":"core/spec/services/spree/tags/bulk_add_spec.rb"},{"name":"#call when tag names are duplicated or have extra spaces creates unique tags without extra spaces","suite":"Spree::Tags::BulkAdd at ./spec/services/spree/tags/bulk_add_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5:1\"}}","suiteSourceFile":"core/spec/services/spree/tags/bulk_add_spec.rb"},{"name":"#call when no records are provided does not create any taggings","suite":"Spree::Tags::BulkAdd at ./spec/services/spree/tags/bulk_add_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6:1\"}}","suiteSourceFile":"core/spec/services/spree/tags/bulk_add_spec.rb"},{"name":"#call when no tag names are provided does not create any tags or taggings","suite":"Spree::Tags::BulkAdd at ./spec/services/spree/tags/bulk_add_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7:1\"}}","suiteSourceFile":"core/spec/services/spree/tags/bulk_add_spec.rb"},{"name":"#call removes taggings for each product-tag pair","suite":"Spree::Tags::BulkRemove at ./spec/services/spree/tags/bulk_remove_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/services/spree/tags/bulk_remove_spec.rb"},{"name":"#call does not remove tags","suite":"Spree::Tags::BulkRemove at ./spec/services/spree/tags/bulk_remove_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/services/spree/tags/bulk_remove_spec.rb"},{"name":"#call removes correct taggings","suite":"Spree::Tags::BulkRemove at ./spec/services/spree/tags/bulk_remove_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/services/spree/tags/bulk_remove_spec.rb"},{"name":"#call touches all products","suite":"Spree::Tags::BulkRemove at ./spec/services/spree/tags/bulk_remove_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","suiteSourceFile":"core/spec/services/spree/tags/bulk_remove_spec.rb"},{"name":"#call creates classifications for each taxon-product pair","suite":"Spree::Taxons::AddProducts at ./spec/services/spree/taxons/add_products_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/services/spree/taxons/add_products_spec.rb"},{"name":"#call sets the correct position for each classification","suite":"Spree::Taxons::AddProducts at ./spec/services/spree/taxons/add_products_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/services/spree/taxons/add_products_spec.rb"},{"name":"#call touches all products","suite":"Spree::Taxons::AddProducts at ./spec/services/spree/taxons/add_products_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/services/spree/taxons/add_products_spec.rb"},{"name":"#call touches all taxons","suite":"Spree::Taxons::AddProducts at ./spec/services/spree/taxons/add_products_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","suiteSourceFile":"core/spec/services/spree/taxons/add_products_spec.rb"},{"name":"#call returns a successful result","suite":"Spree::Taxons::AddProducts at ./spec/services/spree/taxons/add_products_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","suiteSourceFile":"core/spec/services/spree/taxons/add_products_spec.rb"},{"name":"#call updates classification_count on taxons","suite":"Spree::Taxons::AddProducts at ./spec/services/spree/taxons/add_products_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","suiteSourceFile":"core/spec/services/spree/taxons/add_products_spec.rb"},{"name":"#call updates classification_count on products","suite":"Spree::Taxons::AddProducts at ./spec/services/spree/taxons/add_products_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7\"}}","suiteSourceFile":"core/spec/services/spree/taxons/add_products_spec.rb"},{"name":"after changing rules re-matches products for an automatic taxon","suite":"Spree::Taxons::RegenerateProducts at ./spec/services/spree/taxons/regenerate_products_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/services/spree/taxons/regenerate_products_spec.rb"},{"name":"after changing rules updates classification_count on taxon","suite":"Spree::Taxons::RegenerateProducts at ./spec/services/spree/taxons/regenerate_products_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/services/spree/taxons/regenerate_products_spec.rb"},{"name":"after changing rules updates classification_count on products","suite":"Spree::Taxons::RegenerateProducts at ./spec/services/spree/taxons/regenerate_products_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/services/spree/taxons/regenerate_products_spec.rb"},{"name":"when nothing changed doesn't change the taxon","suite":"Spree::Taxons::RegenerateProducts at ./spec/services/spree/taxons/regenerate_products_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/services/spree/taxons/regenerate_products_spec.rb"},{"name":"with manual order when nothing changed keeps products positions","suite":"Spree::Taxons::RegenerateProducts at ./spec/services/spree/taxons/regenerate_products_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","suiteSourceFile":"core/spec/services/spree/taxons/regenerate_products_spec.rb"},{"name":"with manual order when products added keeps products positions","suite":"Spree::Taxons::RegenerateProducts at ./spec/services/spree/taxons/regenerate_products_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","suiteSourceFile":"core/spec/services/spree/taxons/regenerate_products_spec.rb"},{"name":"with manual order when some one product removed and 2 added keeps products positions","suite":"Spree::Taxons::RegenerateProducts at ./spec/services/spree/taxons/regenerate_products_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3:1\"}}","suiteSourceFile":"core/spec/services/spree/taxons/regenerate_products_spec.rb"},{"name":"with manual order when some one product removed from middle of list and 2 added keeps products positions","suite":"Spree::Taxons::RegenerateProducts at ./spec/services/spree/taxons/regenerate_products_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4:1\"}}","suiteSourceFile":"core/spec/services/spree/taxons/regenerate_products_spec.rb"},{"name":"#call removes classifications for each taxon-product pair","suite":"Spree::Taxons::RemoveProducts at ./spec/services/spree/taxons/remove_products_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/services/spree/taxons/remove_products_spec.rb"},{"name":"#call resets the position for remaining classifications","suite":"Spree::Taxons::RemoveProducts at ./spec/services/spree/taxons/remove_products_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/services/spree/taxons/remove_products_spec.rb"},{"name":"#call touches all products","suite":"Spree::Taxons::RemoveProducts at ./spec/services/spree/taxons/remove_products_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/services/spree/taxons/remove_products_spec.rb"},{"name":"#call touches all taxons","suite":"Spree::Taxons::RemoveProducts at ./spec/services/spree/taxons/remove_products_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","suiteSourceFile":"core/spec/services/spree/taxons/remove_products_spec.rb"},{"name":"#call returns a successful result","suite":"Spree::Taxons::RemoveProducts at ./spec/services/spree/taxons/remove_products_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","suiteSourceFile":"core/spec/services/spree/taxons/remove_products_spec.rb"},{"name":"#call updates classification_count on taxons","suite":"Spree::Taxons::RemoveProducts at ./spec/services/spree/taxons/remove_products_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","suiteSourceFile":"core/spec/services/spree/taxons/remove_products_spec.rb"},{"name":"#call updates classification_count on products","suite":"Spree::Taxons::RemoveProducts at ./spec/services/spree/taxons/remove_products_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7\"}}","suiteSourceFile":"core/spec/services/spree/taxons/remove_products_spec.rb"},{"name":"#call when all order states allows to remove line items schedules a Spree::LineItems::RemoveFromOrderJob for each order","suite":"Spree::Variants::RemoveLineItems at ./spec/services/spree/variants/remove_line_items_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/services/spree/variants/remove_line_items_spec.rb"},{"name":"#call when none of order states allow to remove line items does not schedule a Spree::LineItems::RemoveFromOrderJob for each order","suite":"Spree::Variants::RemoveLineItems at ./spec/services/spree/variants/remove_line_items_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/services/spree/variants/remove_line_items_spec.rb"},{"name":"#call when some of order states allow to remove line items schedules a Spree::LineItems::RemoveFromOrderJob for each pending order","suite":"Spree::Variants::RemoveLineItems at ./spec/services/spree/variants/remove_line_items_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","suiteSourceFile":"core/spec/services/spree/variants/remove_line_items_spec.rb"},{"name":"#call when some of order states allow to remove line items does not schedule a Spree::LineItems::RemoveFromOrderJob for each cancelled order","suite":"Spree::Variants::RemoveLineItems at ./spec/services/spree/variants/remove_line_items_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:2\"}}","suiteSourceFile":"core/spec/services/spree/variants/remove_line_items_spec.rb"},{"name":"valid attributes with source attributes creates new payment source record","suite":"Spree::Wallet::CreatePaymentSource at ./spec/services/spree/wallet/create_payment_source_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/services/spree/wallet/create_payment_source_spec.rb"},{"name":"valid attributes with source attributes returns newly created record in .value","suite":"Spree::Wallet::CreatePaymentSource at ./spec/services/spree/wallet/create_payment_source_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2\"}}","suiteSourceFile":"core/spec/services/spree/wallet/create_payment_source_spec.rb"},{"name":"valid attributes with source attributes assigns payment method","suite":"Spree::Wallet::CreatePaymentSource at ./spec/services/spree/wallet/create_payment_source_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3\"}}","suiteSourceFile":"core/spec/services/spree/wallet/create_payment_source_spec.rb"},{"name":"valid attributes with source attributes with user creates new payment source record","suite":"Spree::Wallet::CreatePaymentSource at ./spec/services/spree/wallet/create_payment_source_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:4:1\"}}","suiteSourceFile":"core/spec/services/spree/wallet/create_payment_source_spec.rb"},{"name":"valid attributes with source attributes with user returns newly created record in .value","suite":"Spree::Wallet::CreatePaymentSource at ./spec/services/spree/wallet/create_payment_source_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:4:2\"}}","suiteSourceFile":"core/spec/services/spree/wallet/create_payment_source_spec.rb"},{"name":"valid attributes with source attributes with user assigns payment method","suite":"Spree::Wallet::CreatePaymentSource at ./spec/services/spree/wallet/create_payment_source_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:4:3\"}}","suiteSourceFile":"core/spec/services/spree/wallet/create_payment_source_spec.rb"},{"name":"valid attributes with source attributes with user assigns user example at ./spec/services/spree/wallet/create_payment_source_spec.rb:56","suite":"Spree::Wallet::CreatePaymentSource at ./spec/services/spree/wallet/create_payment_source_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:4:4:1\"}}","suiteSourceFile":"core/spec/services/spree/wallet/create_payment_source_spec.rb"},{"name":"missing attributes example at ./spec/services/spree/wallet/create_payment_source_spec.rb:65","suite":"Spree::Wallet::CreatePaymentSource at ./spec/services/spree/wallet/create_payment_source_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/services/spree/wallet/create_payment_source_spec.rb"},{"name":"missing attributes example at ./spec/services/spree/wallet/create_payment_source_spec.rb:66","suite":"Spree::Wallet::CreatePaymentSource at ./spec/services/spree/wallet/create_payment_source_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","suiteSourceFile":"core/spec/services/spree/wallet/create_payment_source_spec.rb"},{"name":"invalid attributes example at ./spec/services/spree/wallet/create_payment_source_spec.rb:81","suite":"Spree::Wallet::CreatePaymentSource at ./spec/services/spree/wallet/create_payment_source_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/services/spree/wallet/create_payment_source_spec.rb"},{"name":"invalid attributes example at ./spec/services/spree/wallet/create_payment_source_spec.rb:82","suite":"Spree::Wallet::CreatePaymentSource at ./spec/services/spree/wallet/create_payment_source_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","suiteSourceFile":"core/spec/services/spree/wallet/create_payment_source_spec.rb"},{"name":".attach_to_notifications subscribes to Spree events","suite":"Spree::EventLogSubscriber at ./spec/subscribers/spree/event_log_subscriber_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/subscribers/spree/event_log_subscriber_spec.rb"},{"name":".attach_to_notifications can be called multiple times safely (for code reload support)","suite":"Spree::EventLogSubscriber at ./spec/subscribers/spree/event_log_subscriber_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/subscribers/spree/event_log_subscriber_spec.rb"},{"name":".detach_from_notifications unsubscribes from notifications","suite":"Spree::EventLogSubscriber at ./spec/subscribers/spree/event_log_subscriber_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/subscribers/spree/event_log_subscriber_spec.rb"},{"name":"logging events logs events to Rails logger","suite":"Spree::EventLogSubscriber at ./spec/subscribers/spree/event_log_subscriber_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/subscribers/spree/event_log_subscriber_spec.rb"},{"name":"logging events filtering sensitive parameters filters password from payload","suite":"Spree::EventLogSubscriber at ./spec/subscribers/spree/event_log_subscriber_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","suiteSourceFile":"core/spec/subscribers/spree/event_log_subscriber_spec.rb"},{"name":"logging events filtering sensitive parameters filters credit card number from payload","suite":"Spree::EventLogSubscriber at ./spec/subscribers/spree/event_log_subscriber_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:2\"}}","suiteSourceFile":"core/spec/subscribers/spree/event_log_subscriber_spec.rb"},{"name":"logging events filtering sensitive parameters filters verification_value from payload","suite":"Spree::EventLogSubscriber at ./spec/subscribers/spree/event_log_subscriber_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:3\"}}","suiteSourceFile":"core/spec/subscribers/spree/event_log_subscriber_spec.rb"},{"name":"logging events filtering sensitive parameters does not filter non-sensitive data","suite":"Spree::EventLogSubscriber at ./spec/subscribers/spree/event_log_subscriber_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:4\"}}","suiteSourceFile":"core/spec/subscribers/spree/event_log_subscriber_spec.rb"},{"name":".subscription_patterns subscribes to export.created event","suite":"Spree::ExportSubscriber at ./spec/subscribers/spree/export_subscriber_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/subscribers/spree/export_subscriber_spec.rb"},{"name":".event_handlers routes export.created to generate_export_async","suite":"Spree::ExportSubscriber at ./spec/subscribers/spree/export_subscriber_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/subscribers/spree/export_subscriber_spec.rb"},{"name":"#generate_export_async extracts export_id from event payload","suite":"Spree::ExportSubscriber at ./spec/subscribers/spree/export_subscriber_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/subscribers/spree/export_subscriber_spec.rb"},{"name":"#generate_export_async does not call job if export_id is missing","suite":"Spree::ExportSubscriber at ./spec/subscribers/spree/export_subscriber_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","suiteSourceFile":"core/spec/subscribers/spree/export_subscriber_spec.rb"},{"name":"invitation.created event sends invitation email","suite":"Spree::InvitationEmailSubscriber at ./spec/subscribers/spree/invitation_email_subscriber_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/subscribers/spree/invitation_email_subscriber_spec.rb"},{"name":"invitation.created event when invitation not found does not raise an error","suite":"Spree::InvitationEmailSubscriber at ./spec/subscribers/spree/invitation_email_subscriber_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/subscribers/spree/invitation_email_subscriber_spec.rb"},{"name":"invitation.accepted event sends acceptance notification email","suite":"Spree::InvitationEmailSubscriber at ./spec/subscribers/spree/invitation_email_subscriber_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/subscribers/spree/invitation_email_subscriber_spec.rb"},{"name":"invitation.accepted event when invitation not found does not raise an error","suite":"Spree::InvitationEmailSubscriber at ./spec/subscribers/spree/invitation_email_subscriber_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","suiteSourceFile":"core/spec/subscribers/spree/invitation_email_subscriber_spec.rb"},{"name":"invitation.resent event resends invitation email","suite":"Spree::InvitationEmailSubscriber at ./spec/subscribers/spree/invitation_email_subscriber_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/subscribers/spree/invitation_email_subscriber_spec.rb"},{"name":"invitation.resent event when invitation is expired does not send invitation email","suite":"Spree::InvitationEmailSubscriber at ./spec/subscribers/spree/invitation_email_subscriber_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","suiteSourceFile":"core/spec/subscribers/spree/invitation_email_subscriber_spec.rb"},{"name":"invitation.resent event when invitation is accepted does not send invitation email","suite":"Spree::InvitationEmailSubscriber at ./spec/subscribers/spree/invitation_email_subscriber_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3:1\"}}","suiteSourceFile":"core/spec/subscribers/spree/invitation_email_subscriber_spec.rb"},{"name":"invitation.resent event when invitation is deleted does not send invitation email","suite":"Spree::InvitationEmailSubscriber at ./spec/subscribers/spree/invitation_email_subscriber_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4:1\"}}","suiteSourceFile":"core/spec/subscribers/spree/invitation_email_subscriber_spec.rb"},{"name":"invitation.resent event when invitation not found does not raise an error","suite":"Spree::InvitationEmailSubscriber at ./spec/subscribers/spree/invitation_email_subscriber_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:5:1\"}}","suiteSourceFile":"core/spec/subscribers/spree/invitation_email_subscriber_spec.rb"},{"name":".subscription_patterns subscribes to order.completed event","suite":"Spree::ProductMetricsSubscriber at ./spec/subscribers/spree/product_metrics_subscriber_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/subscribers/spree/product_metrics_subscriber_spec.rb"},{"name":".event_handlers routes order.completed to refresh_product_metrics","suite":"Spree::ProductMetricsSubscriber at ./spec/subscribers/spree/product_metrics_subscriber_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/subscribers/spree/product_metrics_subscriber_spec.rb"},{"name":"#refresh_product_metrics enqueues refresh jobs for all products in the order","suite":"Spree::ProductMetricsSubscriber at ./spec/subscribers/spree/product_metrics_subscriber_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/subscribers/spree/product_metrics_subscriber_spec.rb"},{"name":"#refresh_product_metrics enqueues jobs with correct arguments","suite":"Spree::ProductMetricsSubscriber at ./spec/subscribers/spree/product_metrics_subscriber_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","suiteSourceFile":"core/spec/subscribers/spree/product_metrics_subscriber_spec.rb"},{"name":"#refresh_product_metrics when order_id is missing does not enqueue any jobs","suite":"Spree::ProductMetricsSubscriber at ./spec/subscribers/spree/product_metrics_subscriber_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3:1\"}}","suiteSourceFile":"core/spec/subscribers/spree/product_metrics_subscriber_spec.rb"},{"name":"#refresh_product_metrics when store_id is missing does not enqueue any jobs","suite":"Spree::ProductMetricsSubscriber at ./spec/subscribers/spree/product_metrics_subscriber_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4:1\"}}","suiteSourceFile":"core/spec/subscribers/spree/product_metrics_subscriber_spec.rb"},{"name":"#refresh_product_metrics when order does not exist does not enqueue any jobs","suite":"Spree::ProductMetricsSubscriber at ./spec/subscribers/spree/product_metrics_subscriber_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:5:1\"}}","suiteSourceFile":"core/spec/subscribers/spree/product_metrics_subscriber_spec.rb"},{"name":"#refresh_product_metrics when order has no line items does not enqueue any jobs","suite":"Spree::ProductMetricsSubscriber at ./spec/subscribers/spree/product_metrics_subscriber_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:6:1\"}}","suiteSourceFile":"core/spec/subscribers/spree/product_metrics_subscriber_spec.rb"},{"name":"#refresh_product_metrics when order has duplicate products only enqueues one job per unique product","suite":"Spree::ProductMetricsSubscriber at ./spec/subscribers/spree/product_metrics_subscriber_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:7:1\"}}","suiteSourceFile":"core/spec/subscribers/spree/product_metrics_subscriber_spec.rb"},{"name":".subscription_patterns subscribes to report.created event","suite":"Spree::ReportSubscriber at ./spec/subscribers/spree/report_subscriber_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/subscribers/spree/report_subscriber_spec.rb"},{"name":".event_handlers routes report.created to generate_report_async","suite":"Spree::ReportSubscriber at ./spec/subscribers/spree/report_subscriber_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/subscribers/spree/report_subscriber_spec.rb"},{"name":"#generate_report_async extracts report_id from event payload","suite":"Spree::ReportSubscriber at ./spec/subscribers/spree/report_subscriber_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/subscribers/spree/report_subscriber_spec.rb"},{"name":"#generate_report_async does not call job if report_id is missing","suite":"Spree::ReportSubscriber at ./spec/subscribers/spree/report_subscriber_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","suiteSourceFile":"core/spec/subscribers/spree/report_subscriber_spec.rb"},{"name":"validates valid email addresses","suite":"EmailValidator at ./spec/validators/email_validator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","suiteSourceFile":"core/spec/validators/email_validator_spec.rb"},{"name":"validates invalid email addresses","suite":"EmailValidator at ./spec/validators/email_validator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2\"}}","suiteSourceFile":"core/spec/validators/email_validator_spec.rb"},{"name":"validating the given URL is invalid example at ./spec/validators/spree/url_validator_spec.rb:16","suite":"Spree::UrlValidator at ./spec/validators/spree/url_validator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/validators/spree/url_validator_spec.rb"},{"name":"validating the given URL is invalid example at ./spec/validators/spree/url_validator_spec.rb:17","suite":"Spree::UrlValidator at ./spec/validators/spree/url_validator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2\"}}","suiteSourceFile":"core/spec/validators/spree/url_validator_spec.rb"},{"name":"validating the given URL is invalid example at ./spec/validators/spree/url_validator_spec.rb:18","suite":"Spree::UrlValidator at ./spec/validators/spree/url_validator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3\"}}","suiteSourceFile":"core/spec/validators/spree/url_validator_spec.rb"},{"name":"validating the given URL is invalid example at ./spec/validators/spree/url_validator_spec.rb:19","suite":"Spree::UrlValidator at ./spec/validators/spree/url_validator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:4\"}}","suiteSourceFile":"core/spec/validators/spree/url_validator_spec.rb"},{"name":"validating the given URL is invalid example at ./spec/validators/spree/url_validator_spec.rb:20","suite":"Spree::UrlValidator at ./spec/validators/spree/url_validator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:5\"}}","suiteSourceFile":"core/spec/validators/spree/url_validator_spec.rb"},{"name":"validating the given URL is valid example at ./spec/validators/spree/url_validator_spec.rb:24","suite":"Spree::UrlValidator at ./spec/validators/spree/url_validator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/validators/spree/url_validator_spec.rb"},{"name":"validating the given URL is valid example at ./spec/validators/spree/url_validator_spec.rb:25","suite":"Spree::UrlValidator at ./spec/validators/spree/url_validator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2\"}}","suiteSourceFile":"core/spec/validators/spree/url_validator_spec.rb"},{"name":"validating the given URL is valid example at ./spec/validators/spree/url_validator_spec.rb:26","suite":"Spree::UrlValidator at ./spec/validators/spree/url_validator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:3\"}}","suiteSourceFile":"core/spec/validators/spree/url_validator_spec.rb"},{"name":"validating the given URL is valid example at ./spec/validators/spree/url_validator_spec.rb:27","suite":"Spree::UrlValidator at ./spec/validators/spree/url_validator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:4\"}}","suiteSourceFile":"core/spec/validators/spree/url_validator_spec.rb"},{"name":"validating the given URL is valid example at ./spec/validators/spree/url_validator_spec.rb:29","suite":"Spree::UrlValidator at ./spec/validators/spree/url_validator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:5\"}}","suiteSourceFile":"core/spec/validators/spree/url_validator_spec.rb"},{"name":"using a given message or a defined one using the message option adds the given message to the record url errors array","suite":"Spree::UrlValidator at ./spec/validators/spree/url_validator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","suiteSourceFile":"core/spec/validators/spree/url_validator_spec.rb"},{"name":"using a given message or a defined one without using the message option adds a pre-defined message to the record url error array","suite":"Spree::UrlValidator at ./spec/validators/spree/url_validator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","suiteSourceFile":"core/spec/validators/spree/url_validator_spec.rb"}],"testFiles":["spec/finders/spree/addresses/find_spec.rb","spec/finders/spree/option_values/find_available_spec.rb","spec/finders/spree/product_properties/find_available_spec.rb","spec/finders/spree/products/find_spec.rb","spec/finders/spree/stores/find_current_spec.rb","spec/finders/spree/taxons/find_spec.rb","spec/finders/spree/variants/option_types_finder_spec.rb","spec/finders/spree/variants/visible_finder_spec.rb","spec/helpers/base_helper_spec.rb","spec/helpers/currency_helper_spec.rb","spec/helpers/images_helper_spec.rb","spec/helpers/locale_helper_spec.rb","spec/helpers/products_helper_spec.rb","spec/helpers/shipment_helper_spec.rb","spec/i18n_spec.rb","spec/jobs/spree/addresses/geocode_address_job_spec.rb","spec/jobs/spree/coupon_codes/bulk_generate_job_spec.rb","spec/jobs/spree/exports/generate_job_spec.rb","spec/jobs/spree/gift_cards/bulk_generate_job_spec.rb","spec/jobs/spree/images/save_from_url_job_spec.rb","spec/jobs/spree/imports/create_rows_job_spec.rb","spec/jobs/spree/imports/process_rows_job_spec.rb","spec/jobs/spree/products/refresh_metrics_job_spec.rb","spec/jobs/spree/products/touch_taxons_job_spec.rb","spec/jobs/spree/stock_locations/stock_items/create_job_spec.rb","spec/jobs/spree/variants/remove_from_incomplete_orders_job_spec.rb","spec/jobs/spree/variants/remove_line_item_job_spec.rb","spec/jobs/spree/variants/touch_job_spec.rb","spec/lib/calculated_adjustments_spec.rb","spec/lib/i18n_spec.rb","spec/lib/spree/core/controller_helpers/auth_spec.rb","spec/lib/spree/core/controller_helpers/currency_spec.rb","spec/lib/spree/core/controller_helpers/locale_spec.rb","spec/lib/spree/core/controller_helpers/order_spec.rb","spec/lib/spree/core/controller_helpers/search_spec.rb","spec/lib/spree/core/controller_helpers/store_spec.rb","spec/lib/spree/core/controller_helpers/strong_parameters_spec.rb","spec/lib/spree/core/importer/order_spec.rb","spec/lib/spree/core/number_generator_spec.rb","spec/lib/spree/core/partials_spec.rb","spec/lib/spree/core/permission_configuration_spec.rb","spec/lib/spree/core/pricing/context_spec.rb","spec/lib/spree/core/ransack_configuration_spec.rb","spec/lib/spree/core/token_generator_spec.rb","spec/lib/spree/core_environment_spec.rb","spec/lib/spree/core_spec.rb","spec/lib/spree/events/registry_spec.rb","spec/lib/spree/events_spec.rb","spec/lib/spree/localized_number_spec.rb","spec/lib/spree/migrations_spec.rb","spec/lib/spree/money_spec.rb","spec/lib/spree/pricing/resolver_spec.rb","spec/lib/spree/service_module_spec.rb","spec/lib/tasks/core_spec.rb","spec/lib/tasks/exchanges_spec.rb","spec/mailers/spree/export_mailer_spec.rb","spec/mailers/spree/invitation_mailer_spec.rb","spec/mailers/spree/report_mailer_spec.rb","spec/models/concerns/spree/has_image_alt_text_spec.rb","spec/models/concerns/spree/image_methods_spec.rb","spec/models/concerns/spree/metafields_spec.rb","spec/models/concerns/spree/publishable_spec.rb","spec/models/spree/ability_spec.rb","spec/models/spree/address_spec.rb","spec/models/spree/adjustable/adjuster/base_spec.rb","spec/models/spree/adjustable/adjuster/promotion_spec.rb","spec/models/spree/adjustable/adjuster/tax_spec.rb","spec/models/spree/adjustable/adjustments_updater_spec.rb","spec/models/spree/adjustment_spec.rb","spec/models/spree/admin_user_spec.rb","spec/models/spree/app_dependencies_spec.rb","spec/models/spree/asset_spec.rb","spec/models/spree/base_analytics_event_handler_spec.rb","spec/models/spree/base_spec.rb","spec/models/spree/calculator/default_tax_spec.rb","spec/models/spree/calculator/flat_percent_item_total_spec.rb","spec/models/spree/calculator/flat_rate_spec.rb","spec/models/spree/calculator/flexi_rate_spec.rb","spec/models/spree/calculator/percent_on_line_item_spec.rb","spec/models/spree/calculator/price_sack_spec.rb","spec/models/spree/calculator/refunds/default_refund_amount_spec.rb","spec/models/spree/calculator/shipping/digital_delivery_spec.rb","spec/models/spree/calculator/shipping/flat_percent_item_total_spec.rb","spec/models/spree/calculator/shipping/flat_rate_spec.rb","spec/models/spree/calculator/shipping/flexi_rate_spec.rb","spec/models/spree/calculator/shipping/per_item_spec.rb","spec/models/spree/calculator/shipping/price_sack_spec.rb","spec/models/spree/calculator/tiered_flat_rate_spec.rb","spec/models/spree/calculator/tiered_percent_spec.rb","spec/models/spree/calculator_spec.rb","spec/models/spree/classification_spec.rb","spec/models/spree/concerns/display_money_spec.rb","spec/models/spree/concerns/ransackable_attributes_spec.rb","spec/models/spree/concerns/user_management_spec.rb","spec/models/spree/concerns/user_methods_spec.rb","spec/models/spree/concerns/user_roles_spec.rb","spec/models/spree/concerns/vat_price_calculation_spec.rb","spec/models/spree/country_spec.rb","spec/models/spree/coupon_code_spec.rb","spec/models/spree/credit_card_spec.rb","spec/models/spree/current_spec.rb","spec/models/spree/custom_domain_spec.rb","spec/models/spree/customer_group_spec.rb","spec/models/spree/customer_group_user_spec.rb","spec/models/spree/customer_return_spec.rb","spec/models/spree/data_feed/google_spec.rb","spec/models/spree/digital_link_spec.rb","spec/models/spree/digital_spec.rb","spec/models/spree/event_spec.rb","spec/models/spree/exchange_spec.rb","spec/models/spree/export_spec.rb","spec/models/spree/exports/customers_spec.rb","spec/models/spree/exports/gift_cards_spec.rb","spec/models/spree/exports/newsletter_subscribers_spec.rb","spec/models/spree/exports/orders_spec.rb","spec/models/spree/exports/products_spec.rb","spec/models/spree/fulfilment_changer_spec.rb","spec/models/spree/gateway/bogus_spec.rb","spec/models/spree/gateway_spec.rb","spec/models/spree/gift_card_batch_spec.rb","spec/models/spree/gift_card_spec.rb","spec/models/spree/image_spec.rb","spec/models/spree/import_mapping_spec.rb","spec/models/spree/import_row_spec.rb","spec/models/spree/import_spec.rb","spec/models/spree/integration_spec.rb","spec/models/spree/inventory_unit_spec.rb","spec/models/spree/invitation_spec.rb","spec/models/spree/line_item_spec.rb","spec/models/spree/log_entry_spec.rb","spec/models/spree/metafield_definition_spec.rb","spec/models/spree/metafield_spec.rb","spec/models/spree/metafields/boolean_spec.rb","spec/models/spree/metafields/json_spec.rb","spec/models/spree/metafields/number_spec.rb","spec/models/spree/metafields/rich_text_spec.rb","spec/models/spree/newsletter_subscriber_spec.rb","spec/models/spree/option_type_spec.rb","spec/models/spree/option_value_spec.rb","spec/models/spree/option_value_variant_spec.rb","spec/models/spree/order/address_spec.rb","spec/models/spree/order/adjustments_spec.rb","spec/models/spree/order/callbacks_spec.rb","spec/models/spree/order/checkout_spec.rb","spec/models/spree/order/currency_updater_spec.rb","spec/models/spree/order/digital_spec.rb","spec/models/spree/order/finalizing_spec.rb","spec/models/spree/order/gift_card_spec.rb","spec/models/spree/order/payment_spec.rb","spec/models/spree/order/risk_assessment_spec.rb","spec/models/spree/order/shipments_spec.rb","spec/models/spree/order/state_machine_spec.rb","spec/models/spree/order/store_credit_spec.rb","spec/models/spree/order/tax_spec.rb","spec/models/spree/order/totals_spec.rb","spec/models/spree/order/updating_spec.rb","spec/models/spree/order/validations_spec.rb","spec/models/spree/order_contents_spec.rb","spec/models/spree/order_inventory_spec.rb","spec/models/spree/order_merger_spec.rb","spec/models/spree/order_promotion_spec.rb","spec/models/spree/order_spec.rb","spec/models/spree/order_updater_spec.rb","spec/models/spree/payment/custom_events_spec.rb","spec/models/spree/payment/gateway_options_spec.rb","spec/models/spree/payment/store_credit_spec.rb","spec/models/spree/payment_method/store_credit_spec.rb","spec/models/spree/payment_method_spec.rb","spec/models/spree/payment_source_spec.rb","spec/models/spree/payment_spec.rb","spec/models/spree/permission_sets/ability_integration_spec.rb","spec/models/spree/permission_sets/base_spec.rb","spec/models/spree/permission_sets/default_customer_spec.rb","spec/models/spree/permission_sets/order_management_spec.rb","spec/models/spree/permission_sets/product_management_spec.rb","spec/models/spree/permission_sets/super_user_spec.rb","spec/models/spree/policy_spec.rb","spec/models/spree/post_category_spec.rb","spec/models/spree/post_spec.rb","spec/models/spree/preference_spec.rb","spec/models/spree/preferences/configuration_spec.rb","spec/models/spree/preferences/preferable_spec.rb","spec/models/spree/preferences/runtime_configuration_spec.rb","spec/models/spree/preferences/scoped_store_spec.rb","spec/models/spree/preferences/store_spec.rb","spec/models/spree/price_list_spec.rb","spec/models/spree/price_rules/customer_group_rule_spec.rb","spec/models/spree/price_rules/user_rule_spec.rb","spec/models/spree/price_rules/volume_rule_spec.rb","spec/models/spree/price_rules/zone_rule_spec.rb","spec/models/spree/price_spec.rb","spec/models/spree/product/normalizes_spec.rb","spec/models/spree/product/scopes_spec.rb","spec/models/spree/product/slugs_spec.rb","spec/models/spree/product_filter_spec.rb","spec/models/spree/product_property_spec.rb","spec/models/spree/product_spec.rb","spec/models/spree/promotion/actions/create_adjustment_spec.rb","spec/models/spree/promotion/actions/create_item_adjustments_spec.rb","spec/models/spree/promotion/actions/create_line_items_spec.rb","spec/models/spree/promotion/actions/free_shipping_spec.rb","spec/models/spree/promotion/rules/country_spec.rb","spec/models/spree/promotion/rules/currency_spec.rb","spec/models/spree/promotion/rules/customer_group_spec.rb","spec/models/spree/promotion/rules/first_order_spec.rb","spec/models/spree/promotion/rules/item_total_spec.rb","spec/models/spree/promotion/rules/one_use_per_user_spec.rb","spec/models/spree/promotion/rules/option_value_spec.rb","spec/models/spree/promotion/rules/product_spec.rb","spec/models/spree/promotion/rules/taxon_spec.rb","spec/models/spree/promotion/rules/user_logged_in_spec.rb","spec/models/spree/promotion/rules/user_spec.rb","spec/models/spree/promotion_action_spec.rb","spec/models/spree/promotion_category_spec.rb","spec/models/spree/promotion_handler/cart_spec.rb","spec/models/spree/promotion_handler/coupon_spec.rb","spec/models/spree/promotion_handler/coupon_with_gift_card_spec.rb","spec/models/spree/promotion_handler/free_shipping_spec.rb","spec/models/spree/promotion_handler/page_spec.rb","spec/models/spree/promotion_handler/promotion_duplicator_spec.rb","spec/models/spree/promotion_rule_spec.rb","spec/models/spree/promotion_spec.rb","spec/models/spree/property_spec.rb","spec/models/spree/prototype_spec.rb","spec/models/spree/refund_reason_spec.rb","spec/models/spree/refund_spec.rb","spec/models/spree/reimbursement/credit_spec.rb","spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb","spec/models/spree/reimbursement/reimbursement_type_validator_spec.rb","spec/models/spree/reimbursement_performer_spec.rb","spec/models/spree/reimbursement_spec.rb","spec/models/spree/reimbursement_tax_calculator_spec.rb","spec/models/spree/reimbursement_type/credit_spec.rb","spec/models/spree/reimbursement_type/exchange_spec.rb","spec/models/spree/reimbursement_type/original_payment_spec.rb","spec/models/spree/reimbursement_type/store_credit_spec.rb","spec/models/spree/report_line_item_spec.rb","spec/models/spree/report_line_items/products_performance_spec.rb","spec/models/spree/report_line_items/sales_total_spec.rb","spec/models/spree/report_spec.rb","spec/models/spree/reports/products_performance_spec.rb","spec/models/spree/reports/sales_total_spec.rb","spec/models/spree/return_authorization_spec.rb","spec/models/spree/return_item/eligibility_validator/default_spec.rb","spec/models/spree/return_item/eligibility_validator/inventory_shipped_spec.rb","spec/models/spree/return_item/eligibility_validator/no_reimbursements_spec.rb","spec/models/spree/return_item/eligibility_validator/order_completed_spec.rb","spec/models/spree/return_item/eligibility_validator/rma_required_spec.rb","spec/models/spree/return_item/eligibility_validator/time_since_purchase_spec.rb","spec/models/spree/return_item/exchange_variant_eligibility/same_option_value_spec.rb","spec/models/spree/return_item/exchange_variant_eligibility/same_product_spec.rb","spec/models/spree/return_item_spec.rb","spec/models/spree/returns_calculator_spec.rb","spec/models/spree/role_spec.rb","spec/models/spree/role_user_spec.rb","spec/models/spree/shipment/custom_events_spec.rb","spec/models/spree/shipment_spec.rb","spec/models/spree/shipping_calculator_spec.rb","spec/models/spree/shipping_category_spec.rb","spec/models/spree/shipping_method_spec.rb","spec/models/spree/shipping_rate_spec.rb","spec/models/spree/state_spec.rb","spec/models/spree/stock/availability_validator_spec.rb","spec/models/spree/stock/content_item_spec.rb","spec/models/spree/stock/coordinator_spec.rb","spec/models/spree/stock/differentiator_spec.rb","spec/models/spree/stock/estimator_spec.rb","spec/models/spree/stock/inventory_unit_builder_spec.rb","spec/models/spree/stock/package_spec.rb","spec/models/spree/stock/packer_spec.rb","spec/models/spree/stock/prioritizer_spec.rb","spec/models/spree/stock/quantifier_spec.rb","spec/models/spree/stock/splitter/backordered_spec.rb","spec/models/spree/stock/splitter/base_spec.rb","spec/models/spree/stock/splitter/digital_spec.rb","spec/models/spree/stock/splitter/shipping_category_spec.rb","spec/models/spree/stock/splitter/weight_spec.rb","spec/models/spree/stock_item_spec.rb","spec/models/spree/stock_location_spec.rb","spec/models/spree/stock_movement/custom_events_spec.rb","spec/models/spree/stock_movement_spec.rb","spec/models/spree/stock_transfer_spec.rb","spec/models/spree/store_credit_category_spec.rb","spec/models/spree/store_credit_event_spec.rb","spec/models/spree/store_credit_spec.rb","spec/models/spree/store_favicon_image_spec.rb","spec/models/spree/store_product_spec.rb","spec/models/spree/store_spec.rb","spec/models/spree/subscriber_spec.rb","spec/models/spree/tax_category_spec.rb","spec/models/spree/tax_rate_spec.rb","spec/models/spree/taxon_image_spec.rb","spec/models/spree/taxon_spec.rb","spec/models/spree/taxonomy_spec.rb","spec/models/spree/user_spec.rb","spec/models/spree/variant/scopes_spec.rb","spec/models/spree/variant_spec.rb","spec/models/spree/webhook_delivery_spec.rb","spec/models/spree/webhook_endpoint_spec.rb","spec/models/spree/wished_item_spec.rb","spec/models/spree/wishlist_spec.rb","spec/models/spree/zone_member_spec.rb","spec/models/spree/zone_spec.rb","spec/presenters/spree/csv/customer_presenter_spec.rb","spec/presenters/spree/csv/gift_card_presenter_spec.rb","spec/presenters/spree/csv/newsletter_subscriber_presenter_spec.rb","spec/presenters/spree/csv/order_line_items_presenter_spec.rb","spec/presenters/spree/csv/product_variant_presenter_spec.rb","spec/presenters/spree/filters/options_presenter_spec.rb","spec/presenters/spree/filters/price_presenter_spec.rb","spec/presenters/spree/filters/price_range_presenter_spec.rb","spec/presenters/spree/filters/properties_presenter_spec.rb","spec/presenters/spree/filters/property_presenter_spec.rb","spec/presenters/spree/filters/quantified_price_range_presenter_spec.rb","spec/presenters/spree/variant_presenter_spec.rb","spec/presenters/spree/variants/option_types_presenter_spec.rb","spec/presenters/spree/variants/options_presenter_spec.rb","spec/serializers/spree/events/asset_serializer_spec.rb","spec/serializers/spree/events/base_serializer_spec.rb","spec/serializers/spree/events/customer_return_serializer_spec.rb","spec/serializers/spree/events/digital_link_serializer_spec.rb","spec/serializers/spree/events/digital_serializer_spec.rb","spec/serializers/spree/events/export_serializer_spec.rb","spec/serializers/spree/events/gift_card_batch_serializer_spec.rb","spec/serializers/spree/events/gift_card_serializer_spec.rb","spec/serializers/spree/events/import_row_serializer_spec.rb","spec/serializers/spree/events/import_serializer_spec.rb","spec/serializers/spree/events/invitation_serializer_spec.rb","spec/serializers/spree/events/line_item_serializer_spec.rb","spec/serializers/spree/events/newsletter_subscriber_serializer_spec.rb","spec/serializers/spree/events/order_serializer_spec.rb","spec/serializers/spree/events/payment_serializer_spec.rb","spec/serializers/spree/events/post_category_serializer_spec.rb","spec/serializers/spree/events/post_serializer_spec.rb","spec/serializers/spree/events/price_serializer_spec.rb","spec/serializers/spree/events/product_serializer_spec.rb","spec/serializers/spree/events/promotion_serializer_spec.rb","spec/serializers/spree/events/refund_serializer_spec.rb","spec/serializers/spree/events/reimbursement_serializer_spec.rb","spec/serializers/spree/events/report_serializer_spec.rb","spec/serializers/spree/events/return_authorization_serializer_spec.rb","spec/serializers/spree/events/return_item_serializer_spec.rb","spec/serializers/spree/events/shipment_serializer_spec.rb","spec/serializers/spree/events/stock_item_serializer_spec.rb","spec/serializers/spree/events/stock_movement_serializer_spec.rb","spec/serializers/spree/events/stock_transfer_serializer_spec.rb","spec/serializers/spree/events/store_credit_serializer_spec.rb","spec/serializers/spree/events/user_serializer_spec.rb","spec/serializers/spree/events/variant_serializer_spec.rb","spec/serializers/spree/events/wished_item_serializer_spec.rb","spec/serializers/spree/events/wishlist_serializer_spec.rb","spec/services/spree/account/addresses/create_spec.rb","spec/services/spree/account/addresses/update_spec.rb","spec/services/spree/account/create_spec.rb","spec/services/spree/account/update_spec.rb","spec/services/spree/addresses/phone_validator_spec.rb","spec/services/spree/addresses/update_spec.rb","spec/services/spree/cart/add_item_spec.rb","spec/services/spree/cart/associate_spec.rb","spec/services/spree/cart/change_currency_spec.rb","spec/services/spree/cart/create_spec.rb","spec/services/spree/cart/destroy_spec.rb","spec/services/spree/cart/empty_spec.rb","spec/services/spree/cart/remove_item_spec.rb","spec/services/spree/cart/remove_line_item_spec.rb","spec/services/spree/cart/remove_out_of_stock_items_spec.rb","spec/services/spree/cart/set_quantity_spec.rb","spec/services/spree/checkout/add_store_credit_spec.rb","spec/services/spree/checkout/advance_spec.rb","spec/services/spree/checkout/get_shipping_rates_spec.rb","spec/services/spree/checkout/remove_store_credit_spec.rb","spec/services/spree/checkout/select_shipping_method_spec.rb","spec/services/spree/checkout/update_spec.rb","spec/services/spree/classifications/reposition_spec.rb","spec/services/spree/credit_cards/destroy_spec.rb","spec/services/spree/data_feeds/google/required_attributes_spec.rb","spec/services/spree/data_feeds/google/rss_spec.rb","spec/services/spree/gift_cards/apply_spec.rb","spec/services/spree/gift_cards/redeem_spec.rb","spec/services/spree/gift_cards/remove_spec.rb","spec/services/spree/imports/row_processors/product_variant_spec.rb","spec/services/spree/line_items/create_spec.rb","spec/services/spree/line_items/destroy_spec.rb","spec/services/spree/line_items/update_spec.rb","spec/services/spree/locales/set_fallback_locale_for_store_spec.rb","spec/services/spree/newsletter/subscribe_spec.rb","spec/services/spree/newsletter/verify_spec.rb","spec/services/spree/orders/approve_spec.rb","spec/services/spree/orders/cancel_spec.rb","spec/services/spree/orders/create_user_account_spec.rb","spec/services/spree/payments/create_spec.rb","spec/services/spree/products/auto_match_taxons_spec.rb","spec/services/spree/products/duplicator_spec.rb","spec/services/spree/products/prepare_nested_attributes_spec.rb","spec/services/spree/seeds/all_spec.rb","spec/services/spree/seeds/digital_delivery_spec.rb","spec/services/spree/seeds/payment_methods_spec.rb","spec/services/spree/seeds/returns_environment_spec.rb","spec/services/spree/seeds/tax_categories_spec.rb","spec/services/spree/shipments/add_item_spec.rb","spec/services/spree/shipments/create_spec.rb","spec/services/spree/shipments/remove_item_spec.rb","spec/services/spree/stock_locations/stock_items/create_spec.rb","spec/services/spree/stores/settings_defaults_by_country_spec.rb","spec/services/spree/tags/bulk_add_spec.rb","spec/services/spree/tags/bulk_remove_spec.rb","spec/services/spree/taxons/add_products_spec.rb","spec/services/spree/taxons/regenerate_products_spec.rb","spec/services/spree/taxons/remove_products_spec.rb","spec/services/spree/variants/remove_line_items_spec.rb","spec/services/spree/wallet/create_payment_source_spec.rb","spec/subscribers/spree/event_log_subscriber_spec.rb","spec/subscribers/spree/export_subscriber_spec.rb","spec/subscribers/spree/invitation_email_subscriber_spec.rb","spec/subscribers/spree/product_metrics_subscriber_spec.rb","spec/subscribers/spree/report_subscriber_spec.rb","spec/validators/email_validator_spec.rb","spec/validators/spree/url_validator_spec.rb"],"skippableTests":["EmailValidator at ./spec/validators/email_validator_spec.rb.validates invalid email addresses.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2\"}}","EmailValidator at ./spec/validators/email_validator_spec.rb.validates valid email addresses.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","I18n at ./spec/i18n_spec.rb.does not have inconsistent interpolations.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3\"}}","I18n at ./spec/i18n_spec.rb.does not have missing keys.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","I18n at ./spec/i18n_spec.rb.files are normalized.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2\"}}","Order at ./spec/models/spree/order/gift_card_spec.rb.#apply_gift_card when there is a gift card applies the gift card to the order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","Order at ./spec/models/spree/order/gift_card_spec.rb.#gift_card_total when there is a gift card returns the gift card total.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","Order at ./spec/models/spree/order/gift_card_spec.rb.#remove_gift_card when there is a gift card removes the gift card from the order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","Order at ./spec/models/spree/order/store_credit_spec.rb.#add_store_credit_payments the available store credit is not enough to pay for the entire order creates a store credit payment for the available amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","Order at ./spec/models/spree/order/store_credit_spec.rb.#add_store_credit_payments there are multiple store credits they have different credit type priorities uses the primary store credit type over the secondary.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1:1\"}}","Order at ./spec/models/spree/order/store_credit_spec.rb.#add_store_credit_payments there is enough store credit to pay for the entire order creates a store credit payment for the full amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","Order at ./spec/models/spree/order/store_credit_spec.rb.#add_store_credit_payments there is no store credit does not create a store credit payment.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","Order at ./spec/models/spree/order/store_credit_spec.rb.#available_store_credits order does not have an associated user example at ./spec/models/spree/order/store_credit_spec.rb:253.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:1\"}}","Order at ./spec/models/spree/order/store_credit_spec.rb.#available_store_credits order has an associated user returns the user available store credits.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1\"}}","Order at ./spec/models/spree/order/store_credit_spec.rb.#could_use_store_credit? order does not have an associated user example at ./spec/models/spree/order/store_credit_spec.rb:276.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1:1\"}}","Order at ./spec/models/spree/order/store_credit_spec.rb.#could_use_store_credit? order has an associated user with store credit example at ./spec/models/spree/order/store_credit_spec.rb:295.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2:2:1\"}}","Order at ./spec/models/spree/order/store_credit_spec.rb.#could_use_store_credit? order has an associated user without Store Credit Payment example at ./spec/models/spree/order/store_credit_spec.rb:318.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2:4:1\"}}","Order at ./spec/models/spree/order/store_credit_spec.rb.#could_use_store_credit? order has an associated user without active Store Credit Payment example at ./spec/models/spree/order/store_credit_spec.rb:306.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2:3:1\"}}","Order at ./spec/models/spree/order/store_credit_spec.rb.#could_use_store_credit? order has an associated user without store credit example at ./spec/models/spree/order/store_credit_spec.rb:285.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2:1:1\"}}","Order at ./spec/models/spree/order/store_credit_spec.rb.#covered_by_store_credit order doesn't have an associated user example at ./spec/models/spree/order/store_credit_spec.rb:159.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","Order at ./spec/models/spree/order/store_credit_spec.rb.#covered_by_store_credit order has an associated user order total is zero example at ./spec/models/spree/order/store_credit_spec.rb:187.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:3:1\"}}","Order at ./spec/models/spree/order/store_credit_spec.rb.#covered_by_store_credit order has an associated user user does not have enough store credit to pay for the order example at ./spec/models/spree/order/store_credit_spec.rb:182.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:2:1\"}}","Order at ./spec/models/spree/order/store_credit_spec.rb.#covered_by_store_credit order has an associated user user has enough store credit to pay for the order example at ./spec/models/spree/order/store_credit_spec.rb:173.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1:1\"}}","Order at ./spec/models/spree/order/store_credit_spec.rb.#display_order_total_after_store_credit returns a money instance.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:1\"}}","Order at ./spec/models/spree/order/store_credit_spec.rb.#display_order_total_after_store_credit returns the order_total_after_store_credit amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:2\"}}","Order at ./spec/models/spree/order/store_credit_spec.rb.#display_store_credit_remaining_after_capture returns a money instance.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:1\"}}","Order at ./spec/models/spree/order/store_credit_spec.rb.#display_store_credit_remaining_after_capture returns all of the user's available store credit minus what's applied to the order amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:2\"}}","Order at ./spec/models/spree/order/store_credit_spec.rb.#display_total_applicable_store_credit returns a money instance.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1\"}}","Order at ./spec/models/spree/order/store_credit_spec.rb.#display_total_applicable_store_credit returns a negative amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2\"}}","Order at ./spec/models/spree/order/store_credit_spec.rb.#display_total_applied_store_credit returns a money instance.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:1\"}}","Order at ./spec/models/spree/order/store_credit_spec.rb.#display_total_applied_store_credit returns a negative amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:2\"}}","Order at ./spec/models/spree/order/store_credit_spec.rb.#display_total_available_store_credit returns a money instance.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:1\"}}","Order at ./spec/models/spree/order/store_credit_spec.rb.#display_total_available_store_credit returns the total_available_store_credit amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:2\"}}","Order at ./spec/models/spree/order/store_credit_spec.rb.#order_total_after_store_credit order's user does not have any store credits returns the order total.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2:1\"}}","Order at ./spec/models/spree/order/store_credit_spec.rb.#order_total_after_store_credit order's user has store credits deducts the applicable store credit.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1:1\"}}","Order at ./spec/models/spree/order/store_credit_spec.rb.#remove_store_credit_payments when order is complete example at ./spec/models/spree/order/store_credit_spec.rb:149.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","Order at ./spec/models/spree/order/store_credit_spec.rb.#remove_store_credit_payments when order is not complete example at ./spec/models/spree/order/store_credit_spec.rb:136.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","Order at ./spec/models/spree/order/store_credit_spec.rb.#remove_store_credit_payments when order is not complete example at ./spec/models/spree/order/store_credit_spec.rb:137.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:2\"}}","Order at ./spec/models/spree/order/store_credit_spec.rb.#total_applicable_store_credit order is completed with valid payments returns the sum of the payment amounts.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2:1:1\"}}","Order at ./spec/models/spree/order/store_credit_spec.rb.#total_applicable_store_credit order is completed without valid payments returns 0.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2:2:1\"}}","Order at ./spec/models/spree/order/store_credit_spec.rb.#total_applicable_store_credit order is in any state other than confirm or complete the associated user does not have store credits returns 0.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:3:2:1\"}}","Order at ./spec/models/spree/order/store_credit_spec.rb.#total_applicable_store_credit order is in any state other than confirm or complete the associated user has store credits the store credit is less than the order total returns the store credit amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:3:1:2:1\"}}","Order at ./spec/models/spree/order/store_credit_spec.rb.#total_applicable_store_credit order is in any state other than confirm or complete the associated user has store credits the store credit is more than the order total returns the order total.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:3:1:1:1\"}}","Order at ./spec/models/spree/order/store_credit_spec.rb.#total_applicable_store_credit order is in any state other than confirm or complete the order does not have an associated user returns 0.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:3:3:1\"}}","Order at ./spec/models/spree/order/store_credit_spec.rb.#total_applicable_store_credit order is in the confirm state with valid payments returns the sum of the payment amounts.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1:1:1\"}}","Order at ./spec/models/spree/order/store_credit_spec.rb.#total_applicable_store_credit order is in the confirm state without valid payments returns 0.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1:2:1\"}}","Order at ./spec/models/spree/order/store_credit_spec.rb.#total_applied_store_credit with valid payments returns the sum of the payment amounts.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1:1\"}}","Order at ./spec/models/spree/order/store_credit_spec.rb.#total_applied_store_credit with valid payments when payments are loaded returns the sum of the payment amounts.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1:2:1\"}}","Order at ./spec/models/spree/order/store_credit_spec.rb.#total_applied_store_credit without valid payments returns 0.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:2:1\"}}","Order at ./spec/models/spree/order/store_credit_spec.rb.#total_available_store_credit order does not have an associated user returns 0.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1\"}}","Order at ./spec/models/spree/order/store_credit_spec.rb.#total_available_store_credit order has an associated user returns the user's available store credit.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1\"}}","Order at ./spec/models/spree/order/store_credit_spec.rb.#total_available_store_credit order has an associated user when store is provided and has no store credits associated returns the user's available store credit.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:2:2:1\"}}","Order at ./spec/models/spree/order/store_credit_spec.rb.#total_available_store_credit order has an associated user when store is provided and has store credits associated returns the user's available store credit.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:2:1:1\"}}","Order at ./spec/models/spree/order/store_credit_spec.rb.#using_store_credit? order has no store credit payments example at ./spec/models/spree/order/store_credit_spec.rb:463.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:2:1\"}}","Order at ./spec/models/spree/order/store_credit_spec.rb.#using_store_credit? order has store credit payment example at ./spec/models/spree/order/store_credit_spec.rb:457.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1:1\"}}","Payment at ./spec/models/spree/payment/store_credit_spec.rb.#cancel! a store credit attempts to cancels the payment.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","Payment at ./spec/models/spree/payment/store_credit_spec.rb.#cancel! a store credit cancels successfully voids the payment.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","Payment at ./spec/models/spree/payment/store_credit_spec.rb.#cancel! a store credit does not cancel successfully does not change the payment state.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:1\"}}","Permission Sets Integration with Ability at ./spec/models/spree/permission_sets/ability_integration_spec.rb.admin role applies super user permissions to admin users.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","Permission Sets Integration with Ability at ./spec/models/spree/permission_sets/ability_integration_spec.rb.default role applies default permissions to non-persisted users.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","Permission Sets Integration with Ability at ./spec/models/spree/permission_sets/ability_integration_spec.rb.permission configuration API allows clearing permissions from a role.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2\"}}","Permission Sets Integration with Ability at ./spec/models/spree/permission_sets/ability_integration_spec.rb.permission configuration API allows configuring permissions like Solidus.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","Permission Sets Integration with Ability at ./spec/models/spree/permission_sets/ability_integration_spec.rb.role-based permissions user with multiple roles combines permission sets from all roles.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","Permission Sets Integration with Ability at ./spec/models/spree/permission_sets/ability_integration_spec.rb.role-based permissions user with single role applies the permission sets for the role.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","Permission Sets Integration with Ability at ./spec/models/spree/permission_sets/ability_integration_spec.rb.role-based permissions user with unconfigured role falls back to legacy behavior.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","Product scopes at ./spec/models/spree/product/scopes_spec.rb.#add_simple_scopes define scope ascend_by_updated_at on ActiveRecord::Relation example at ./spec/models/spree/product/scopes_spec.rb:217.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:1:2:1\"}}","Product scopes at ./spec/models/spree/product/scopes_spec.rb.#add_simple_scopes define scope ascend_by_updated_at on ActiveRecord::Relation example at ./spec/models/spree/product/scopes_spec.rb:218.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:1:2:2\"}}","Product scopes at ./spec/models/spree/product/scopes_spec.rb.#add_simple_scopes define scope ascend_by_updated_at on class example at ./spec/models/spree/product/scopes_spec.rb:213.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:1:1:1\"}}","Product scopes at ./spec/models/spree/product/scopes_spec.rb.#add_simple_scopes define scope descend_by_name on ActiveRecord::Relation example at ./spec/models/spree/product/scopes_spec.rb:228.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:2:2:1\"}}","Product scopes at ./spec/models/spree/product/scopes_spec.rb.#add_simple_scopes define scope descend_by_name on ActiveRecord::Relation example at ./spec/models/spree/product/scopes_spec.rb:229.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:2:2:2\"}}","Product scopes at ./spec/models/spree/product/scopes_spec.rb.#add_simple_scopes define scope descend_by_name on class example at ./spec/models/spree/product/scopes_spec.rb:224.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:2:1:1\"}}","Product scopes at ./spec/models/spree/product/scopes_spec.rb.#ascend_by_taxons_min_position orders products by ascending taxons minimum position.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","Product scopes at ./spec/models/spree/product/scopes_spec.rb.#available different currency example at ./spec/models/spree/product/scopes_spec.rb:36.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5:1\"}}","Product scopes at ./spec/models/spree/product/scopes_spec.rb.#available different currency example at ./spec/models/spree/product/scopes_spec.rb:37.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5:2\"}}","Product scopes at ./spec/models/spree/product/scopes_spec.rb.#available when available example at ./spec/models/spree/product/scopes_spec.rb:23.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","Product scopes at ./spec/models/spree/product/scopes_spec.rb.#available when discontinued example at ./spec/models/spree/product/scopes_spec.rb:11.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","Product scopes at ./spec/models/spree/product/scopes_spec.rb.#available when not available example at ./spec/models/spree/product/scopes_spec.rb:29.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1\"}}","Product scopes at ./spec/models/spree/product/scopes_spec.rb.#available when not discontinued example at ./spec/models/spree/product/scopes_spec.rb:17.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","Product scopes at ./spec/models/spree/product/scopes_spec.rb.#for_store returns products assigned to a store.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1\"}}","Product scopes at ./spec/models/spree/product/scopes_spec.rb.#in_stock.in_stock_or_backorderable example at ./spec/models/spree/product/scopes_spec.rb:325.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1\"}}","Product scopes at ./spec/models/spree/product/scopes_spec.rb.#search_by_name is case insensitive for search phrases.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:3\"}}","Product scopes at ./spec/models/spree/product/scopes_spec.rb.#search_by_name shows multiple products whose names contain phrase.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2\"}}","Product scopes at ./spec/models/spree/product/scopes_spec.rb.#search_by_name shows product whose name contains phrase.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","Product scopes at ./spec/models/spree/product/scopes_spec.rb..by_best_selling when products have same units_sold_count uses revenue as secondary sort criteria.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:3:1\"}}","Product scopes at ./spec/models/spree/product/scopes_spec.rb..by_best_selling with completed orders orders products by units_sold_count in ascending order when specified.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1:2\"}}","Product scopes at ./spec/models/spree/product/scopes_spec.rb..by_best_selling with completed orders orders products by units_sold_count in descending order by default.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1:1\"}}","Product scopes at ./spec/models/spree/product/scopes_spec.rb..by_best_selling with incomplete orders only counts units from completed orders.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:2:1\"}}","Product scopes at ./spec/models/spree/product/scopes_spec.rb..by_best_selling with multiple orders containing multiple line items ranks by total units sold across all orders.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:5:1\"}}","Product scopes at ./spec/models/spree/product/scopes_spec.rb..by_best_selling with products having no orders includes products with no orders at the end.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:6:1\"}}","Product scopes at ./spec/models/spree/product/scopes_spec.rb..by_best_selling with products having only pending orders (no completed_at) includes products with only pending orders with units_sold_count = 0.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:7:1\"}}","Product scopes at ./spec/models/spree/product/scopes_spec.rb..by_best_selling with products having only pending orders (no completed_at) orders products correctly with pending orders included.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:7:2\"}}","Product scopes at ./spec/models/spree/product/scopes_spec.rb..by_best_selling with varying quantities sums line item quantities for units_sold_count.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:4:1\"}}","Product scopes at ./spec/models/spree/product/scopes_spec.rb..for_filters when giving a currency with no products example at ./spec/models/spree/product/scopes_spec.rb:59.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","Product scopes at ./spec/models/spree/product/scopes_spec.rb..for_filters when giving a taxon example at ./spec/models/spree/product/scopes_spec.rb:55.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","Product scopes at ./spec/models/spree/product/scopes_spec.rb.A product assigned to parent and child taxons calling Product.in_taxon returns products in child taxons.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","Product scopes at ./spec/models/spree/product/scopes_spec.rb.A product assigned to parent and child taxons calling Product.in_taxon should not return duplicate records.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","Product scopes at ./spec/models/spree/product/scopes_spec.rb.A product assigned to parent and child taxons orders products based on their ordering within the classifications after ordering changed.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3:2\"}}","Product scopes at ./spec/models/spree/product/scopes_spec.rb.A product assigned to parent and child taxons orders products based on their ordering within the classifications by initial ordering.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3:1\"}}","Product scopes at ./spec/models/spree/product/scopes_spec.rb.options scopes .with_option cannot find an option type with an unknown id.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1:5\"}}","Product scopes at ./spec/models/spree/product/scopes_spec.rb.options scopes .with_option doesn't find any option types with an unknown name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1:2\"}}","Product scopes at ./spec/models/spree/product/scopes_spec.rb.options scopes .with_option finds by a option type's name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1:1\"}}","Product scopes at ./spec/models/spree/product/scopes_spec.rb.options scopes .with_option finds by a option type.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1:3\"}}","Product scopes at ./spec/models/spree/product/scopes_spec.rb.options scopes .with_option finds by an id.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1:4\"}}","Product scopes at ./spec/models/spree/product/scopes_spec.rb.options scopes .with_option_value can return product ids.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2:6\"}}","Product scopes at ./spec/models/spree/product/scopes_spec.rb.options scopes .with_option_value cannot find an option type with an unknown id.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2:5\"}}","Product scopes at ./spec/models/spree/product/scopes_spec.rb.options scopes .with_option_value doesn't find any option types with an unknown name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2:2\"}}","Product scopes at ./spec/models/spree/product/scopes_spec.rb.options scopes .with_option_value finds by a option type's name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2:1\"}}","Product scopes at ./spec/models/spree/product/scopes_spec.rb.options scopes .with_option_value finds by a option type.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2:3\"}}","Product scopes at ./spec/models/spree/product/scopes_spec.rb.options scopes .with_option_value finds by an id.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2:4\"}}","Product scopes at ./spec/models/spree/product/scopes_spec.rb.property scopes with_property cannot find a property with an unknown id.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:5\"}}","Product scopes at ./spec/models/spree/product/scopes_spec.rb.property scopes with_property doesn't find any properties with an unknown name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:2\"}}","Product scopes at ./spec/models/spree/product/scopes_spec.rb.property scopes with_property finds by a property's name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1\"}}","Product scopes at ./spec/models/spree/product/scopes_spec.rb.property scopes with_property finds by a property.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:3\"}}","Product scopes at ./spec/models/spree/product/scopes_spec.rb.property scopes with_property finds by an id.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:4\"}}","Product scopes at ./spec/models/spree/product/scopes_spec.rb.property scopes with_property_value cannot find by an unknown property's name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:2\"}}","Product scopes at ./spec/models/spree/product/scopes_spec.rb.property scopes with_property_value cannot find with a name by an incorrect value.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:3\"}}","Product scopes at ./spec/models/spree/product/scopes_spec.rb.property scopes with_property_value cannot find with a property by an incorrect value.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:5\"}}","Product scopes at ./spec/models/spree/product/scopes_spec.rb.property scopes with_property_value cannot find with an invalid id.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:7\"}}","Product scopes at ./spec/models/spree/product/scopes_spec.rb.property scopes with_property_value cannot find with an invalid value.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:8\"}}","Product scopes at ./spec/models/spree/product/scopes_spec.rb.property scopes with_property_value finds by a property's name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1\"}}","Product scopes at ./spec/models/spree/product/scopes_spec.rb.property scopes with_property_value finds by a property.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:4\"}}","Product scopes at ./spec/models/spree/product/scopes_spec.rb.property scopes with_property_value finds by an id with a value.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:6\"}}","Product scopes at ./spec/models/spree/product/scopes_spec.rb.property scopes with_property_values cannot find with an invalid property name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3:2\"}}","Product scopes at ./spec/models/spree/product/scopes_spec.rb.property scopes with_property_values cannot find with invalid property values.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3:3\"}}","Product scopes at ./spec/models/spree/product/scopes_spec.rb.property scopes with_property_values finds by property values.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3:1\"}}","Spree at ./spec/lib/spree/core_spec.rb..admin_user_class when admin_user_class is a Class instance raises an error.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","Spree at ./spec/lib/spree/core_spec.rb..admin_user_class when admin_user_class is a String instance returns the admin_user_class constant.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:4:1\"}}","Spree at ./spec/lib/spree/core_spec.rb..admin_user_class when admin_user_class is a Symbol instance returns the admin_user_class constant.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:1\"}}","Spree at ./spec/lib/spree/core_spec.rb..admin_user_class when admin_user_class is nil fallbacks to user_class.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","Spree at ./spec/lib/spree/core_spec.rb..admin_user_class when constantize is false returns the admin_user_class as a String.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:5:1\"}}","Spree at ./spec/lib/spree/core_spec.rb..private_storage_service_name when private_storage_service_name is a String instance returns the private_storage_service_name as a symbol.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","Spree at ./spec/lib/spree/core_spec.rb..private_storage_service_name when private_storage_service_name is a Symbol instance returns the private_storage_service_name as a symbol.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","Spree at ./spec/lib/spree/core_spec.rb..private_storage_service_name when private_storage_service_name is set to nil returns the private_storage_service_name as the default service.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3:1\"}}","Spree at ./spec/lib/spree/core_spec.rb..searcher_class when constantize is false returns the searcher_class as a String.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:4:1\"}}","Spree at ./spec/lib/spree/core_spec.rb..searcher_class when searcher_class is a Class instance raises an error.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1\"}}","Spree at ./spec/lib/spree/core_spec.rb..searcher_class when searcher_class is a String instance returns the searcher_class constant.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3:1\"}}","Spree at ./spec/lib/spree/core_spec.rb..searcher_class when searcher_class is a Symbol instance returns the searcher_class constant.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1\"}}","Spree at ./spec/lib/spree/core_spec.rb..user_class when constantize is false returns the user_class as a String.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1\"}}","Spree at ./spec/lib/spree/core_spec.rb..user_class when user_class is a Class instance raises an error.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","Spree at ./spec/lib/spree/core_spec.rb..user_class when user_class is a String instance returns the user_class constant.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","Spree at ./spec/lib/spree/core_spec.rb..user_class when user_class is a Symbol instance returns the user_class constant.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","Spree environment accessors at ./spec/lib/spree/core_environment_spec.rb.getter methods provides access to adjusters.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","Spree environment accessors at ./spec/lib/spree/core_environment_spec.rb.getter methods provides access to analytics.events.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:16\"}}","Spree environment accessors at ./spec/lib/spree/core_environment_spec.rb.getter methods provides access to analytics.handlers.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:17\"}}","Spree environment accessors at ./spec/lib/spree/core_environment_spec.rb.getter methods provides access to calculators.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree environment accessors at ./spec/lib/spree/core_environment_spec.rb.getter methods provides access to data_feed_types.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8\"}}","Spree environment accessors at ./spec/lib/spree/core_environment_spec.rb.getter methods provides access to export_types.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:9\"}}","Spree environment accessors at ./spec/lib/spree/core_environment_spec.rb.getter methods provides access to import_types.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:10\"}}","Spree environment accessors at ./spec/lib/spree/core_environment_spec.rb.getter methods provides access to integrations.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:18\"}}","Spree environment accessors at ./spec/lib/spree/core_environment_spec.rb.getter methods provides access to line_item_comparison_hooks.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7\"}}","Spree environment accessors at ./spec/lib/spree/core_environment_spec.rb.getter methods provides access to metafields.enabled_resources.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:15\"}}","Spree environment accessors at ./spec/lib/spree/core_environment_spec.rb.getter methods provides access to metafields.types.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:14\"}}","Spree environment accessors at ./spec/lib/spree/core_environment_spec.rb.getter methods provides access to payment_methods.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","Spree environment accessors at ./spec/lib/spree/core_environment_spec.rb.getter methods provides access to promotions.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","Spree environment accessors at ./spec/lib/spree/core_environment_spec.rb.getter methods provides access to reports.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:12\"}}","Spree environment accessors at ./spec/lib/spree/core_environment_spec.rb.getter methods provides access to stock_splitters.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","Spree environment accessors at ./spec/lib/spree/core_environment_spec.rb.getter methods provides access to taxon_rules.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:11\"}}","Spree environment accessors at ./spec/lib/spree/core_environment_spec.rb.getter methods provides access to translatable_resources.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:13\"}}","Spree environment accessors at ./spec/lib/spree/core_environment_spec.rb.getter methods provides access to validators.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","Spree environment accessors at ./spec/lib/spree/core_environment_spec.rb.modifying nested values allows modifying calculators.shipping_methods.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","Spree environment accessors at ./spec/lib/spree/core_environment_spec.rb.modifying nested values allows modifying promotions.rules.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2\"}}","Spree environment accessors at ./spec/lib/spree/core_environment_spec.rb.nested accessors allows access to calculators.shipping_methods.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","Spree environment accessors at ./spec/lib/spree/core_environment_spec.rb.nested accessors allows access to calculators.tax_rates.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","Spree environment accessors at ./spec/lib/spree/core_environment_spec.rb.nested accessors allows access to promotions.actions.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4\"}}","Spree environment accessors at ./spec/lib/spree/core_environment_spec.rb.nested accessors allows access to promotions.rules.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3\"}}","Spree environment accessors at ./spec/lib/spree/core_environment_spec.rb.nested accessors allows access to validators.addresses.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:5\"}}","Spree environment accessors at ./spec/lib/spree/core_environment_spec.rb.setter methods allows setting payment_methods.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","Spree environment accessors at ./spec/lib/spree/core_environment_spec.rb.setter methods allows setting reports.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3\"}}","Spree environment accessors at ./spec/lib/spree/core_environment_spec.rb.setter methods allows setting stock_splitters.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","Spree module dependency accessors at ./spec/models/spree/app_dependencies_spec.rb.Spree. does not respond to non-dependency methods.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:1:3\"}}","Spree module dependency accessors at ./spec/models/spree/app_dependencies_spec.rb.Spree. responds to dependency methods.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:1:2\"}}","Spree module dependency accessors at ./spec/models/spree/app_dependencies_spec.rb.Spree. returns the resolved class.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:1:1\"}}","Spree module dependency accessors at ./spec/models/spree/app_dependencies_spec.rb.Spree.= returns the new class via Spree module.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:2:2\"}}","Spree module dependency accessors at ./spec/models/spree/app_dependencies_spec.rb.Spree.= sets the dependency via Spree module.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:2:1\"}}","Spree module dependency accessors at ./spec/models/spree/app_dependencies_spec.rb.Spree.= tracks override source correctly (not internal routing code).{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:2:3\"}}","Spree::Ability at ./spec/models/spree/ability_spec.rb.#abilities_to_register adds the ability to the list of abilities.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","Spree::Ability at ./spec/models/spree/ability_spec.rb.#abilities_to_register applies the registered abilities permissions.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","Spree::Ability at ./spec/models/spree/ability_spec.rb.as Guest User for Address (IDOR vulnerability prevention) with non-persisted guest user cannot destroy guest addresses with nil user_id.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:14:1:4\"}}","Spree::Ability at ./spec/models/spree/ability_spec.rb.as Guest User for Address (IDOR vulnerability prevention) with non-persisted guest user cannot edit guest addresses with nil user_id.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:14:1:2\"}}","Spree::Ability at ./spec/models/spree/ability_spec.rb.as Guest User for Address (IDOR vulnerability prevention) with non-persisted guest user cannot manage any address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:14:1:5\"}}","Spree::Ability at ./spec/models/spree/ability_spec.rb.as Guest User for Address (IDOR vulnerability prevention) with non-persisted guest user cannot read guest addresses with nil user_id.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:14:1:1\"}}","Spree::Ability at ./spec/models/spree/ability_spec.rb.as Guest User for Address (IDOR vulnerability prevention) with non-persisted guest user cannot update guest addresses with nil user_id.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:14:1:3\"}}","Spree::Ability at ./spec/models/spree/ability_spec.rb.as Guest User for Address (IDOR vulnerability prevention) with persisted user can manage own address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:14:2:1\"}}","Spree::Ability at ./spec/models/spree/ability_spec.rb.as Guest User for Address (IDOR vulnerability prevention) with persisted user cannot manage guest addresses.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:14:2:2\"}}","Spree::Ability at ./spec/models/spree/ability_spec.rb.as Guest User for Address (IDOR vulnerability prevention) with persisted user cannot manage other user addresses.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:14:2:3\"}}","Spree::Ability at ./spec/models/spree/ability_spec.rb.as Guest User for Country requested by any user behaves like read only should allow index.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:1:1:3\"}}","Spree::Ability at ./spec/models/spree/ability_spec.rb.as Guest User for Country requested by any user behaves like read only should not allow create.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:1:1:1\"}}","Spree::Ability at ./spec/models/spree/ability_spec.rb.as Guest User for Country requested by any user behaves like read only should not allow update.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:1:1:2\"}}","Spree::Ability at ./spec/models/spree/ability_spec.rb.as Guest User for OptionType requested by any user behaves like read only should allow index.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1:1:3\"}}","Spree::Ability at ./spec/models/spree/ability_spec.rb.as Guest User for OptionType requested by any user behaves like read only should not allow create.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1:1:1\"}}","Spree::Ability at ./spec/models/spree/ability_spec.rb.as Guest User for OptionType requested by any user behaves like read only should not allow update.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1:1:2\"}}","Spree::Ability at ./spec/models/spree/ability_spec.rb.as Guest User for OptionValue requested by any user behaves like read only should allow index.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3:1:1:3\"}}","Spree::Ability at ./spec/models/spree/ability_spec.rb.as Guest User for OptionValue requested by any user behaves like read only should not allow create.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3:1:1:1\"}}","Spree::Ability at ./spec/models/spree/ability_spec.rb.as Guest User for OptionValue requested by any user behaves like read only should not allow update.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3:1:1:2\"}}","Spree::Ability at ./spec/models/spree/ability_spec.rb.as Guest User for Order requested by other user behaves like create only should allow create.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:4:2:1:1\"}}","Spree::Ability at ./spec/models/spree/ability_spec.rb.as Guest User for Order requested by other user behaves like create only should not allow read.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:4:2:1:2\"}}","Spree::Ability at ./spec/models/spree/ability_spec.rb.as Guest User for Order requested by other user behaves like create only should not allow update.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:4:2:1:3\"}}","Spree::Ability at ./spec/models/spree/ability_spec.rb.as Guest User for Order requested by same user behaves like access granted should allow create.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:4:1:1:2\"}}","Spree::Ability at ./spec/models/spree/ability_spec.rb.as Guest User for Order requested by same user behaves like access granted should allow show.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:4:1:1:1\"}}","Spree::Ability at ./spec/models/spree/ability_spec.rb.as Guest User for Order requested by same user behaves like access granted should allow update.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:4:1:1:3\"}}","Spree::Ability at ./spec/models/spree/ability_spec.rb.as Guest User for Order requested by same user behaves like no index allowed should not allow index.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:4:1:2:1\"}}","Spree::Ability at ./spec/models/spree/ability_spec.rb.as Guest User for Order requested with improper token behaves like create only should allow create.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:4:4:1:1\"}}","Spree::Ability at ./spec/models/spree/ability_spec.rb.as Guest User for Order requested with improper token behaves like create only should not allow read.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:4:4:1:2\"}}","Spree::Ability at ./spec/models/spree/ability_spec.rb.as Guest User for Order requested with improper token behaves like create only should not allow update.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:4:4:1:3\"}}","Spree::Ability at ./spec/models/spree/ability_spec.rb.as Guest User for Order requested with proper token behaves like access granted should allow create.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:4:3:1:2\"}}","Spree::Ability at ./spec/models/spree/ability_spec.rb.as Guest User for Order requested with proper token behaves like access granted should allow show.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:4:3:1:1\"}}","Spree::Ability at ./spec/models/spree/ability_spec.rb.as Guest User for Order requested with proper token behaves like access granted should allow update.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:4:3:1:3\"}}","Spree::Ability at ./spec/models/spree/ability_spec.rb.as Guest User for Order requested with proper token behaves like no index allowed should not allow index.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:4:3:2:1\"}}","Spree::Ability at ./spec/models/spree/ability_spec.rb.as Guest User for Product requested by any user behaves like read only should allow index.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:5:1:1:3\"}}","Spree::Ability at ./spec/models/spree/ability_spec.rb.as Guest User for Product requested by any user behaves like read only should not allow create.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:5:1:1:1\"}}","Spree::Ability at ./spec/models/spree/ability_spec.rb.as Guest User for Product requested by any user behaves like read only should not allow update.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:5:1:1:2\"}}","Spree::Ability at ./spec/models/spree/ability_spec.rb.as Guest User for ProductProperty requested by any user behaves like read only should allow index.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:6:1:1:3\"}}","Spree::Ability at ./spec/models/spree/ability_spec.rb.as Guest User for ProductProperty requested by any user behaves like read only should not allow create.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:6:1:1:1\"}}","Spree::Ability at ./spec/models/spree/ability_spec.rb.as Guest User for ProductProperty requested by any user behaves like read only should not allow update.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:6:1:1:2\"}}","Spree::Ability at ./spec/models/spree/ability_spec.rb.as Guest User for Property requested by any user behaves like read only should allow index.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:7:1:1:3\"}}","Spree::Ability at ./spec/models/spree/ability_spec.rb.as Guest User for Property requested by any user behaves like read only should not allow create.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:7:1:1:1\"}}","Spree::Ability at ./spec/models/spree/ability_spec.rb.as Guest User for Property requested by any user behaves like read only should not allow update.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:7:1:1:2\"}}","Spree::Ability at ./spec/models/spree/ability_spec.rb.as Guest User for State requested by any user behaves like read only should allow index.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:8:1:1:3\"}}","Spree::Ability at ./spec/models/spree/ability_spec.rb.as Guest User for State requested by any user behaves like read only should not allow create.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:8:1:1:1\"}}","Spree::Ability at ./spec/models/spree/ability_spec.rb.as Guest User for State requested by any user behaves like read only should not allow update.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:8:1:1:2\"}}","Spree::Ability at ./spec/models/spree/ability_spec.rb.as Guest User for Taxonomy requested by any user behaves like read only should allow index.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:10:1:1:3\"}}","Spree::Ability at ./spec/models/spree/ability_spec.rb.as Guest User for Taxonomy requested by any user behaves like read only should not allow create.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:10:1:1:1\"}}","Spree::Ability at ./spec/models/spree/ability_spec.rb.as Guest User for Taxonomy requested by any user behaves like read only should not allow update.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:10:1:1:2\"}}","Spree::Ability at ./spec/models/spree/ability_spec.rb.as Guest User for Taxons requested by any user behaves like read only should allow index.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:9:1:1:3\"}}","Spree::Ability at ./spec/models/spree/ability_spec.rb.as Guest User for Taxons requested by any user behaves like read only should not allow create.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:9:1:1:1\"}}","Spree::Ability at ./spec/models/spree/ability_spec.rb.as Guest User for Taxons requested by any user behaves like read only should not allow update.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:9:1:1:2\"}}","Spree::Ability at ./spec/models/spree/ability_spec.rb.as Guest User for User requested by other user behaves like create only should allow create.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:11:2:1:1\"}}","Spree::Ability at ./spec/models/spree/ability_spec.rb.as Guest User for User requested by other user behaves like create only should not allow read.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:11:2:1:2\"}}","Spree::Ability at ./spec/models/spree/ability_spec.rb.as Guest User for User requested by other user behaves like create only should not allow update.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:11:2:1:3\"}}","Spree::Ability at ./spec/models/spree/ability_spec.rb.as Guest User for User requested by same user behaves like access granted should allow create.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:11:1:1:2\"}}","Spree::Ability at ./spec/models/spree/ability_spec.rb.as Guest User for User requested by same user behaves like access granted should allow show.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:11:1:1:1\"}}","Spree::Ability at ./spec/models/spree/ability_spec.rb.as Guest User for User requested by same user behaves like access granted should allow update.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:11:1:1:3\"}}","Spree::Ability at ./spec/models/spree/ability_spec.rb.as Guest User for User requested by same user behaves like no index allowed should not allow index.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:11:1:2:1\"}}","Spree::Ability at ./spec/models/spree/ability_spec.rb.as Guest User for Variant requested by any user behaves like read only should allow index.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:12:1:1:3\"}}","Spree::Ability at ./spec/models/spree/ability_spec.rb.as Guest User for Variant requested by any user behaves like read only should not allow create.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:12:1:1:1\"}}","Spree::Ability at ./spec/models/spree/ability_spec.rb.as Guest User for Variant requested by any user behaves like read only should not allow update.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:12:1:1:2\"}}","Spree::Ability at ./spec/models/spree/ability_spec.rb.as Guest User for Zone requested by any user behaves like read only should allow index.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:13:1:1:3\"}}","Spree::Ability at ./spec/models/spree/ability_spec.rb.as Guest User for Zone requested by any user behaves like read only should not allow create.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:13:1:1:1\"}}","Spree::Ability at ./spec/models/spree/ability_spec.rb.as Guest User for Zone requested by any user behaves like read only should not allow update.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:13:1:1:2\"}}","Spree::Ability at ./spec/models/spree/ability_spec.rb.for admin protected resources with admin user admin user role is able to admin.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1:1\"}}","Spree::Ability at ./spec/models/spree/ability_spec.rb.for admin protected resources with customer is not able to admin.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3:1\"}}","Spree::Ability at ./spec/models/spree/ability_spec.rb.for admin protected resources with fakedispatch user is able to admin on the order and shipment pages.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1\"}}","Spree::Ability at ./spec/models/spree/ability_spec.rb.for general resource with admin user behaves like access granted should allow create.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1:2\"}}","Spree::Ability at ./spec/models/spree/ability_spec.rb.for general resource with admin user behaves like access granted should allow show.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1:1\"}}","Spree::Ability at ./spec/models/spree/ability_spec.rb.for general resource with admin user behaves like access granted should allow update.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1:3\"}}","Spree::Ability at ./spec/models/spree/ability_spec.rb.for general resource with admin user behaves like index allowed should allow index.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:2:1\"}}","Spree::Ability at ./spec/models/spree/ability_spec.rb.for general resource with customer behaves like access denied should not allow create.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1:2\"}}","Spree::Ability at ./spec/models/spree/ability_spec.rb.for general resource with customer behaves like access denied should not allow read.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1:1\"}}","Spree::Ability at ./spec/models/spree/ability_spec.rb.for general resource with customer behaves like access denied should not allow update.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1:3\"}}","Spree::Ability at ./spec/models/spree/ability_spec.rb.for general resource with customer behaves like no index allowed should not allow index.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:2:1\"}}","Spree::Ability at ./spec/models/spree/ability_spec.rb.register_ability adds the ability to the list of abilties.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::Ability at ./spec/models/spree/ability_spec.rb.register_ability applies the registered abilities permissions.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","Spree::Account::Addresses::Create at ./spec/services/spree/account/addresses/create_spec.rb.#call with invalid params returns errors.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","Spree::Account::Addresses::Create at ./spec/services/spree/account/addresses/create_spec.rb.#call with valid params creates address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","Spree::Account::Addresses::Create at ./spec/services/spree/account/addresses/create_spec.rb.#call with valid params user default address when created address is first user address assigns created address as default user bill address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:1:1\"}}","Spree::Account::Addresses::Create at ./spec/services/spree/account/addresses/create_spec.rb.#call with valid params user default address when created address is first user address assigns created address as default user ship address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:1:2\"}}","Spree::Account::Addresses::Create at ./spec/services/spree/account/addresses/create_spec.rb.#call with valid params user default address when user has some address already with default bill and ship address does not assign created address as default user bill address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:2:1:1\"}}","Spree::Account::Addresses::Create at ./spec/services/spree/account/addresses/create_spec.rb.#call with valid params user default address when user has some address already with default bill and ship address does not assign created address as default user ship address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:2:1:2\"}}","Spree::Account::Addresses::Create at ./spec/services/spree/account/addresses/create_spec.rb.#call with valid params user default address when user has some address already without default bill and ship address does not assign created address as default user bill address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:2:2:1\"}}","Spree::Account::Addresses::Create at ./spec/services/spree/account/addresses/create_spec.rb.#call with valid params user default address when user has some address already without default bill and ship address does not assign created address as default user ship address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:2:2:2\"}}","Spree::Account::Addresses::Create at ./spec/services/spree/account/addresses/create_spec.rb.#call with valid params when default billing is passed updates user's bill address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:5:1\"}}","Spree::Account::Addresses::Create at ./spec/services/spree/account/addresses/create_spec.rb.#call with valid params when default shipping is passed updates user's ship address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:6:1\"}}","Spree::Account::Addresses::Create at ./spec/services/spree/account/addresses/create_spec.rb.#call with valid params when order is passed assigns a new ship address to the order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:4:1\"}}","Spree::Account::Addresses::Create at ./spec/services/spree/account/addresses/create_spec.rb.#call with valid params when order is passed updates order to address state.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:4:2\"}}","Spree::Account::Addresses::Create at ./spec/services/spree/account/addresses/create_spec.rb.#call with valid params without user example at ./spec/services/spree/account/addresses/create_spec.rb:38.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","Spree::Account::Addresses::Update at ./spec/services/spree/account/addresses/update_spec.rb.#call with invalid params returns errors.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","Spree::Account::Addresses::Update at ./spec/services/spree/account/addresses/update_spec.rb.#call with valid params creates address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","Spree::Account::Create at ./spec/services/spree/account/create_spec.rb.#call with valid params creates new user.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","Spree::Account::Create at ./spec/services/spree/account/create_spec.rb.#call with valid params creates user with given params.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2\"}}","Spree::Account::Create at ./spec/services/spree/account/create_spec.rb.#call with valid params result is successful.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3\"}}","Spree::Account::Update at ./spec/services/spree/account/update_spec.rb.#call with valid params when all params are given behaves like both default addresses changed changes both default bill address and ship address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:4:1\"}}","Spree::Account::Update at ./spec/services/spree/account/update_spec.rb.#call with valid params when all params are given behaves like successful response result is successful.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:2:1\"}}","Spree::Account::Update at ./spec/services/spree/account/update_spec.rb.#call with valid params when all params are given behaves like updated attributes updates user with given params.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:3:1\"}}","Spree::Account::Update at ./spec/services/spree/account/update_spec.rb.#call with valid params when all params are given behaves like user not created does not create new user.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1:1\"}}","Spree::Account::Update at ./spec/services/spree/account/update_spec.rb.#call with valid params when only address params are given behaves like both default addresses changed changes both default bill address and ship address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:4:1\"}}","Spree::Account::Update at ./spec/services/spree/account/update_spec.rb.#call with valid params when only address params are given behaves like successful response result is successful.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:2:1\"}}","Spree::Account::Update at ./spec/services/spree/account/update_spec.rb.#call with valid params when only address params are given behaves like updated attributes updates user with given params.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:3:1\"}}","Spree::Account::Update at ./spec/services/spree/account/update_spec.rb.#call with valid params when only address params are given behaves like user not created does not create new user.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1:1\"}}","Spree::Account::Update at ./spec/services/spree/account/update_spec.rb.#call with valid params when only address params are given when only bill address is given behaves like successful response result is successful.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:5:2:1\"}}","Spree::Account::Update at ./spec/services/spree/account/update_spec.rb.#call with valid params when only address params are given when only bill address is given behaves like updated attributes updates user with given params.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:5:3:1\"}}","Spree::Account::Update at ./spec/services/spree/account/update_spec.rb.#call with valid params when only address params are given when only bill address is given behaves like user not created does not create new user.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:5:1:1\"}}","Spree::Account::Update at ./spec/services/spree/account/update_spec.rb.#call with valid params when only address params are given when only bill address is given changes only user default bill address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:5:4\"}}","Spree::Account::Update at ./spec/services/spree/account/update_spec.rb.#call with valid params when only address params are given when only ship address is given behaves like successful response result is successful.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:6:2:1\"}}","Spree::Account::Update at ./spec/services/spree/account/update_spec.rb.#call with valid params when only address params are given when only ship address is given behaves like updated attributes updates user with given params.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:6:3:1\"}}","Spree::Account::Update at ./spec/services/spree/account/update_spec.rb.#call with valid params when only address params are given when only ship address is given behaves like user not created does not create new user.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:6:1:1\"}}","Spree::Account::Update at ./spec/services/spree/account/update_spec.rb.#call with valid params when only address params are given when only ship address is given changes only user default ship address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:6:4\"}}","Spree::Address at ./spec/models/spree/address_spec.rb.#== different addresses example at ./spec/models/spree/address_spec.rb:529.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:17:2:1\"}}","Spree::Address at ./spec/models/spree/address_spec.rb.#== same addresses example at ./spec/models/spree/address_spec.rb:523.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:17:1:1\"}}","Spree::Address at ./spec/models/spree/address_spec.rb.#clear_invalid_state_entities state not present and state_name both not present example at ./spec/models/spree/address_spec.rb:454.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:1:1\"}}","Spree::Address at ./spec/models/spree/address_spec.rb.#clear_invalid_state_entities state not present and state_name both not present example at ./spec/models/spree/address_spec.rb:455.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:1:2\"}}","Spree::Address at ./spec/models/spree/address_spec.rb.#clear_invalid_state_entities state not present and state_name present when country has no states and state is not required example at ./spec/models/spree/address_spec.rb:512.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:3:3:1\"}}","Spree::Address at ./spec/models/spree/address_spec.rb.#clear_invalid_state_entities state not present and state_name present when country has no states and state is not required example at ./spec/models/spree/address_spec.rb:513.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:3:3:2\"}}","Spree::Address at ./spec/models/spree/address_spec.rb.#clear_invalid_state_entities state not present and state_name present when country has no states and state is required example at ./spec/models/spree/address_spec.rb:491.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:3:1:1\"}}","Spree::Address at ./spec/models/spree/address_spec.rb.#clear_invalid_state_entities state not present and state_name present when country has no states and state is required example at ./spec/models/spree/address_spec.rb:492.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:3:1:2\"}}","Spree::Address at ./spec/models/spree/address_spec.rb.#clear_invalid_state_entities state not present and state_name present when country has states example at ./spec/models/spree/address_spec.rb:501.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:3:2:1\"}}","Spree::Address at ./spec/models/spree/address_spec.rb.#clear_invalid_state_entities state not present and state_name present when country has states example at ./spec/models/spree/address_spec.rb:502.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:3:2:2\"}}","Spree::Address at ./spec/models/spree/address_spec.rb.#clear_invalid_state_entities state_name not present and state present state belongs to a different country than to which address is associated example at ./spec/models/spree/address_spec.rb:467.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:2:1:1\"}}","Spree::Address at ./spec/models/spree/address_spec.rb.#clear_invalid_state_entities state_name not present and state present state belongs to a different country than to which address is associated example at ./spec/models/spree/address_spec.rb:468.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:2:1:2\"}}","Spree::Address at ./spec/models/spree/address_spec.rb.#clear_invalid_state_entities state_name not present and state present state belongs to the same country associated with address example at ./spec/models/spree/address_spec.rb:474.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:2:2:1\"}}","Spree::Address at ./spec/models/spree/address_spec.rb.#clear_invalid_state_entities state_name not present and state present state belongs to the same country associated with address example at ./spec/models/spree/address_spec.rb:475.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:2:2:2\"}}","Spree::Address at ./spec/models/spree/address_spec.rb.#clear_state example at ./spec/models/spree/address_spec.rb:425.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:1\"}}","Spree::Address at ./spec/models/spree/address_spec.rb.#clear_state example at ./spec/models/spree/address_spec.rb:426.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:2\"}}","Spree::Address at ./spec/models/spree/address_spec.rb.#clear_state_name example at ./spec/models/spree/address_spec.rb:434.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:1\"}}","Spree::Address at ./spec/models/spree/address_spec.rb.#clear_state_name example at ./spec/models/spree/address_spec.rb:435.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:2\"}}","Spree::Address at ./spec/models/spree/address_spec.rb.#full_name both first and last names are present example at ./spec/models/spree/address_spec.rb:366.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1:1\"}}","Spree::Address at ./spec/models/spree/address_spec.rb.#state_name_text state and state_name are present example at ./spec/models/spree/address_spec.rb:410.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:3:1\"}}","Spree::Address at ./spec/models/spree/address_spec.rb.#state_name_text state is blank example at ./spec/models/spree/address_spec.rb:403.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:2:1\"}}","Spree::Address at ./spec/models/spree/address_spec.rb.#state_name_text state_name is blank example at ./spec/models/spree/address_spec.rb:397.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:1:1\"}}","Spree::Address at ./spec/models/spree/address_spec.rb.#state_text both name and abbr is present example at ./spec/models/spree/address_spec.rb:381.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2:1\"}}","Spree::Address at ./spec/models/spree/address_spec.rb.#state_text only name is present example at ./spec/models/spree/address_spec.rb:388.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:3:1\"}}","Spree::Address at ./spec/models/spree/address_spec.rb.#state_text state is blank example at ./spec/models/spree/address_spec.rb:374.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1:1\"}}","Spree::Address at ./spec/models/spree/address_spec.rb.#to_s address contains HTML properly escapes HTML.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:2:1\"}}","Spree::Address at ./spec/models/spree/address_spec.rb.#to_s is displayed as string.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:1\"}}","Spree::Address at ./spec/models/spree/address_spec.rb.address validators runs through all configured validators during validation.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:20:1\"}}","Spree::Address at ./spec/models/spree/address_spec.rb.after create when user is assigned and it has default name should assign address name to the user.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1:1\"}}","Spree::Address at ./spec/models/spree/address_spec.rb.after_commit :async_geocode geocodes the address in the background.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","Spree::Address at ./spec/models/spree/address_spec.rb.after_commit :async_geocode when geocoding data didn't change skips geocoding.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","Spree::Address at ./spec/models/spree/address_spec.rb.aliased attributes first_name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","Spree::Address at ./spec/models/spree/address_spec.rb.aliased attributes last_name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2\"}}","Spree::Address at ./spec/models/spree/address_spec.rb.before_validation :remove_emoji_and_normalize normalizes the address and removes emojis.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","Spree::Address at ./spec/models/spree/address_spec.rb.behaves like metadata can query records by metadata properties.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:10\"}}","Spree::Address at ./spec/models/spree/address_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:10.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","Spree::Address at ./spec/models/spree/address_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:11.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","Spree::Address at ./spec/models/spree/address_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:4.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::Address at ./spec/models/spree/address_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:5.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","Spree::Address at ./spec/models/spree/address_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:7.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","Spree::Address at ./spec/models/spree/address_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:8.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","Spree::Address at ./spec/models/spree/address_spec.rb.behaves like metadata reads data as not symbolized keys.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8\"}}","Spree::Address at ./spec/models/spree/address_spec.rb.behaves like metadata reads data as symbolized keys.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7\"}}","Spree::Address at ./spec/models/spree/address_spec.rb.clone creates a copy of the address with the exception of the id, label, user_id, updated_at and created_at attributes.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","Spree::Address at ./spec/models/spree/address_spec.rb.default values with user sets user_id and first/last name from user.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1\"}}","Spree::Address at ./spec/models/spree/address_spec.rb.defines require_phone? helper method example at ./spec/models/spree/address_spec.rb:417.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:1\"}}","Spree::Address at ./spec/models/spree/address_spec.rb.delegated method Country #country_iso return proper country_iso_name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1:3:1\"}}","Spree::Address at ./spec/models/spree/address_spec.rb.delegated method Country #country_iso3 return proper country_iso_name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1:4:1\"}}","Spree::Address at ./spec/models/spree/address_spec.rb.delegated method Country #country_iso_name return proper country_iso_name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1:2:1\"}}","Spree::Address at ./spec/models/spree/address_spec.rb.delegated method Country #country_name return proper country_iso_name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1:1:1\"}}","Spree::Address at ./spec/models/spree/address_spec.rb.editable & destroy #assign_new_default_address_to_user when address is deleted behaves like default address when 2 addresses are available assigns last available address as default to bill and ship address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:10:1:2:1:1\"}}","Spree::Address at ./spec/models/spree/address_spec.rb.editable & destroy #assign_new_default_address_to_user when address is deleted behaves like default address when deleted address was not assigned to the user does not touch user.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:10:1:2:4:1\"}}","Spree::Address at ./spec/models/spree/address_spec.rb.editable & destroy #assign_new_default_address_to_user when address is deleted behaves like default address when deleted address was not default does not change user bill address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:10:1:2:5:1\"}}","Spree::Address at ./spec/models/spree/address_spec.rb.editable & destroy #assign_new_default_address_to_user when address is deleted behaves like default address when deleted address was not default does not change user ship address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:10:1:2:5:2\"}}","Spree::Address at ./spec/models/spree/address_spec.rb.editable & destroy #assign_new_default_address_to_user when address is deleted behaves like default address when the only address left is invalid does not raise errors and sets addresses to nil.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:10:1:2:2:1\"}}","Spree::Address at ./spec/models/spree/address_spec.rb.editable & destroy #assign_new_default_address_to_user when address is deleted behaves like default address when the only address left is soft-deleted does not raise errors and sets addresses to nil.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:10:1:2:3:1\"}}","Spree::Address at ./spec/models/spree/address_spec.rb.editable & destroy #assign_new_default_address_to_user when address is deleted is deleted.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:10:1:1\"}}","Spree::Address at ./spec/models/spree/address_spec.rb.editable & destroy #assign_new_default_address_to_user when address is soft deleted behaves like default address when 2 addresses are available assigns last available address as default to bill and ship address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:10:2:2:1:1\"}}","Spree::Address at ./spec/models/spree/address_spec.rb.editable & destroy #assign_new_default_address_to_user when address is soft deleted behaves like default address when deleted address was not assigned to the user does not touch user.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:10:2:2:4:1\"}}","Spree::Address at ./spec/models/spree/address_spec.rb.editable & destroy #assign_new_default_address_to_user when address is soft deleted behaves like default address when deleted address was not default does not change user bill address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:10:2:2:5:1\"}}","Spree::Address at ./spec/models/spree/address_spec.rb.editable & destroy #assign_new_default_address_to_user when address is soft deleted behaves like default address when deleted address was not default does not change user ship address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:10:2:2:5:2\"}}","Spree::Address at ./spec/models/spree/address_spec.rb.editable & destroy #assign_new_default_address_to_user when address is soft deleted behaves like default address when the only address left is invalid does not raise errors and sets addresses to nil.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:10:2:2:2:1\"}}","Spree::Address at ./spec/models/spree/address_spec.rb.editable & destroy #assign_new_default_address_to_user when address is soft deleted behaves like default address when the only address left is soft-deleted does not raise errors and sets addresses to nil.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:10:2:2:3:1\"}}","Spree::Address at ./spec/models/spree/address_spec.rb.editable & destroy #assign_new_default_address_to_user when address is soft deleted is soft deleted.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:10:2:1\"}}","Spree::Address at ./spec/models/spree/address_spec.rb.editable & destroy can be deleted when there is an incomplete associated order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:6\"}}","Spree::Address at ./spec/models/spree/address_spec.rb.editable & destroy can be deleted.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:3\"}}","Spree::Address at ./spec/models/spree/address_spec.rb.editable & destroy can't be deleted when there is an associated order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:5\"}}","Spree::Address at ./spec/models/spree/address_spec.rb.editable & destroy has required attributes.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:1\"}}","Spree::Address at ./spec/models/spree/address_spec.rb.editable & destroy is destroyed deleted timestamp.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:8\"}}","Spree::Address at ./spec/models/spree/address_spec.rb.editable & destroy is destroyed without saving used.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:7\"}}","Spree::Address at ./spec/models/spree/address_spec.rb.editable & destroy is editable.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:2\"}}","Spree::Address at ./spec/models/spree/address_spec.rb.editable & destroy isn't editable when there is an associated order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:4\"}}","Spree::Address at ./spec/models/spree/address_spec.rb.editable & destroy when saving user raises error does not set deleted_at attribute for address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:9:1\"}}","Spree::Address at ./spec/models/spree/address_spec.rb.require_phone? when quick_checkout is false and Spree::Config[:address_requires_phone] is false returns false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:21:2:2:1\"}}","Spree::Address at ./spec/models/spree/address_spec.rb.require_phone? when quick_checkout is false and Spree::Config[:address_requires_phone] is true returns true.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:21:2:1:1\"}}","Spree::Address at ./spec/models/spree/address_spec.rb.require_phone? when quick_checkout is true returns false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:21:1:1\"}}","Spree::Address at ./spec/models/spree/address_spec.rb.validation address_requires_state preference is false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:8\"}}","Spree::Address at ./spec/models/spree/address_spec.rb.validation both state and state_name are entered and country does contain the state.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:7\"}}","Spree::Address at ./spec/models/spree/address_spec.rb.validation both state and state_name are entered but country does not contain the state.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:6\"}}","Spree::Address at ./spec/models/spree/address_spec.rb.validation does not require phone.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:9\"}}","Spree::Address at ./spec/models/spree/address_spec.rb.validation errors when state_name is nil.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2\"}}","Spree::Address at ./spec/models/spree/address_spec.rb.validation full state name is in state_name and country does contain that state.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:3\"}}","Spree::Address at ./spec/models/spree/address_spec.rb.validation phone not required shows no errors when phone is blank.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:15:1\"}}","Spree::Address at ./spec/models/spree/address_spec.rb.validation requires firstname.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:12\"}}","Spree::Address at ./spec/models/spree/address_spec.rb.validation requires lastname.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:13\"}}","Spree::Address at ./spec/models/spree/address_spec.rb.validation requires zipcode.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:11\"}}","Spree::Address at ./spec/models/spree/address_spec.rb.validation state abbr is in state_name and country does contain that state.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:4\"}}","Spree::Address at ./spec/models/spree/address_spec.rb.validation state is entered but country does not contain that state.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:5\"}}","Spree::Address at ./spec/models/spree/address_spec.rb.validation state_name is not nil and country does not have any states.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1\"}}","Spree::Address at ./spec/models/spree/address_spec.rb.validation when phone is required validates presence of the phone.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:10:1\"}}","Spree::Address at ./spec/models/spree/address_spec.rb.validation zipcode not required shows no errors when phone is blank.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:16:1\"}}","Spree::Address at ./spec/models/spree/address_spec.rb.validation zipcode validation accepts a zip code with surrounding white space.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:14:2\"}}","Spree::Address at ./spec/models/spree/address_spec.rb.validation zipcode validation accepts an unformatted zip code.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:14:3\"}}","Spree::Address at ./spec/models/spree/address_spec.rb.validation zipcode validation does not validate country does not requires zipcode.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:14:4:3\"}}","Spree::Address at ./spec/models/spree/address_spec.rb.validation zipcode validation does not validate does not have a country.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:14:4:2\"}}","Spree::Address at ./spec/models/spree/address_spec.rb.validation zipcode validation does not validate does not have a supported country iso.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:14:4:7\"}}","Spree::Address at ./spec/models/spree/address_spec.rb.validation zipcode validation does not validate does not have a zipcode.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:14:4:5\"}}","Spree::Address at ./spec/models/spree/address_spec.rb.validation zipcode validation does not validate does not have an iso.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:14:4:4\"}}","Spree::Address at ./spec/models/spree/address_spec.rb.validation zipcode validation does not validate is for quick checkout.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:14:4:1\"}}","Spree::Address at ./spec/models/spree/address_spec.rb.validation zipcode validation does not validate zipcode is nil.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:14:4:6\"}}","Spree::Address at ./spec/models/spree/address_spec.rb.validation zipcode validation validates the zipcode.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:14:1\"}}","Spree::Addresses::Find at ./spec/finders/spree/addresses/find_spec.rb.#execute with exclude_quick_checkout filter set to falsey value returns all addresses without filtering.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","Spree::Addresses::Find at ./spec/finders/spree/addresses/find_spec.rb.#execute with exclude_quick_checkout filter set to truthy value returns only non-quick-checkout addresses.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","Spree::Addresses::Find at ./spec/finders/spree/addresses/find_spec.rb.#execute without any filter parameters returns all addresses without filtering.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","Spree::Addresses::GeocodeAddressJob at ./spec/jobs/spree/addresses/geocode_address_job_spec.rb.geocodes the address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","Spree::Addresses::GeocodeAddressJob at ./spec/jobs/spree/addresses/geocode_address_job_spec.rb.when the address cannot be geocoded handles the error.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","Spree::Addresses::PhoneValidator at ./spec/services/spree/addresses/phone_validator_spec.rb.#validate when no country is provided behaves like does not add a phone error does not add an error.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1:1\"}}","Spree::Addresses::PhoneValidator at ./spec/services/spree/addresses/phone_validator_spec.rb.#validate when no country iso is provided behaves like does not add a phone error does not add an error.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1:1\"}}","Spree::Addresses::PhoneValidator at ./spec/services/spree/addresses/phone_validator_spec.rb.#validate when no phone is provided behaves like does not add a phone error does not add an error.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","Spree::Addresses::PhoneValidator at ./spec/services/spree/addresses/phone_validator_spec.rb.#validate when phone is provided and country is US and phone is invalid and phone is from another country adds an error.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1:2:1:1\"}}","Spree::Addresses::PhoneValidator at ./spec/services/spree/addresses/phone_validator_spec.rb.#validate when phone is provided and country is US and phone is invalid because not matching US area code adds an error.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1:2:2:1\"}}","Spree::Addresses::PhoneValidator at ./spec/services/spree/addresses/phone_validator_spec.rb.#validate when phone is provided and country is US and phone is valid and has dashed and parenthesized and prefix behaves like does not add a phone error does not add an error.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1:1:9:1:1\"}}","Spree::Addresses::PhoneValidator at ./spec/services/spree/addresses/phone_validator_spec.rb.#validate when phone is provided and country is US and phone is valid and has dashed and parenthesized and prefix without plus sign behaves like does not add a phone error does not add an error.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1:1:10:1:1\"}}","Spree::Addresses::PhoneValidator at ./spec/services/spree/addresses/phone_validator_spec.rb.#validate when phone is provided and country is US and phone is valid and has dashed and parenthesized behaves like does not add a phone error does not add an error.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1:1:8:1:1\"}}","Spree::Addresses::PhoneValidator at ./spec/services/spree/addresses/phone_validator_spec.rb.#validate when phone is provided and country is US and phone is valid and has dashes and prefix after dash behaves like does not add a phone error does not add an error.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1:1:7:1:1\"}}","Spree::Addresses::PhoneValidator at ./spec/services/spree/addresses/phone_validator_spec.rb.#validate when phone is provided and country is US and phone is valid and has dashes and prefix behaves like does not add a phone error does not add an error.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1:1:5:1:1\"}}","Spree::Addresses::PhoneValidator at ./spec/services/spree/addresses/phone_validator_spec.rb.#validate when phone is provided and country is US and phone is valid and has dashes and prefix without plus sign behaves like does not add a phone error does not add an error.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1:1:6:1:1\"}}","Spree::Addresses::PhoneValidator at ./spec/services/spree/addresses/phone_validator_spec.rb.#validate when phone is provided and country is US and phone is valid and has dashes behaves like does not add a phone error does not add an error.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1:1:4:1:1\"}}","Spree::Addresses::PhoneValidator at ./spec/services/spree/addresses/phone_validator_spec.rb.#validate when phone is provided and country is US and phone is valid and has prefix with plus sign behaves like does not add a phone error does not add an error.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1:1:2:1:1\"}}","Spree::Addresses::PhoneValidator at ./spec/services/spree/addresses/phone_validator_spec.rb.#validate when phone is provided and country is US and phone is valid and has prefix without plus sign behaves like does not add a phone error does not add an error.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1:1:3:1:1\"}}","Spree::Addresses::PhoneValidator at ./spec/services/spree/addresses/phone_validator_spec.rb.#validate when phone is provided and country is US and phone is valid without prefix behaves like does not add a phone error does not add an error.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1:1:1:1:1\"}}","Spree::Addresses::PhoneValidator at ./spec/services/spree/addresses/phone_validator_spec.rb.#validate when phone is provided because country is not matching phone adds an error.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:2:1\"}}","Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb.#call with invalid params returns errors.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb.#call with valid params when address is editable behaves like updating with same params when params are the same does not create new address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:5:1:2\"}}","Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb.#call with valid params when address is editable behaves like updating with same params when params are the same does not update address nor create when attribute changed from nil to blank string.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:5:1:4\"}}","Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb.#call with valid params when address is editable behaves like updating with same params when params are the same does not update address nor create when attribute changed only in case.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:5:1:5\"}}","Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb.#call with valid params when address is editable behaves like updating with same params when params are the same does not update address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:5:1:1\"}}","Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb.#call with valid params when address is editable behaves like updating with same params when params are the same returns success.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:5:1:3\"}}","Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb.#call with valid params when address is editable behaves like updating with same params when params are the same when setting the create_new_address_on_update param to true does not create new address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:5:1:6:1\"}}","Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb.#call with valid params when address is editable behaves like updating with same params when user only sets the address as default billing updates user's bill address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:5:3:1\"}}","Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb.#call with valid params when address is editable behaves like updating with same params when user only sets the address as default shipping updates user's ship address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:5:2:1\"}}","Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb.#call with valid params when address is editable updates address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb.#call with valid params when address is editable when order is passed updates order to address state.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:4:1\"}}","Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb.#call with valid params when address is editable when the create_new_address_on_update param is set to true creates a new address and keeps the previous one.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:6:1\"}}","Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb.#call with valid params when address is editable when the create_new_address_on_update param is set to true with a user doesn't change the user's bill and ship addresses by default.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:6:2:1\"}}","Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb.#call with valid params when address is editable when the create_new_address_on_update param is set to true with a user when the default_billing param is set to true changes user's bill address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:6:2:2:1\"}}","Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb.#call with valid params when address is editable when the create_new_address_on_update param is set to true with a user when the default_shipping param is set to true changes user's ship address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:6:2:3:1\"}}","Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb.#call with valid params when address is editable when the create_new_address_on_update param is set to true with an order doesn't change the order addresses.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:6:3:1\"}}","Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb.#call with valid params when address is editable when user sets address as default billing updates user's bill address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:3:1\"}}","Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb.#call with valid params when address is editable when user sets address as default shipping updates user's ship address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:2:1\"}}","Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb.#call with valid params when address is uneditable behaves like updating with same params when params are the same does not create new address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:6:1:2\"}}","Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb.#call with valid params when address is uneditable behaves like updating with same params when params are the same does not update address nor create when attribute changed from nil to blank string.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:6:1:4\"}}","Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb.#call with valid params when address is uneditable behaves like updating with same params when params are the same does not update address nor create when attribute changed only in case.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:6:1:5\"}}","Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb.#call with valid params when address is uneditable behaves like updating with same params when params are the same does not update address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:6:1:1\"}}","Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb.#call with valid params when address is uneditable behaves like updating with same params when params are the same returns success.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:6:1:3\"}}","Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb.#call with valid params when address is uneditable behaves like updating with same params when params are the same when setting the create_new_address_on_update param to true does not create new address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:6:1:6:1\"}}","Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb.#call with valid params when address is uneditable behaves like updating with same params when user only sets the address as default billing updates user's bill address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:6:3:1\"}}","Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb.#call with valid params when address is uneditable behaves like updating with same params when user only sets the address as default shipping updates user's ship address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:6:2:1\"}}","Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb.#call with valid params when address is uneditable when order with deleted address is passed updates order bill address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:5:3\"}}","Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb.#call with valid params when address is uneditable when order with deleted address is passed updates order ship address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:5:2\"}}","Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb.#call with valid params when address is uneditable when order with deleted address is passed updates order to address state.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:5:1\"}}","Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb.#call with valid params when address is uneditable when the create_new_address_on_update param is set to true creates a new address and keeps the previous one.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:7:1\"}}","Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb.#call with valid params when address is uneditable when the create_new_address_on_update param is set to true with a user doesn't change the user's bill and ship addresses by default.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:7:2:1\"}}","Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb.#call with valid params when address is uneditable when the create_new_address_on_update param is set to true with a user when the default_billing param is set to true changes user's bill address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:7:2:2:1\"}}","Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb.#call with valid params when address is uneditable when the create_new_address_on_update param is set to true with a user when the default_shipping param is set to true changes user's ship address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:7:2:3:1\"}}","Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb.#call with valid params when address is uneditable when the create_new_address_on_update param is set to true with an order doesn't change the order addresses.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:7:3:1\"}}","Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb.#call with valid params when address is uneditable when there have been created same address with new params when is not deleted takes that address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1:1:1\"}}","Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb.#call with valid params when address is uneditable when there have been created same address with new params when its soft deleted creates new address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1:2:1\"}}","Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb.#call with valid params when address is uneditable when there is no such existing address with given params creates new address and soft-deletes the previous one.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:2:1\"}}","Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb.#call with valid params when address is uneditable when there is no such existing address with given params when the old address was set as default billing sets the new address as default billing.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:2:2:1\"}}","Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb.#call with valid params when address is uneditable when there is no such existing address with given params when the old address was set as default shipping sets the new address as default shipping.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:2:3:1\"}}","Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb.#call with valid params when address is uneditable when user sets address as default billing updates user's bill address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:4:1\"}}","Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb.#call with valid params when address is uneditable when user sets address as default shipping updates user's ship address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:3:1\"}}","Spree::Adjustable::Adjuster::Base at ./spec/models/spree/adjustable/adjuster/base_spec.rb.raises missing update method.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","Spree::Adjustable::Adjuster::Promotion at ./spec/models/spree/adjustable/adjuster/promotion_spec.rb.best promotion is always applied chooses the most recent promotion adjustment when amounts are equal.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","Spree::Adjustable::Adjuster::Promotion at ./spec/models/spree/adjustable/adjuster/promotion_spec.rb.best promotion is always applied competing promos do not update promo_total.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","Spree::Adjustable::Adjuster::Promotion at ./spec/models/spree/adjustable/adjuster/promotion_spec.rb.best promotion is always applied multiple adjustments and the best one is not eligible still makes the previous best eligible adjustment valid.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5:1\"}}","Spree::Adjustable::Adjuster::Promotion at ./spec/models/spree/adjustable/adjuster/promotion_spec.rb.best promotion is always applied only leaves one adjustment even if 2 have the same amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","Spree::Adjustable::Adjuster::Promotion at ./spec/models/spree/adjustable/adjuster/promotion_spec.rb.best promotion is always applied uses only the most valuable promotion.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","Spree::Adjustable::Adjuster::Promotion at ./spec/models/spree/adjustable/adjuster/promotion_spec.rb.best promotion is always applied when previously ineligible promotions become available picks the best line-item-level promo according to current eligibility.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:3\"}}","Spree::Adjustable::Adjuster::Promotion at ./spec/models/spree/adjustable/adjuster/promotion_spec.rb.best promotion is always applied when previously ineligible promotions become available picks the best line-item-level promo according to current eligibility.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:4\"}}","Spree::Adjustable::Adjuster::Promotion at ./spec/models/spree/adjustable/adjuster/promotion_spec.rb.best promotion is always applied when previously ineligible promotions become available picks the best order-level promo according to current eligibility.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1\"}}","Spree::Adjustable::Adjuster::Promotion at ./spec/models/spree/adjustable/adjuster/promotion_spec.rb.best promotion is always applied when previously ineligible promotions become available picks the best order-level promo according to current eligibility.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:2\"}}","Spree::Adjustable::Adjuster::Tax at ./spec/models/spree/adjustable/adjuster/tax_spec.rb.taxes with promotions tax excluded from price tax applies to line item.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","Spree::Adjustable::Adjuster::Tax at ./spec/models/spree/adjustable/adjuster/tax_spec.rb.taxes with promotions tax excluded from price tax linked to order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2\"}}","Spree::Adjustable::Adjuster::Tax at ./spec/models/spree/adjustable/adjuster/tax_spec.rb.taxes with promotions tax included in price tax has no bearing on final price.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","Spree::Adjustable::Adjuster::Tax at ./spec/models/spree/adjustable/adjuster/tax_spec.rb.taxes with promotions tax included in price tax linked to order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2\"}}","Spree::Adjustable::AdjustmentsUpdater at ./spec/models/spree/adjustable/adjustments_updater_spec.rb.#update nil does not raise an error.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","Spree::Adjustable::AdjustmentsUpdater at ./spec/models/spree/adjustable/adjustments_updater_spec.rb.#update non-persisted object does nothing.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","Spree::Adjustable::AdjustmentsUpdater at ./spec/models/spree/adjustable/adjustments_updater_spec.rb.#update persisted object updates all linked adjusters.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","Spree::Adjustable::AdjustmentsUpdater at ./spec/models/spree/adjustable/adjustments_updater_spec.rb.#update persisted object when there is no tax adjuster updates all linked adjusters without tax.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","Spree::Adjustment at ./spec/models/spree/adjustment_spec.rb.#amount= is expected to equal to localized number.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::Adjustment at ./spec/models/spree/adjustment_spec.rb.#cached_source returns nil when source_id is blank.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:4\"}}","Spree::Adjustment at ./spec/models/spree/adjustment_spec.rb.#cached_source returns nil when source_type is blank.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:3\"}}","Spree::Adjustment at ./spec/models/spree/adjustment_spec.rb.#cached_source returns the source.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1\"}}","Spree::Adjustment at ./spec/models/spree/adjustment_spec.rb.#cached_source uses Rails.cache.fetch to cache the source.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2\"}}","Spree::Adjustment at ./spec/models/spree/adjustment_spec.rb.#create & #destroy calls #update_adjustable_adjustment_total.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","Spree::Adjustment at ./spec/models/spree/adjustment_spec.rb.#currency returns the order currency.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1\"}}","Spree::Adjustment at ./spec/models/spree/adjustment_spec.rb.#display_amount shows the amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1\"}}","Spree::Adjustment at ./spec/models/spree/adjustment_spec.rb.#display_amount with currency set to JPY when adjustable is nil displays in the default currency.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:2:2:1\"}}","Spree::Adjustment at ./spec/models/spree/adjustment_spec.rb.#display_amount with currency set to JPY when adjustable is set to an order displays in JPY.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:2:1:1\"}}","Spree::Adjustment at ./spec/models/spree/adjustment_spec.rb.#save touches the adjustable.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","Spree::Adjustment at ./spec/models/spree/adjustment_spec.rb.#source_cache_key returns a cache key based on source type and id.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:1\"}}","Spree::Adjustment at ./spec/models/spree/adjustment_spec.rb.#update! when adjustment is closed does not update the adjustment.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1:1\"}}","Spree::Adjustment at ./spec/models/spree/adjustment_spec.rb.#update! when adjustment is open it is a promotion adjustment the promotion is eligible sets the adjustment eligible to true.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:2:2:1:1\"}}","Spree::Adjustment at ./spec/models/spree/adjustment_spec.rb.#update! when adjustment is open it is a promotion adjustment the promotion is not eligible sets the adjustment eligible to false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:2:2:2:1\"}}","Spree::Adjustment at ./spec/models/spree/adjustment_spec.rb.#update! when adjustment is open updates the amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:2:1\"}}","Spree::Adjustment at ./spec/models/spree/adjustment_spec.rb.#update! when adjustment is open when amount and eligible are the same does not update the adjustment.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:2:3:1\"}}","Spree::Adjustment at ./spec/models/spree/adjustment_spec.rb.adjustment state #closed? is false when adjustment state is open.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1:2\"}}","Spree::Adjustment at ./spec/models/spree/adjustment_spec.rb.adjustment state #closed? is true when adjustment state is closed.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1:1\"}}","Spree::Adjustment at ./spec/models/spree/adjustment_spec.rb.competing_promos scope a custom source_type has been added to competing_promos selects adjustments with registered source_types.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2:1\"}}","Spree::Adjustment at ./spec/models/spree/adjustment_spec.rb.competing_promos scope no custom source_types have been added to competing_promos selects promotion adjustments by default.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1:1\"}}","Spree::Adjustment at ./spec/models/spree/adjustment_spec.rb.non_tax scope select non-tax adjustments.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","Spree::Adjustment at ./spec/models/spree/adjustment_spec.rb.scopes .for_complete_order example at ./spec/models/spree/adjustment_spec.rb:30.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","Spree::Adjustment at ./spec/models/spree/adjustment_spec.rb.scopes .for_complete_order example at ./spec/models/spree/adjustment_spec.rb:31.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:2\"}}","Spree::Adjustment at ./spec/models/spree/adjustment_spec.rb.scopes .for_incomplete_order example at ./spec/models/spree/adjustment_spec.rb:42.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","Spree::Adjustment at ./spec/models/spree/adjustment_spec.rb.scopes .for_incomplete_order example at ./spec/models/spree/adjustment_spec.rb:43.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:2\"}}","Spree::Asset at ./spec/models/spree/asset_spec.rb.#product returns the product for the asset.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","Spree::Asset at ./spec/models/spree/asset_spec.rb..with_session_uploaded_assets_uuid returns assets with the given uuid.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","Spree::Asset at ./spec/models/spree/asset_spec.rb.behaves like lifecycle events lifecycle events asset.created publishes created event when record is created.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1:1\"}}","Spree::Asset at ./spec/models/spree/asset_spec.rb.behaves like lifecycle events lifecycle events asset.deleted publishes deleted event when record is deleted.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:3:1\"}}","Spree::Asset at ./spec/models/spree/asset_spec.rb.behaves like lifecycle events lifecycle events asset.updated publishes updated event when record is updated.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:2:1\"}}","Spree::Asset at ./spec/models/spree/asset_spec.rb.behaves like metadata can query records by metadata properties.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:10\"}}","Spree::Asset at ./spec/models/spree/asset_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:10.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","Spree::Asset at ./spec/models/spree/asset_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:11.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","Spree::Asset at ./spec/models/spree/asset_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:4.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::Asset at ./spec/models/spree/asset_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:5.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","Spree::Asset at ./spec/models/spree/asset_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:7.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","Spree::Asset at ./spec/models/spree/asset_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:8.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","Spree::Asset at ./spec/models/spree/asset_spec.rb.behaves like metadata reads data as not symbolized keys.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8\"}}","Spree::Asset at ./spec/models/spree/asset_spec.rb.behaves like metadata reads data as symbolized keys.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7\"}}","Spree::Asset at ./spec/models/spree/asset_spec.rb.delegated methods delegates :attached? to attachment.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2\"}}","Spree::Asset at ./spec/models/spree/asset_spec.rb.delegated methods delegates :blob to attachment.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:5\"}}","Spree::Asset at ./spec/models/spree/asset_spec.rb.delegated methods delegates :filename to attachment.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:6\"}}","Spree::Asset at ./spec/models/spree/asset_spec.rb.delegated methods delegates :key to attachment.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","Spree::Asset at ./spec/models/spree/asset_spec.rb.delegated methods delegates :variable? to attachment.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:4\"}}","Spree::Asset at ./spec/models/spree/asset_spec.rb.delegated methods delegates :variant to attachment.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3\"}}","Spree::Asset at ./spec/models/spree/asset_spec.rb.external URL #external_url returns nil if the external URL is blank.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2:2\"}}","Spree::Asset at ./spec/models/spree/asset_spec.rb.external URL #external_url returns the external URL.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2:1\"}}","Spree::Asset at ./spec/models/spree/asset_spec.rb.external URL #external_url= sets the external URL.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:3:1\"}}","Spree::Asset at ./spec/models/spree/asset_spec.rb.external URL .with_external_url returns assets with the given external URL.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1:1\"}}","Spree::Asset at ./spec/models/spree/asset_spec.rb.external URL .with_external_url returns no assets if the external URL is blank.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1:2\"}}","Spree::Asset at ./spec/models/spree/asset_spec.rb.named variants defines :large variant with correct options.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:5\"}}","Spree::Asset at ./spec/models/spree/asset_spec.rb.named variants defines :medium variant with correct options.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4\"}}","Spree::Asset at ./spec/models/spree/asset_spec.rb.named variants defines :mini variant with correct options.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","Spree::Asset at ./spec/models/spree/asset_spec.rb.named variants defines :og_image variant with correct options.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:7\"}}","Spree::Asset at ./spec/models/spree/asset_spec.rb.named variants defines :small variant with correct options.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3\"}}","Spree::Asset at ./spec/models/spree/asset_spec.rb.named variants defines :xlarge variant with correct options.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:6\"}}","Spree::Asset at ./spec/models/spree/asset_spec.rb.named variants defines preprocessed variants based on config.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","Spree::Base at ./spec/models/spree/base_spec.rb..json_api_columns example at ./spec/models/spree/base_spec.rb:60.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","Spree::Base at ./spec/models/spree/base_spec.rb..json_api_columns example at ./spec/models/spree/base_spec.rb:61.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3\"}}","Spree::Base at ./spec/models/spree/base_spec.rb..json_api_columns skips sensitive data.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","Spree::Base at ./spec/models/spree/base_spec.rb..json_api_permitted_attributes example at ./spec/models/spree/base_spec.rb:65.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","Spree::Base at ./spec/models/spree/base_spec.rb..json_api_type example at ./spec/models/spree/base_spec.rb:50.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","Spree::Base at ./spec/models/spree/base_spec.rb..json_api_type example at ./spec/models/spree/base_spec.rb:51.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","Spree::Base at ./spec/models/spree/base_spec.rb.AR overrides does not disable non-spree, Rails 5 models to validate their associated belongs_to model.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","Spree::Base at ./spec/models/spree/base_spec.rb.AR overrides does not override Rails 5 default belongs_to_required_by_default.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::BaseAnalyticsEventHandler at ./spec/models/spree/base_analytics_event_handler_spec.rb.#client raises NotImplementedError.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::BaseAnalyticsEventHandler at ./spec/models/spree/base_analytics_event_handler_spec.rb.#event_human_name returns nil for unsupported events.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2\"}}","Spree::BaseAnalyticsEventHandler at ./spec/models/spree/base_analytics_event_handler_spec.rb.#event_human_name returns the label for supported events.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","Spree::BaseAnalyticsEventHandler at ./spec/models/spree/base_analytics_event_handler_spec.rb.#handle_event raises NotImplementedError.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","Spree::BaseAnalyticsEventHandler at ./spec/models/spree/base_analytics_event_handler_spec.rb.#identity_hash when user is not present returns hash with nil user_id, visitor_id and session_id.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1\"}}","Spree::BaseAnalyticsEventHandler at ./spec/models/spree/base_analytics_event_handler_spec.rb.#identity_hash when user is present returns hash with user_id, visitor_id and session_id.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:1\"}}","Spree::BaseAnalyticsEventHandler at ./spec/models/spree/base_analytics_event_handler_spec.rb.#initialize sets user, session and request.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","Spree::BaseHelper at ./spec/helpers/base_helper_spec.rb.#display_price when there is no current order returns the price including default vat.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1:1\"}}","Spree::BaseHelper at ./spec/helpers/base_helper_spec.rb.#display_price when there is no current order with a default VAT returns the price adding the VAT.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1:2:1\"}}","Spree::BaseHelper at ./spec/helpers/base_helper_spec.rb.#display_price with an order that has a tax zone that matches a VAT returns the price adding the VAT.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2:2:1\"}}","Spree::BaseHelper at ./spec/helpers/base_helper_spec.rb.#display_price with an order that has a tax zone that matches no VAT returns the price excluding VAT.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2:1:1\"}}","Spree::BaseHelper at ./spec/helpers/base_helper_spec.rb.#spree_favicon_path when a store has its own favicon example at ./spec/helpers/base_helper_spec.rb:324.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1:1\"}}","Spree::BaseHelper at ./spec/helpers/base_helper_spec.rb.#spree_favicon_path when a store has no favicon example at ./spec/helpers/base_helper_spec.rb:331.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:2:1\"}}","Spree::BaseHelper at ./spec/helpers/base_helper_spec.rb.#spree_storefront_resource_url for Product URL example at ./spec/helpers/base_helper_spec.rb:56.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","Spree::BaseHelper at ./spec/helpers/base_helper_spec.rb.#spree_storefront_resource_url for Product URL for product with custom domain returns the product url.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:6:1\"}}","Spree::BaseHelper at ./spec/helpers/base_helper_spec.rb.#spree_storefront_resource_url for Product URL for product with relative option returns the product url.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:7:1\"}}","Spree::BaseHelper at ./spec/helpers/base_helper_spec.rb.#spree_storefront_resource_url for Product URL when a locale is passed example at ./spec/helpers/base_helper_spec.rb:63.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:2:1\"}}","Spree::BaseHelper at ./spec/helpers/base_helper_spec.rb.#spree_storefront_resource_url for Product URL when locale_param is present example at ./spec/helpers/base_helper_spec.rb:71.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:3:1\"}}","Spree::BaseHelper at ./spec/helpers/base_helper_spec.rb.#spree_storefront_resource_url for Product URL when preview_id is not present returns the product url.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:4:1\"}}","Spree::BaseHelper at ./spec/helpers/base_helper_spec.rb.#spree_storefront_resource_url for Product URL when preview_id is present returns the product preview url.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:5:1\"}}","Spree::BaseHelper at ./spec/helpers/base_helper_spec.rb.#spree_storefront_resource_url for Taxon URL example at ./spec/helpers/base_helper_spec.rb:102.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","Spree::BaseHelper at ./spec/helpers/base_helper_spec.rb.#spree_storefront_resource_url for Taxon URL when a locale is passed example at ./spec/helpers/base_helper_spec.rb:105.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:2:1\"}}","Spree::BaseHelper at ./spec/helpers/base_helper_spec.rb.#spree_storefront_resource_url for Taxon URL when locale_param is present example at ./spec/helpers/base_helper_spec.rb:113.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:3:1\"}}","Spree::BaseHelper at ./spec/helpers/base_helper_spec.rb.available_countries with checkout zone assigned to the store return only the countries defined by the checkout_zone_id.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","Spree::BaseHelper at ./spec/helpers/base_helper_spec.rb.available_countries with no checkout zone defined return complete list of countries.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","Spree::BaseHelper at ./spec/helpers/base_helper_spec.rb.defining custom image helpers does not raise errors when helper method called.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3\"}}","Spree::BaseHelper at ./spec/helpers/base_helper_spec.rb.defining custom image helpers does not raise errors when style exists.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","Spree::BaseHelper at ./spec/helpers/base_helper_spec.rb.defining custom image helpers raises NoMethodError when statement with name equal to style name called.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4\"}}","Spree::BaseHelper at ./spec/helpers/base_helper_spec.rb.defining custom image helpers raises NoMethodError when style is not exists.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","Spree::BaseHelper at ./spec/helpers/base_helper_spec.rb.link_to_tracking returns nothing when no shipping method.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3\"}}","Spree::BaseHelper at ./spec/helpers/base_helper_spec.rb.link_to_tracking returns nothing when no tracking.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:4\"}}","Spree::BaseHelper at ./spec/helpers/base_helper_spec.rb.link_to_tracking returns tracking link if available.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","Spree::BaseHelper at ./spec/helpers/base_helper_spec.rb.link_to_tracking returns tracking without link if link unavailable.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2\"}}","Spree::BaseHelper at ./spec/helpers/base_helper_spec.rb.pretty_date prints in a format.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","Spree::BaseHelper at ./spec/helpers/base_helper_spec.rb.pretty_date return empty string when nil is supplied.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2\"}}","Spree::BaseHelper at ./spec/helpers/base_helper_spec.rb.pretty_time prints in a format.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","Spree::BaseHelper at ./spec/helpers/base_helper_spec.rb.pretty_time return empty string when nil is supplied.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2\"}}","Spree::BaseHelper at ./spec/helpers/base_helper_spec.rb.spree_base_cache_key when try_spree_current_user defined when admin user returns base cache key.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:1:1\"}}","Spree::BaseHelper at ./spec/helpers/base_helper_spec.rb.spree_base_cache_key when try_spree_current_user defined when spree_current_user is nil returns base cache key.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:3:1\"}}","Spree::BaseHelper at ./spec/helpers/base_helper_spec.rb.spree_base_cache_key when try_spree_current_user defined when user without admin role returns base cache key.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:2:1\"}}","Spree::BaseHelper at ./spec/helpers/base_helper_spec.rb.spree_base_cache_key when try_spree_current_user is undefined returns base cache key.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1\"}}","Spree::CSV::CustomerPresenter at ./spec/presenters/spree/csv/customer_presenter_spec.rb.#call returns array with correct values.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::CSV::CustomerPresenter at ./spec/presenters/spree/csv/customer_presenter_spec.rb.#call when customer does not accept email marketing returns say_no for email marketing.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","Spree::CSV::CustomerPresenter at ./spec/presenters/spree/csv/customer_presenter_spec.rb.#call when customer has no address returns nil for address fields.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","Spree::CSV::CustomerPresenter at ./spec/presenters/spree/csv/customer_presenter_spec.rb.#call when customer has no orders returns zero for total orders and amount spent.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1\"}}","Spree::CSV::CustomerPresenter at ./spec/presenters/spree/csv/customer_presenter_spec.rb.HEADERS constant contains all expected headers.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","Spree::CSV::CustomerPresenter at ./spec/presenters/spree/csv/customer_presenter_spec.rb.metafields includes metafield values at the end of the array.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","Spree::CSV::CustomerPresenter at ./spec/presenters/spree/csv/customer_presenter_spec.rb.metafields when customer has no metafield value returns nil for metafield.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","Spree::CSV::GiftCardPresenter at ./spec/presenters/spree/csv/gift_card_presenter_spec.rb.#call returns the correct CSV data.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::CSV::GiftCardPresenter at ./spec/presenters/spree/csv/gift_card_presenter_spec.rb.#call when gift card has no expiration date returns nil for expires at.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","Spree::CSV::GiftCardPresenter at ./spec/presenters/spree/csv/gift_card_presenter_spec.rb.#call when gift card has no user returns nil for customer fields.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","Spree::CSV::GiftCardPresenter at ./spec/presenters/spree/csv/gift_card_presenter_spec.rb.HEADERS has the correct headers.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","Spree::CSV::GiftCardPresenter at ./spec/presenters/spree/csv/gift_card_presenter_spec.rb.metafields includes metafield values at the end of the array.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","Spree::CSV::GiftCardPresenter at ./spec/presenters/spree/csv/gift_card_presenter_spec.rb.metafields when gift card has no metafield value returns nil for metafield.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","Spree::CSV::NewsletterSubscriberPresenter at ./spec/presenters/spree/csv/newsletter_subscriber_presenter_spec.rb.#call returns array with correct values.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::CSV::NewsletterSubscriberPresenter at ./spec/presenters/spree/csv/newsletter_subscriber_presenter_spec.rb.#call when subscriber has no user returns nil for customer name and id.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","Spree::CSV::NewsletterSubscriberPresenter at ./spec/presenters/spree/csv/newsletter_subscriber_presenter_spec.rb.#call when subscriber is not verified returns say_no for verified and nil for verified_at.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","Spree::CSV::NewsletterSubscriberPresenter at ./spec/presenters/spree/csv/newsletter_subscriber_presenter_spec.rb.HEADERS constant contains all expected headers.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","Spree::CSV::NewsletterSubscriberPresenter at ./spec/presenters/spree/csv/newsletter_subscriber_presenter_spec.rb.metafields includes metafield values at the end of the array.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","Spree::CSV::NewsletterSubscriberPresenter at ./spec/presenters/spree/csv/newsletter_subscriber_presenter_spec.rb.metafields when subscriber has no metafield value returns nil for metafield.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","Spree::CSV::OrderLineItemPresenter at ./spec/presenters/spree/csv/order_line_items_presenter_spec.rb.#call returns array with correct values.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::CSV::OrderLineItemPresenter at ./spec/presenters/spree/csv/order_line_items_presenter_spec.rb.#call when index is not zero returns line item specific fields.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2\"}}","Spree::CSV::OrderLineItemPresenter at ./spec/presenters/spree/csv/order_line_items_presenter_spec.rb.#call when index is not zero returns nil for order-level fields.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","Spree::CSV::OrderLineItemPresenter at ./spec/presenters/spree/csv/order_line_items_presenter_spec.rb.#format_date formats date according to store timezone.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","Spree::CSV::OrderLineItemPresenter at ./spec/presenters/spree/csv/order_line_items_presenter_spec.rb.#format_date returns nil for blank date.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","Spree::CSV::OrderLineItemPresenter at ./spec/presenters/spree/csv/order_line_items_presenter_spec.rb.#taxon_dict returns empty array for nil taxon.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","Spree::CSV::OrderLineItemPresenter at ./spec/presenters/spree/csv/order_line_items_presenter_spec.rb.#taxon_dict splits taxon pretty name into array.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","Spree::CSV::OrderLineItemPresenter at ./spec/presenters/spree/csv/order_line_items_presenter_spec.rb.metafields when index is not zero does not include metafields.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1\"}}","Spree::CSV::OrderLineItemPresenter at ./spec/presenters/spree/csv/order_line_items_presenter_spec.rb.metafields when index is zero includes metafields at the end of the array.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1\"}}","Spree::CSV::ProductVariantPresenter at ./spec/presenters/spree/csv/product_variant_presenter_spec.rb.#call images host when default host is set returns images with default host.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1:1\"}}","Spree::CSV::ProductVariantPresenter at ./spec/presenters/spree/csv/product_variant_presenter_spec.rb.#call images host when there is no default host returns images with the store url.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:2:1\"}}","Spree::CSV::ProductVariantPresenter at ./spec/presenters/spree/csv/product_variant_presenter_spec.rb.#call images host when there is no default host when custom domain is set returns images with the custom domain.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:2:2:1\"}}","Spree::CSV::ProductVariantPresenter at ./spec/presenters/spree/csv/product_variant_presenter_spec.rb.#call returns array with correct values.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::CSV::ProductVariantPresenter at ./spec/presenters/spree/csv/product_variant_presenter_spec.rb.#call when index is not zero returns nil for product-level fields.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","Spree::CSV::ProductVariantPresenter at ./spec/presenters/spree/csv/product_variant_presenter_spec.rb.#call when index is not zero returns variant specific fields.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2\"}}","Spree::CSV::ProductVariantPresenter at ./spec/presenters/spree/csv/product_variant_presenter_spec.rb.#option_type returns nil for non-existent index.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","Spree::CSV::ProductVariantPresenter at ./spec/presenters/spree/csv/product_variant_presenter_spec.rb.#option_type returns option type at given index.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","Spree::CSV::ProductVariantPresenter at ./spec/presenters/spree/csv/product_variant_presenter_spec.rb.#option_value returns nil for option type without value.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","Spree::CSV::ProductVariantPresenter at ./spec/presenters/spree/csv/product_variant_presenter_spec.rb.#option_value returns option value presentation for given option type.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","Spree::CSV::ProductVariantPresenter at ./spec/presenters/spree/csv/product_variant_presenter_spec.rb.metafields when index is not zero does not include metafields.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1\"}}","Spree::CSV::ProductVariantPresenter at ./spec/presenters/spree/csv/product_variant_presenter_spec.rb.metafields when index is zero includes metafields at the end of the array.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1\"}}","Spree::CSV::ProductVariantPresenter at ./spec/presenters/spree/csv/product_variant_presenter_spec.rb.shipping_category when product has no shipping category explicitly set exports the assigned shipping category.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1\"}}","Spree::CSV::ProductVariantPresenter at ./spec/presenters/spree/csv/product_variant_presenter_spec.rb.shipping_category when product has shipping category exports shipping category name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:1\"}}","Spree::CalculatedAdjustments at ./spec/lib/calculated_adjustments_spec.rb.adds has_one :calculator relationship.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","Spree::Calculator at ./spec/models/spree/calculator_spec.rb.with computable and compute methods stubbed out with a Spree::LineItem calls compute_line_item.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","Spree::Calculator at ./spec/models/spree/calculator_spec.rb.with computable and compute methods stubbed out with a Spree::Order calls compute_order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","Spree::Calculator at ./spec/models/spree/calculator_spec.rb.with computable and compute methods stubbed out with a Spree::Shipment calls compute_shipment.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:1\"}}","Spree::Calculator at ./spec/models/spree/calculator_spec.rb.with computable and compute methods stubbed out with a arbitrary object calls the correct compute.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:4:1\"}}","Spree::Calculator at ./spec/models/spree/calculator_spec.rb.with computable with no stubbing with a Spree::LineItem raises NotImplementedError.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1:1\"}}","Spree::Calculator at ./spec/models/spree/calculator_spec.rb.with computable with no stubbing with a Spree::Order raises NotImplementedError.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:1\"}}","Spree::Calculator at ./spec/models/spree/calculator_spec.rb.with computable with no stubbing with a Spree::Shipment raises NotImplementedError.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:3:1\"}}","Spree::Calculator at ./spec/models/spree/calculator_spec.rb.with computable with no stubbing with a arbitrary object raises NotImplementedError.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:4:1\"}}","Spree::Calculator::DefaultTax at ./spec/models/spree/calculator/default_tax_spec.rb.#compute when given a shipment is 5% of 15.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1\"}}","Spree::Calculator::DefaultTax at ./spec/models/spree/calculator/default_tax_spec.rb.#compute when given a shipment takes discounts into consideration.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:2\"}}","Spree::Calculator::DefaultTax at ./spec/models/spree/calculator/default_tax_spec.rb.#compute when given an order when more than one item matches the tax category is equal to the sum of the item totals * rate.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:1\"}}","Spree::Calculator::DefaultTax at ./spec/models/spree/calculator/default_tax_spec.rb.#compute when given an order when no line items match the tax category is 0.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","Spree::Calculator::DefaultTax at ./spec/models/spree/calculator/default_tax_spec.rb.#compute when given an order when one item matches the tax category correctly rounds to within two decimal places example at ./spec/models/spree/calculator/default_tax_spec.rb:50.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:2:1\"}}","Spree::Calculator::DefaultTax at ./spec/models/spree/calculator/default_tax_spec.rb.#compute when given an order when one item matches the tax category is equal to the item total * rate.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","Spree::Calculator::DefaultTax at ./spec/models/spree/calculator/default_tax_spec.rb.#compute when given an order when tax is included in price will return the deducted amount from the totals.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:4:1\"}}","Spree::Calculator::DefaultTax at ./spec/models/spree/calculator/default_tax_spec.rb.#compute when tax is included in price when the variant matches the tax category is equal to the item's full price * rate.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1:2\"}}","Spree::Calculator::DefaultTax at ./spec/models/spree/calculator/default_tax_spec.rb.#compute when tax is included in price when the variant matches the tax category when line item is discounted is equal to the item's discounted total * rate.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1:1:1\"}}","Spree::Calculator::DefaultTax at ./spec/models/spree/calculator/default_tax_spec.rb.#compute when tax is not included in price when the line item is discounted is equal to the item's pre-tax total * rate.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1:1\"}}","Spree::Calculator::DefaultTax at ./spec/models/spree/calculator/default_tax_spec.rb.#compute when tax is not included in price when the variant matches the tax category is equal to the item pre-tax total * rate.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:2:1\"}}","Spree::Calculator::DefaultTax at ./spec/models/spree/calculator/default_tax_spec.rb.when given a line_item #compute_line_item computes the line item right.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","Spree::Calculator::DefaultTax at ./spec/models/spree/calculator/default_tax_spec.rb.when given a line_item #compute_line_item with a 40$ promo computes the line item right.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:2:1\"}}","Spree::Calculator::FlatPercentItemTotal at ./spec/models/spree/calculator/flat_percent_item_total_spec.rb.compute returns object.amount if computed amount is greater.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","Spree::Calculator::FlatPercentItemTotal at ./spec/models/spree/calculator/flat_percent_item_total_spec.rb.compute rounds result correctly.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::Calculator::FlatRate at ./spec/models/spree/calculator/flat_rate_spec.rb.#compute behaves like computing amount correctly computes the amount as 0 when currency does not match the line_item's currency.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2\"}}","Spree::Calculator::FlatRate at ./spec/models/spree/calculator/flat_rate_spec.rb.#compute behaves like computing amount correctly computes the amount as 0 when currency is blank.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:3\"}}","Spree::Calculator::FlatRate at ./spec/models/spree/calculator/flat_rate_spec.rb.#compute behaves like computing amount correctly computes the amount as 0 when there is no object.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:5\"}}","Spree::Calculator::FlatRate at ./spec/models/spree/calculator/flat_rate_spec.rb.#compute behaves like computing amount correctly computes the amount as the rate when currency matches the line_item's currency.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","Spree::Calculator::FlatRate at ./spec/models/spree/calculator/flat_rate_spec.rb.#compute behaves like computing amount correctly computes the amount as the rate when the currencies use different casing.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:4\"}}","Spree::Calculator::FlatRate at ./spec/models/spree/calculator/flat_rate_spec.rb.#compute example at ./spec/models/spree/calculator/flat_rate_spec.rb:10.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::Calculator::FlatRate at ./spec/models/spree/calculator/flat_rate_spec.rb.#compute when apply_only_on_full_priced_items is true when line item does not have compare at price behaves like computing amount correctly computes the amount as 0 when currency does not match the line_item's currency.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:2:1:2\"}}","Spree::Calculator::FlatRate at ./spec/models/spree/calculator/flat_rate_spec.rb.#compute when apply_only_on_full_priced_items is true when line item does not have compare at price behaves like computing amount correctly computes the amount as 0 when currency is blank.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:2:1:3\"}}","Spree::Calculator::FlatRate at ./spec/models/spree/calculator/flat_rate_spec.rb.#compute when apply_only_on_full_priced_items is true when line item does not have compare at price behaves like computing amount correctly computes the amount as 0 when there is no object.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:2:1:5\"}}","Spree::Calculator::FlatRate at ./spec/models/spree/calculator/flat_rate_spec.rb.#compute when apply_only_on_full_priced_items is true when line item does not have compare at price behaves like computing amount correctly computes the amount as the rate when currency matches the line_item's currency.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:2:1:1\"}}","Spree::Calculator::FlatRate at ./spec/models/spree/calculator/flat_rate_spec.rb.#compute when apply_only_on_full_priced_items is true when line item does not have compare at price behaves like computing amount correctly computes the amount as the rate when the currencies use different casing.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:2:1:4\"}}","Spree::Calculator::FlatRate at ./spec/models/spree/calculator/flat_rate_spec.rb.#compute when apply_only_on_full_priced_items is true when line item has compare at price returns 0.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1:1\"}}","Spree::Calculator::FlexiRate at ./spec/models/spree/calculator/flexi_rate_spec.rb.#compute example at ./spec/models/spree/calculator/flexi_rate_spec.rb:10.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::Calculator::FlexiRate at ./spec/models/spree/calculator/flexi_rate_spec.rb.#compute when apply_only_on_full_priced_items is true behaves like computes amount correctly allows creation of new object with all the attributes.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:6\"}}","Spree::Calculator::FlexiRate at ./spec/models/spree/calculator/flexi_rate_spec.rb.#compute when apply_only_on_full_priced_items is true behaves like computes amount correctly computes amount correctly when additional_items and first_item have values AND max items has value.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:5\"}}","Spree::Calculator::FlexiRate at ./spec/models/spree/calculator/flexi_rate_spec.rb.#compute when apply_only_on_full_priced_items is true behaves like computes amount correctly computes amount correctly when additional_items and first_item have values.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:4\"}}","Spree::Calculator::FlexiRate at ./spec/models/spree/calculator/flexi_rate_spec.rb.#compute when apply_only_on_full_priced_items is true behaves like computes amount correctly computes amount correctly when additional_items has a value.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:3\"}}","Spree::Calculator::FlexiRate at ./spec/models/spree/calculator/flexi_rate_spec.rb.#compute when apply_only_on_full_priced_items is true behaves like computes amount correctly computes amount correctly when all fees are 0.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:1\"}}","Spree::Calculator::FlexiRate at ./spec/models/spree/calculator/flexi_rate_spec.rb.#compute when apply_only_on_full_priced_items is true behaves like computes amount correctly computes amount correctly when first_item has a value.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:2\"}}","Spree::Calculator::FlexiRate at ./spec/models/spree/calculator/flexi_rate_spec.rb.#compute when apply_only_on_full_priced_items is true returns 0.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","Spree::Calculator::PercentOnLineItem at ./spec/models/spree/calculator/percent_on_line_item_spec.rb.#compute behaves like computing amount correctly returns object.amount if computed amount is greater.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2\"}}","Spree::Calculator::PercentOnLineItem at ./spec/models/spree/calculator/percent_on_line_item_spec.rb.#compute behaves like computing amount correctly rounds result correctly.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","Spree::Calculator::PercentOnLineItem at ./spec/models/spree/calculator/percent_on_line_item_spec.rb.#compute example at ./spec/models/spree/calculator/percent_on_line_item_spec.rb:10.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::Calculator::PercentOnLineItem at ./spec/models/spree/calculator/percent_on_line_item_spec.rb.#compute when apply_only_on_full_priced_items preference is true when line item does not have a compare at price behaves like computing amount correctly returns object.amount if computed amount is greater.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:2:1:2\"}}","Spree::Calculator::PercentOnLineItem at ./spec/models/spree/calculator/percent_on_line_item_spec.rb.#compute when apply_only_on_full_priced_items preference is true when line item does not have a compare at price behaves like computing amount correctly rounds result correctly.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:2:1:1\"}}","Spree::Calculator::PercentOnLineItem at ./spec/models/spree/calculator/percent_on_line_item_spec.rb.#compute when apply_only_on_full_priced_items preference is true when line item has a compare at price returns 0.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1:1\"}}","Spree::Calculator::PriceSack at ./spec/models/spree/calculator/price_sack_spec.rb.computes the correct amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3\"}}","Spree::Calculator::PriceSack at ./spec/models/spree/calculator/price_sack_spec.rb.computes with a shipment object.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2\"}}","Spree::Calculator::PriceSack at ./spec/models/spree/calculator/price_sack_spec.rb.computes with an order object.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","Spree::Calculator::Returns::DefaultRefundAmount at ./spec/models/spree/calculator/refunds/default_refund_amount_spec.rb.an exchange example at ./spec/models/spree/calculator/refunds/default_refund_amount_spec.rb:45.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","Spree::Calculator::Returns::DefaultRefundAmount at ./spec/models/spree/calculator/refunds/default_refund_amount_spec.rb.not an exchange no promotions or taxes example at ./spec/models/spree/calculator/refunds/default_refund_amount_spec.rb:19.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","Spree::Calculator::Returns::DefaultRefundAmount at ./spec/models/spree/calculator/refunds/default_refund_amount_spec.rb.not an exchange order adjustments example at ./spec/models/spree/calculator/refunds/default_refund_amount_spec.rb:30.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","Spree::Calculator::Returns::DefaultRefundAmount at ./spec/models/spree/calculator/refunds/default_refund_amount_spec.rb.not an exchange shipping adjustments example at ./spec/models/spree/calculator/refunds/default_refund_amount_spec.rb:38.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","Spree::Calculator::Shipping::DigitalDelivery at ./spec/models/spree/calculator/shipping/digital_delivery_spec.rb.#available? returns false for a mixed order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","Spree::Calculator::Shipping::DigitalDelivery at ./spec/models/spree/calculator/shipping/digital_delivery_spec.rb.#available? returns false for an exclusively non-digital order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3\"}}","Spree::Calculator::Shipping::DigitalDelivery at ./spec/models/spree/calculator/shipping/digital_delivery_spec.rb.#available? returns true for a digital order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","Spree::Calculator::Shipping::DigitalDelivery at ./spec/models/spree/calculator/shipping/digital_delivery_spec.rb.#compute_package alwayses return the preferred_amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","Spree::Calculator::Shipping::DigitalDelivery at ./spec/models/spree/calculator/shipping/digital_delivery_spec.rb.#compute_package ignores the passed in object.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","Spree::Calculator::Shipping::DigitalDelivery at ./spec/models/spree/calculator/shipping/digital_delivery_spec.rb.has a description for the class.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","Spree::Calculator::Shipping::FlatPercentItemTotal at ./spec/models/spree/calculator/shipping/flat_percent_item_total_spec.rb.rounds result correctly.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","Spree::Calculator::Shipping::FlatRate at ./spec/models/spree/calculator/shipping/flat_rate_spec.rb.with both weight and price constraints returns amount based on the contents weight and price.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","Spree::Calculator::Shipping::FlatRate at ./spec/models/spree/calculator/shipping/flat_rate_spec.rb.with price constraints returns amount based on the contents weight.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","Spree::Calculator::Shipping::FlatRate at ./spec/models/spree/calculator/shipping/flat_rate_spec.rb.with weight constraints returns amount based on the contents item total.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","Spree::Calculator::Shipping::FlatRate at ./spec/models/spree/calculator/shipping/flat_rate_spec.rb.without any constraints returns the amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::Calculator::Shipping::FlexiRate at ./spec/models/spree/calculator/shipping/flexi_rate_spec.rb.compute allows creation of new object with all the attributes.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","Spree::Calculator::Shipping::FlexiRate at ./spec/models/spree/calculator/shipping/flexi_rate_spec.rb.compute computes amount correctly when additional_items and first_item have values AND max items has value.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","Spree::Calculator::Shipping::FlexiRate at ./spec/models/spree/calculator/shipping/flexi_rate_spec.rb.compute computes amount correctly when additional_items and first_item have values.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","Spree::Calculator::Shipping::FlexiRate at ./spec/models/spree/calculator/shipping/flexi_rate_spec.rb.compute computes amount correctly when additional_items has a value.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","Spree::Calculator::Shipping::FlexiRate at ./spec/models/spree/calculator/shipping/flexi_rate_spec.rb.compute computes amount correctly when all fees are 0.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::Calculator::Shipping::FlexiRate at ./spec/models/spree/calculator/shipping/flexi_rate_spec.rb.compute computes amount correctly when first_item has a value.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","Spree::Calculator::Shipping::PerItem at ./spec/models/spree/calculator/shipping/per_item_spec.rb.correctly calculates per item shipping.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","Spree::Calculator::Shipping::PriceSack at ./spec/models/spree/calculator/shipping/price_sack_spec.rb.computes the correct amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","Spree::Calculator::TieredFlatRate at ./spec/models/spree/calculator/tiered_flat_rate_spec.rb.#compute when amount falls within the first tier example at ./spec/models/spree/calculator/tiered_flat_rate_spec.rb:40.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","Spree::Calculator::TieredFlatRate at ./spec/models/spree/calculator/tiered_flat_rate_spec.rb.#compute when amount falls within the second tier example at ./spec/models/spree/calculator/tiered_flat_rate_spec.rb:46.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","Spree::Calculator::TieredFlatRate at ./spec/models/spree/calculator/tiered_flat_rate_spec.rb.#valid? when tiers is a hash and one of the keys is not a positive number example at ./spec/models/spree/calculator/tiered_flat_rate_spec.rb:19.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1:1\"}}","Spree::Calculator::TieredFlatRate at ./spec/models/spree/calculator/tiered_flat_rate_spec.rb.#valid? when tiers is not a hash example at ./spec/models/spree/calculator/tiered_flat_rate_spec.rb:12.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","Spree::Calculator::TieredPercent at ./spec/models/spree/calculator/tiered_percent_spec.rb.#compute when amount falls within the first tier example at ./spec/models/spree/calculator/tiered_percent_spec.rb:58.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","Spree::Calculator::TieredPercent at ./spec/models/spree/calculator/tiered_percent_spec.rb.#compute when amount falls within the second tier example at ./spec/models/spree/calculator/tiered_percent_spec.rb:64.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","Spree::Calculator::TieredPercent at ./spec/models/spree/calculator/tiered_percent_spec.rb.#valid? when base percent is greater than 100 example at ./spec/models/spree/calculator/tiered_percent_spec.rb:18.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","Spree::Calculator::TieredPercent at ./spec/models/spree/calculator/tiered_percent_spec.rb.#valid? when base percent is less than zero example at ./spec/models/spree/calculator/tiered_percent_spec.rb:12.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","Spree::Calculator::TieredPercent at ./spec/models/spree/calculator/tiered_percent_spec.rb.#valid? when tiers is a hash and one of the keys is not a positive number example at ./spec/models/spree/calculator/tiered_percent_spec.rb:31.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1:1\"}}","Spree::Calculator::TieredPercent at ./spec/models/spree/calculator/tiered_percent_spec.rb.#valid? when tiers is a hash and one of the values is not a percent example at ./spec/models/spree/calculator/tiered_percent_spec.rb:37.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:2:1\"}}","Spree::Calculator::TieredPercent at ./spec/models/spree/calculator/tiered_percent_spec.rb.#valid? when tiers is not a hash example at ./spec/models/spree/calculator/tiered_percent_spec.rb:24.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","Spree::Cart::AddItem at ./spec/services/spree/cart/add_item_spec.rb.add line item to order change by one and recalculate amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::Cart::AddItem at ./spec/services/spree/cart/add_item_spec.rb.not given a shipment ensures updated shipments.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","Spree::Cart::AddItem at ./spec/services/spree/cart/add_item_spec.rb.pass invalid arguments different quantity in argument and in options take value from options.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1:1\"}}","Spree::Cart::AddItem at ./spec/services/spree/cart/add_item_spec.rb.pass invalid arguments different quantity no quantity in argument and in params set default.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2:1\"}}","Spree::Cart::AddItem at ./spec/services/spree/cart/add_item_spec.rb.pass invalid arguments not permitted example at ./spec/services/spree/cart/add_item_spec.rb:171.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:3:1\"}}","Spree::Cart::AddItem at ./spec/services/spree/cart/add_item_spec.rb.pass invalid arguments pass non-existing variant example at ./spec/services/spree/cart/add_item_spec.rb:184.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:4:1\"}}","Spree::Cart::AddItem at ./spec/services/spree/cart/add_item_spec.rb.pass invalid arguments variant has been descontinued example at ./spec/services/spree/cart/add_item_spec.rb:207.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:6:1\"}}","Spree::Cart::AddItem at ./spec/services/spree/cart/add_item_spec.rb.pass invalid arguments variant have not desired quantity example at ./spec/services/spree/cart/add_item_spec.rb:196.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:5:1\"}}","Spree::Cart::AddItem at ./spec/services/spree/cart/add_item_spec.rb.pass valid params hash in options example at ./spec/services/spree/cart/add_item_spec.rb:136.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","Spree::Cart::AddItem at ./spec/services/spree/cart/add_item_spec.rb.running promotions VAT for variant with percent promotion updates included_tax_total after adding two line items.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:3:2\"}}","Spree::Cart::AddItem at ./spec/services/spree/cart/add_item_spec.rb.running promotions VAT for variant with percent promotion updates included_tax_total.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:3:1\"}}","Spree::Cart::AddItem at ./spec/services/spree/cart/add_item_spec.rb.running promotions one active line item promotion creates valid discount on order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2:1\"}}","Spree::Cart::AddItem at ./spec/services/spree/cart/add_item_spec.rb.running promotions one active order promotion creates valid discount on order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1:1\"}}","Spree::Cart::AddItem at ./spec/services/spree/cart/add_item_spec.rb.setting metadata private metadata example at ./spec/services/spree/cart/add_item_spec.rb:221.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1:1\"}}","Spree::Cart::AddItem at ./spec/services/spree/cart/add_item_spec.rb.setting metadata public metadata example at ./spec/services/spree/cart/add_item_spec.rb:229.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:2:1\"}}","Spree::Cart::AddItem at ./spec/services/spree/cart/add_item_spec.rb.when variant has price in the cart currency, but with amount set to nil does not add the item and raises error.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1\"}}","Spree::Cart::AddItem at ./spec/services/spree/cart/add_item_spec.rb.with given shipment ensure shipment calls update_amounts instead of order calling ensure_updated_shipments.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","Spree::Cart::AddItem at ./spec/services/spree/cart/add_item_spec.rb.with same line item not to add.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","Spree::Cart::AddItem at ./spec/services/spree/cart/add_item_spec.rb.with store_credits payment example at ./spec/services/spree/cart/add_item_spec.rb:62.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","Spree::Cart::Associate at ./spec/services/spree/cart/associate_spec.rb.when already assigned order is given returns failure.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","Spree::Cart::Associate at ./spec/services/spree/cart/associate_spec.rb.when guest order is given assigns order to user.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::Cart::ChangeCurrency at ./spec/services/spree/cart/change_currency_spec.rb.when switching to a supported currency when product has a price in given currency changes order and line items currency.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","Spree::Cart::ChangeCurrency at ./spec/services/spree/cart/change_currency_spec.rb.when switching to a supported currency when product has a price in given currency removes the shipment and restarts the checkout flow.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2\"}}","Spree::Cart::ChangeCurrency at ./spec/services/spree/cart/change_currency_spec.rb.when switching to a supported currency when product has a price in given currency when the order has no shipment does not restart the checkout flow.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:1\"}}","Spree::Cart::ChangeCurrency at ./spec/services/spree/cart/change_currency_spec.rb.when switching to an unsupported currency returns failure.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","Spree::Cart::ChangeCurrency at ./spec/services/spree/cart/change_currency_spec.rb.when there are items that are not available in the new currency removes them from the Cart.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","Spree::Cart::Create at ./spec/services/spree/cart/create_spec.rb.create an order example at ./spec/services/spree/cart/create_spec.rb:18.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::Cart::Create at ./spec/services/spree/cart/create_spec.rb.create an order with store currency example at ./spec/services/spree/cart/create_spec.rb:48.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","Spree::Cart::Create at ./spec/services/spree/cart/create_spec.rb.create an order with store in params example at ./spec/services/spree/cart/create_spec.rb:32.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","Spree::Cart::Create at ./spec/services/spree/cart/create_spec.rb.returns failure when no store is passed example at ./spec/services/spree/cart/create_spec.rb:64.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","Spree::Cart::Destroy at ./spec/services/spree/cart/destroy_spec.rb.when nil is given returns failure.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","Spree::Cart::Destroy at ./spec/services/spree/cart/destroy_spec.rb.when order is given when can be destroyed cancel not shipped shipments.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3\"}}","Spree::Cart::Destroy at ./spec/services/spree/cart/destroy_spec.rb.when order is given when can be destroyed destroys line_items, addresses, shipments and payments.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:5\"}}","Spree::Cart::Destroy at ./spec/services/spree/cart/destroy_spec.rb.when order is given when can be destroyed destroys the order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:4\"}}","Spree::Cart::Destroy at ./spec/services/spree/cart/destroy_spec.rb.when order is given when can be destroyed returns success.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","Spree::Cart::Destroy at ./spec/services/spree/cart/destroy_spec.rb.when order is given when can be destroyed voids pending payments.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2\"}}","Spree::Cart::Destroy at ./spec/services/spree/cart/destroy_spec.rb.when order is given when can be destroyed when addresses are assigned to other orders destroys line_items, shipments and payments, but keeps addresses.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:6:2\"}}","Spree::Cart::Destroy at ./spec/services/spree/cart/destroy_spec.rb.when order is given when can be destroyed when addresses are assigned to other orders destroys the order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:6:1\"}}","Spree::Cart::Destroy at ./spec/services/spree/cart/destroy_spec.rb.when order is given when can be destroyed when empty service is called first destroys the order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:7:1\"}}","Spree::Cart::Destroy at ./spec/services/spree/cart/destroy_spec.rb.when order is given when cannot be destroyed returns failure.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","Spree::Cart::Empty at ./spec/services/spree/cart/empty_spec.rb.when nil is given returns failure.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","Spree::Cart::Empty at ./spec/services/spree/cart/empty_spec.rb.when order is given completed order returns failure.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","Spree::Cart::Empty at ./spec/services/spree/cart/empty_spec.rb.when order is given incomplete order clears out line items, adjustments and update totals.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2\"}}","Spree::Cart::Empty at ./spec/services/spree/cart/empty_spec.rb.when order is given incomplete order returns success.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","Spree::Cart::RemoveItem at ./spec/services/spree/cart/remove_item_spec.rb.given a shipment ensure shipment calls update_amounts instead of order calling ensure_updated_shipments.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","Spree::Cart::RemoveItem at ./spec/services/spree/cart/remove_item_spec.rb.line items with more than one quantity remove quantity from line item.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","Spree::Cart::RemoveItem at ./spec/services/spree/cart/remove_item_spec.rb.not given a shipment ensures updated shipments.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","Spree::Cart::RemoveItem at ./spec/services/spree/cart/remove_item_spec.rb.raise error when try remove non existing item.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","Spree::Cart::RemoveItem at ./spec/services/spree/cart/remove_item_spec.rb.single line item remove item from order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::Cart::RemoveItem at ./spec/services/spree/cart/remove_item_spec.rb.when store_credits payment example at ./spec/services/spree/cart/remove_item_spec.rb:72.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","Spree::Cart::RemoveLineItem at ./spec/services/spree/cart/remove_line_item_spec.rb.given a shipment ensure shipment calls update_amounts instead of order calling ensure_updated_shipments.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","Spree::Cart::RemoveLineItem at ./spec/services/spree/cart/remove_line_item_spec.rb.not given a shipment ensures updated shipments.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","Spree::Cart::RemoveLineItem at ./spec/services/spree/cart/remove_line_item_spec.rb.remove line item with any quantity with any quantity.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","Spree::Cart::RemoveLineItem at ./spec/services/spree/cart/remove_line_item_spec.rb.remove line item with many unique items from order with many unique items.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","Spree::Cart::RemoveOutOfStockItems at ./spec/services/spree/cart/remove_out_of_stock_items_spec.rb.evaluate service to success.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","Spree::Cart::RemoveOutOfStockItems at ./spec/services/spree/cart/remove_out_of_stock_items_spec.rb.removes line item and render discontinued flash message.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2\"}}","Spree::Cart::RemoveOutOfStockItems at ./spec/services/spree/cart/remove_out_of_stock_items_spec.rb.removes line item and render out of stock flash message.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3\"}}","Spree::Cart::RemoveOutOfStockItems at ./spec/services/spree/cart/remove_out_of_stock_items_spec.rb.renders discontinued flash message when a variant is discontinued.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6\"}}","Spree::Cart::RemoveOutOfStockItems at ./spec/services/spree/cart/remove_out_of_stock_items_spec.rb.renders discontinued flash message when line item is deleted.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4\"}}","Spree::Cart::RemoveOutOfStockItems at ./spec/services/spree/cart/remove_out_of_stock_items_spec.rb.renders discontinued flash message when line item is discontinued.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5\"}}","Spree::Cart::SetQuantity at ./spec/services/spree/cart/set_quantity_spec.rb.with backorderable item returns successful result.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","Spree::Cart::SetQuantity at ./spec/services/spree/cart/set_quantity_spec.rb.with non-backorderable item with insufficient stock quantity return result with success equal false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","Spree::Cart::SetQuantity at ./spec/services/spree/cart/set_quantity_spec.rb.with non-backorderable item with sufficient stock quantity returns successful result.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","Spree::Checkout::AddStoreCredit at ./spec/services/spree/checkout/add_store_credit_spec.rb.#call the available store credit is not enough to pay for the entire order creates a store credit payment for the available amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","Spree::Checkout::AddStoreCredit at ./spec/services/spree/checkout/add_store_credit_spec.rb.#call there are multiple store credits uses the primary store credit type over the secondary.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1\"}}","Spree::Checkout::AddStoreCredit at ./spec/services/spree/checkout/add_store_credit_spec.rb.#call there is enough store credit to pay for the entire order with no amount specified creates a store credit payment for the full amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1:1\"}}","Spree::Checkout::AddStoreCredit at ./spec/services/spree/checkout/add_store_credit_spec.rb.#call there is enough store credit to pay for the entire order with store credit amount specified creates a store credit payment for the specified amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:1\"}}","Spree::Checkout::AddStoreCredit at ./spec/services/spree/checkout/add_store_credit_spec.rb.#call there is no store credit does not create a store credit payment.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","Spree::Checkout::AddStoreCredit at ./spec/services/spree/checkout/add_store_credit_spec.rb.#call there is no store credit returns error.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2\"}}","Spree::Checkout::Advance at ./spec/services/spree/checkout/advance_spec.rb.#call when next service fails returns failure result.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1\"}}","Spree::Checkout::Advance at ./spec/services/spree/checkout/advance_spec.rb.#call when order is complete stops advancement.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5:1\"}}","Spree::Checkout::Advance at ./spec/services/spree/checkout/advance_spec.rb.#call with no specific target state advances the order until it cannot proceed further.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","Spree::Checkout::Advance at ./spec/services/spree/checkout/advance_spec.rb.#call with no specific target state updates order states after advancement.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2\"}}","Spree::Checkout::Advance at ./spec/services/spree/checkout/advance_spec.rb.#call with no specific target state when no transition has been made responds with an error.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:1\"}}","Spree::Checkout::Advance at ./spec/services/spree/checkout/advance_spec.rb.#call with shipping method selection on shipping method failure keeps the old shipping method.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:2:1\"}}","Spree::Checkout::Advance at ./spec/services/spree/checkout/advance_spec.rb.#call with shipping method selection updates shipping method during advancement.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","Spree::Checkout::Advance at ./spec/services/spree/checkout/advance_spec.rb.#call with specific target state advances the order to target state.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:3\"}}","Spree::Checkout::Advance at ./spec/services/spree/checkout/advance_spec.rb.#call with specific target state returns failure for invalid state.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","Spree::Checkout::Advance at ./spec/services/spree/checkout/advance_spec.rb.#call with specific target state returns success if order already passed target state.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2\"}}","Spree::Checkout::Advance at ./spec/services/spree/checkout/advance_spec.rb.#call with specific target state when unable to reach the targeted state responds with an error.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:4:1\"}}","Spree::Checkout::GetShippingRates at ./spec/services/spree/checkout/get_shipping_rates_spec.rb.with line items and shipping address with already present shipments behaves like applies standard shipping costs for shipment.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:2:1\"}}","Spree::Checkout::GetShippingRates at ./spec/services/spree/checkout/get_shipping_rates_spec.rb.with line items and shipping address with already present shipments behaves like applies standard shipping costs updates shipment total.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:2:2\"}}","Spree::Checkout::GetShippingRates at ./spec/services/spree/checkout/get_shipping_rates_spec.rb.with line items and shipping address with already present shipments behaves like generates shipping rates doesn't update checkout state.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1:2\"}}","Spree::Checkout::GetShippingRates at ./spec/services/spree/checkout/get_shipping_rates_spec.rb.with line items and shipping address with already present shipments behaves like generates shipping rates returns shipping rates.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1:1\"}}","Spree::Checkout::GetShippingRates at ./spec/services/spree/checkout/get_shipping_rates_spec.rb.with line items and shipping address with already present shipments replaces current shipments with new ones.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:3\"}}","Spree::Checkout::GetShippingRates at ./spec/services/spree/checkout/get_shipping_rates_spec.rb.with line items and shipping address with free shipping promotion applies promotion.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3:1\"}}","Spree::Checkout::GetShippingRates at ./spec/services/spree/checkout/get_shipping_rates_spec.rb.with line items and shipping address without shipments behaves like applies standard shipping costs for shipment.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:2:1\"}}","Spree::Checkout::GetShippingRates at ./spec/services/spree/checkout/get_shipping_rates_spec.rb.with line items and shipping address without shipments behaves like applies standard shipping costs updates shipment total.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:2:2\"}}","Spree::Checkout::GetShippingRates at ./spec/services/spree/checkout/get_shipping_rates_spec.rb.with line items and shipping address without shipments behaves like generates shipping rates doesn't update checkout state.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1:2\"}}","Spree::Checkout::GetShippingRates at ./spec/services/spree/checkout/get_shipping_rates_spec.rb.with line items and shipping address without shipments behaves like generates shipping rates returns shipping rates.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1:1\"}}","Spree::Checkout::GetShippingRates at ./spec/services/spree/checkout/get_shipping_rates_spec.rb.without line items behaves like failure doesn't generate shipping rates.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:2\"}}","Spree::Checkout::GetShippingRates at ./spec/services/spree/checkout/get_shipping_rates_spec.rb.without line items behaves like failure returns error.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","Spree::Checkout::GetShippingRates at ./spec/services/spree/checkout/get_shipping_rates_spec.rb.without shipping address behaves like failure doesn't generate shipping rates.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2\"}}","Spree::Checkout::GetShippingRates at ./spec/services/spree/checkout/get_shipping_rates_spec.rb.without shipping address behaves like failure returns error.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","Spree::Checkout::RemoveStoreCredit at ./spec/services/spree/checkout/remove_store_credit_spec.rb.#call when order is complete example at ./spec/services/spree/checkout/remove_store_credit_spec.rb:32.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","Spree::Checkout::RemoveStoreCredit at ./spec/services/spree/checkout/remove_store_credit_spec.rb.#call when order is not complete example at ./spec/services/spree/checkout/remove_store_credit_spec.rb:19.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","Spree::Checkout::RemoveStoreCredit at ./spec/services/spree/checkout/remove_store_credit_spec.rb.#call when order is not complete example at ./spec/services/spree/checkout/remove_store_credit_spec.rb:20.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2\"}}","Spree::Checkout::SelectShippingMethod at ./spec/services/spree/checkout/select_shipping_method_spec.rb.multiple shipments update all shipments example at ./spec/services/spree/checkout/select_shipping_method_spec.rb:110.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","Spree::Checkout::SelectShippingMethod at ./spec/services/spree/checkout/select_shipping_method_spec.rb.multiple shipments update all shipments sets selected shipping method for all shipments.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:2\"}}","Spree::Checkout::SelectShippingMethod at ./spec/services/spree/checkout/select_shipping_method_spec.rb.multiple shipments update selected shipment example at ./spec/services/spree/checkout/select_shipping_method_spec.rb:97.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","Spree::Checkout::SelectShippingMethod at ./spec/services/spree/checkout/select_shipping_method_spec.rb.multiple shipments update selected shipment sets selected shipping method for the specified shipment.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:2\"}}","Spree::Checkout::SelectShippingMethod at ./spec/services/spree/checkout/select_shipping_method_spec.rb.one shipment missing shipping method example at ./spec/services/spree/checkout/select_shipping_method_spec.rb:71.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","Spree::Checkout::SelectShippingMethod at ./spec/services/spree/checkout/select_shipping_method_spec.rb.one shipment missing shipping method example at ./spec/services/spree/checkout/select_shipping_method_spec.rb:72.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2\"}}","Spree::Checkout::SelectShippingMethod at ./spec/services/spree/checkout/select_shipping_method_spec.rb.one shipment missing shipping method example at ./spec/services/spree/checkout/select_shipping_method_spec.rb:73.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:3\"}}","Spree::Checkout::SelectShippingMethod at ./spec/services/spree/checkout/select_shipping_method_spec.rb.one shipment valid shipping method example at ./spec/services/spree/checkout/select_shipping_method_spec.rb:53.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","Spree::Checkout::SelectShippingMethod at ./spec/services/spree/checkout/select_shipping_method_spec.rb.one shipment valid shipping method example at ./spec/services/spree/checkout/select_shipping_method_spec.rb:54.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2\"}}","Spree::Checkout::SelectShippingMethod at ./spec/services/spree/checkout/select_shipping_method_spec.rb.one shipment valid shipping method example at ./spec/services/spree/checkout/select_shipping_method_spec.rb:55.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3\"}}","Spree::Checkout::SelectShippingMethod at ./spec/services/spree/checkout/select_shipping_method_spec.rb.one shipment valid shipping method sets selected shipping method for shipment.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:4\"}}","Spree::Checkout::Update at ./spec/services/spree/checkout/update_spec.rb.#transform_address_params with bill_address order params will return hash contain country_id.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","Spree::Checkout::Update at ./spec/services/spree/checkout/update_spec.rb.#transform_address_params with bill_address order params will return hash without country_iso.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2\"}}","Spree::Checkout::Update at ./spec/services/spree/checkout/update_spec.rb.#transform_address_params with ship_address order params will return hash contain country_id.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","Spree::Checkout::Update at ./spec/services/spree/checkout/update_spec.rb.#transform_address_params with ship_address order params will return hash without country_iso.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2\"}}","Spree::Checkout::Update at ./spec/services/spree/checkout/update_spec.rb.address ownership validation when address_attributes contains id of address with no user returns success.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4:1\"}}","Spree::Checkout::Update at ./spec/services/spree/checkout/update_spec.rb.address ownership validation when address_attributes contains id of the same user address returns success.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3:1\"}}","Spree::Checkout::Update at ./spec/services/spree/checkout/update_spec.rb.address ownership validation when address_attributes does not contain id returns success.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:5:1\"}}","Spree::Checkout::Update at ./spec/services/spree/checkout/update_spec.rb.address ownership validation when bill_address_attributes contains id of another user address does not associate the other user address with the order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:2\"}}","Spree::Checkout::Update at ./spec/services/spree/checkout/update_spec.rb.address ownership validation when bill_address_attributes contains id of another user address returns failure.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","Spree::Checkout::Update at ./spec/services/spree/checkout/update_spec.rb.address ownership validation when ship_address_attributes contains id of another user address does not associate the other user address with the order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:2\"}}","Spree::Checkout::Update at ./spec/services/spree/checkout/update_spec.rb.address ownership validation when ship_address_attributes contains id of another user address returns failure.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","Spree::Checkout::Update at ./spec/services/spree/checkout/update_spec.rb.update address at address state when address did not change behaves like checkout is in address step keeps checkout in address step.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1:2:1\"}}","Spree::Checkout::Update at ./spec/services/spree/checkout/update_spec.rb.update address at address state when address did not change behaves like user default addresses did not change does not change user default addresses.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1:1:1\"}}","Spree::Checkout::Update at ./spec/services/spree/checkout/update_spec.rb.update address at address state when address did not change does not change order addresses.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1:3\"}}","Spree::Checkout::Update at ./spec/services/spree/checkout/update_spec.rb.update address at address state when bill address changed behaves like checkout is in address step keeps checkout in address step.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:3:2:1\"}}","Spree::Checkout::Update at ./spec/services/spree/checkout/update_spec.rb.update address at address state when bill address changed behaves like user default addresses did not change does not change user default addresses.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:3:1:1\"}}","Spree::Checkout::Update at ./spec/services/spree/checkout/update_spec.rb.update address at address state when bill address changed should update order bill address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:3:3\"}}","Spree::Checkout::Update at ./spec/services/spree/checkout/update_spec.rb.update address at address state when ship address changed behaves like checkout is in address step keeps checkout in address step.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:2:2:1\"}}","Spree::Checkout::Update at ./spec/services/spree/checkout/update_spec.rb.update address at address state when ship address changed behaves like user default addresses did not change does not change user default addresses.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:2:1:1\"}}","Spree::Checkout::Update at ./spec/services/spree/checkout/update_spec.rb.update address at address state when ship address changed should update order ship address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:2:3\"}}","Spree::Checkout::Update at ./spec/services/spree/checkout/update_spec.rb.update address at address state when ship and bill address changed behaves like checkout is in address step keeps checkout in address step.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:4:2:1\"}}","Spree::Checkout::Update at ./spec/services/spree/checkout/update_spec.rb.update address at address state when ship and bill address changed behaves like user default addresses did not change does not change user default addresses.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:4:1:1\"}}","Spree::Checkout::Update at ./spec/services/spree/checkout/update_spec.rb.update address at address state when ship and bill address changed should update both order addresses.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:4:3\"}}","Spree::Checkout::Update at ./spec/services/spree/checkout/update_spec.rb.update address at cart state should not set order back to address state if do_not_change_state is true.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:2\"}}","Spree::Checkout::Update at ./spec/services/spree/checkout/update_spec.rb.update address at cart state should set order back to address state if quick checkout cancelled.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:3\"}}","Spree::Checkout::Update at ./spec/services/spree/checkout/update_spec.rb.update address at cart state should set order back to address state.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","Spree::Checkout::Update at ./spec/services/spree/checkout/update_spec.rb.update selected shipping rate should set order back to delivery state.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","Spree::Classification at ./spec/models/spree/classification_spec.rb..grouped_taxon_ids_for_products returns the correct taxon ids.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1\"}}","Spree::Classification at ./spec/models/spree/classification_spec.rb..grouped_taxon_ids_for_products when empty product ids returns an empty array.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:3:1\"}}","Spree::Classification at ./spec/models/spree/classification_spec.rb..grouped_taxon_ids_for_products when empty taxon groups returns an empty array.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:2:1\"}}","Spree::Classification at ./spec/models/spree/classification_spec.rb.cannot link the same taxon to the same product more than once.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","Spree::Classification at ./spec/models/spree/classification_spec.rb.counter cache classification_count on product correctly counts multiple classifications.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2:3\"}}","Spree::Classification at ./spec/models/spree/classification_spec.rb.counter cache classification_count on product decrements when a classification is destroyed.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2:2\"}}","Spree::Classification at ./spec/models/spree/classification_spec.rb.counter cache classification_count on product increments when a classification is created.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2:1\"}}","Spree::Classification at ./spec/models/spree/classification_spec.rb.counter cache classification_count on taxon correctly counts multiple classifications.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1:3\"}}","Spree::Classification at ./spec/models/spree/classification_spec.rb.counter cache classification_count on taxon decrements when a classification is destroyed.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1:2\"}}","Spree::Classification at ./spec/models/spree/classification_spec.rb.counter cache classification_count on taxon increments when a classification is created.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1:1\"}}","Spree::Classification at ./spec/models/spree/classification_spec.rb.destroying classification resets positions.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","Spree::Classification at ./spec/models/spree/classification_spec.rb.has a valid fixtures.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2\"}}","Spree::Classification at ./spec/models/spree/classification_spec.rb.removing product from taxon resets positions.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","Spree::Classification at ./spec/models/spree/classification_spec.rb.removing taxon from product resets positions.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","Spree::Classification at ./spec/models/spree/classification_spec.rb.replacing product's taxons resets positions.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","Spree::Classification at ./spec/models/spree/classification_spec.rb.replacing taxon's products resets positions.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","Spree::Classifications::Reposition at ./spec/services/spree/classifications/reposition_spec.rb.failure example at ./spec/services/spree/classifications/reposition_spec.rb:20.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","Spree::Classifications::Reposition at ./spec/services/spree/classifications/reposition_spec.rb.failure example at ./spec/services/spree/classifications/reposition_spec.rb:21.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","Spree::Classifications::Reposition at ./spec/services/spree/classifications/reposition_spec.rb.success example at ./spec/services/spree/classifications/reposition_spec.rb:12.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::Classifications::Reposition at ./spec/services/spree/classifications/reposition_spec.rb.success example at ./spec/services/spree/classifications/reposition_spec.rb:13.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","Spree::Classifications::Reposition at ./spec/services/spree/classifications/reposition_spec.rb.success example at ./spec/services/spree/classifications/reposition_spec.rb:14.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","Spree::Core::ControllerHelpers::Auth at ./spec/lib/spree/core/controller_helpers/auth_spec.rb.#current_ability returns Spree::Ability instance.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::Core::ControllerHelpers::Auth at ./spec/lib/spree/core/controller_helpers/auth_spec.rb.#store_location sets session return url.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","Spree::Core::ControllerHelpers::Auth at ./spec/lib/spree/core/controller_helpers/auth_spec.rb.#try_spree_current_user calls current_spree_user when define current_spree_user method.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","Spree::Core::ControllerHelpers::Auth at ./spec/lib/spree/core/controller_helpers/auth_spec.rb.#try_spree_current_user calls spree_current_user when define spree_current_user method.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","Spree::Core::ControllerHelpers::Auth at ./spec/lib/spree/core/controller_helpers/auth_spec.rb.#try_spree_current_user returns nil.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3\"}}","Spree::Core::ControllerHelpers::Currency at ./spec/lib/spree/core/controller_helpers/currency_spec.rb.#currency_param different than store locale example at ./spec/lib/spree/core/controller_helpers/currency_spec.rb:47.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","Spree::Core::ControllerHelpers::Currency at ./spec/lib/spree/core/controller_helpers/currency_spec.rb.#currency_param same as store default locale example at ./spec/lib/spree/core/controller_helpers/currency_spec.rb:41.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","Spree::Core::ControllerHelpers::Currency at ./spec/lib/spree/core/controller_helpers/currency_spec.rb.#current_currency returns current store default currency.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::Core::ControllerHelpers::Currency at ./spec/lib/spree/core/controller_helpers/currency_spec.rb.#current_currency sets Spree::Current.currency.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","Spree::Core::ControllerHelpers::Currency at ./spec/lib/spree/core/controller_helpers/currency_spec.rb.#supported_currencies returns supported currencies.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","Spree::Core::ControllerHelpers::Locale at ./spec/lib/spree/core/controller_helpers/locale_spec.rb.#current_locale not taking locale from user config_locale present returns config_locale if present.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:1\"}}","Spree::Core::ControllerHelpers::Locale at ./spec/lib/spree/core/controller_helpers/locale_spec.rb.#current_locale not taking locale from user store with locale set return supported locale when passed as param.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1:2\"}}","Spree::Core::ControllerHelpers::Locale at ./spec/lib/spree/core/controller_helpers/locale_spec.rb.#current_locale not taking locale from user store with locale set returns current store default locale.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1:1\"}}","Spree::Core::ControllerHelpers::Locale at ./spec/lib/spree/core/controller_helpers/locale_spec.rb.#current_locale not taking locale from user store without locale set with I18n.default_locale set fallbacks to the default application locale.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:3:2:1\"}}","Spree::Core::ControllerHelpers::Locale at ./spec/lib/spree/core/controller_helpers/locale_spec.rb.#current_locale not taking locale from user store without locale set without I18n.default_locale set fallbacks to english.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:3:1:1\"}}","Spree::Core::ControllerHelpers::Locale at ./spec/lib/spree/core/controller_helpers/locale_spec.rb.#current_locale taking locale from user and store with locale set returns locale set within user.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","Spree::Core::ControllerHelpers::Locale at ./spec/lib/spree/core/controller_helpers/locale_spec.rb.#locale_param different than store locale example at ./spec/lib/spree/core/controller_helpers/locale_spec.rb:110.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","Spree::Core::ControllerHelpers::Locale at ./spec/lib/spree/core/controller_helpers/locale_spec.rb.#locale_param same as store default locale example at ./spec/lib/spree/core/controller_helpers/locale_spec.rb:102.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","Spree::Core::ControllerHelpers::Locale at ./spec/lib/spree/core/controller_helpers/locale_spec.rb.#set_locale sets the default and the current locale.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","Spree::Core::ControllerHelpers::Locale at ./spec/lib/spree/core/controller_helpers/locale_spec.rb.#set_locale when always using translations sets only the current locale.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1\"}}","Spree::Core::ControllerHelpers::Locale at ./spec/lib/spree/core/controller_helpers/locale_spec.rb.#supported_locales returns supported currencies.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","Spree::Core::ControllerHelpers::Locale at ./spec/lib/spree/core/controller_helpers/locale_spec.rb.#supported_locales returns supported locales.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","Spree::Core::ControllerHelpers::Order at ./spec/lib/spree/core/controller_helpers/order_spec.rb.#associate_user user is blank calls Spree::Order#associate_user! method.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","Spree::Core::ControllerHelpers::Order at ./spec/lib/spree/core/controller_helpers/order_spec.rb.#associate_user user isn't blank does not calls Spree::Order#associate_user! method.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","Spree::Core::ControllerHelpers::Order at ./spec/lib/spree/core/controller_helpers/order_spec.rb.#create_token_cookie creates a new token cookie.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","Spree::Core::ControllerHelpers::Order at ./spec/lib/spree/core/controller_helpers/order_spec.rb.#current_currency returns current currency.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","Spree::Core::ControllerHelpers::Order at ./spec/lib/spree/core/controller_helpers/order_spec.rb.#current_order create_order_if_necessary option is false returns current order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","Spree::Core::ControllerHelpers::Order at ./spec/lib/spree/core/controller_helpers/order_spec.rb.#current_order create_order_if_necessary option is true creates new order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","Spree::Core::ControllerHelpers::Order at ./spec/lib/spree/core/controller_helpers/order_spec.rb.#current_order creating a token cookie for a cart with token creates a new token cookie.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:1:1\"}}","Spree::Core::ControllerHelpers::Order at ./spec/lib/spree/core/controller_helpers/order_spec.rb.#current_order creating a token cookie for a cart with token on a custom domain creates a new token cookie on a custom domain.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:1:2:1\"}}","Spree::Core::ControllerHelpers::Order at ./spec/lib/spree/core/controller_helpers/order_spec.rb.#current_order creating a token cookie for a cart without token does nothing.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:2:1\"}}","Spree::Core::ControllerHelpers::Order at ./spec/lib/spree/core/controller_helpers/order_spec.rb.#current_order creating a token cookie for a checkout without token does nothing.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:4:1\"}}","Spree::Core::ControllerHelpers::Order at ./spec/lib/spree/core/controller_helpers/order_spec.rb.#current_order creating a token cookie with a checkout token creates a new token cookie.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:3:1\"}}","Spree::Core::ControllerHelpers::Order at ./spec/lib/spree/core/controller_helpers/order_spec.rb.#current_order creating a token cookie with a checkout token on a custom domain creates a new token cookie on a custom domain.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:3:2:1\"}}","Spree::Core::ControllerHelpers::Order at ./spec/lib/spree/core/controller_helpers/order_spec.rb.#ip_address returns remote ip.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","Spree::Core::ControllerHelpers::Order at ./spec/lib/spree/core/controller_helpers/order_spec.rb.#set_current_order user has no incomplete orders other than current one does not call Spree::Order#merge!.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1\"}}","Spree::Core::ControllerHelpers::Order at ./spec/lib/spree/core/controller_helpers/order_spec.rb.#set_current_order user has some incomplete orders other than current one within different store does not call Spree::Order#merge!.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:2:1\"}}","Spree::Core::ControllerHelpers::Order at ./spec/lib/spree/core/controller_helpers/order_spec.rb.#set_current_order user has some incomplete orders other than current one within the same store calls Spree::Order#merge!.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1:1\"}}","Spree::Core::ControllerHelpers::Order at ./spec/lib/spree/core/controller_helpers/order_spec.rb.#simple_current_order returns Spree::Order instance.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","Spree::Core::ControllerHelpers::Order at ./spec/lib/spree/core/controller_helpers/order_spec.rb.#simple_current_order returns an empty order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::Core::ControllerHelpers::Search at ./spec/lib/spree/core/controller_helpers/search_spec.rb.#build_searcher returns Spree::Core::Search::Base instance.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::Core::ControllerHelpers::Store at ./spec/lib/spree/core/controller_helpers/store_spec.rb.#current_price_options when there is a default tax zone when there is a current order example at ./spec/lib/spree/core/controller_helpers/store_spec.rb:164.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:2:1\"}}","Spree::Core::ControllerHelpers::Store at ./spec/lib/spree/core/controller_helpers/store_spec.rb.#current_price_options when there is a default tax zone when there is a current order sets Spree::Current.zone to the order tax zone.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:2:2\"}}","Spree::Core::ControllerHelpers::Store at ./spec/lib/spree/core/controller_helpers/store_spec.rb.#current_price_options when there is a default tax zone when there is no current order returns the default tax zone.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1:1\"}}","Spree::Core::ControllerHelpers::Store at ./spec/lib/spree/core/controller_helpers/store_spec.rb.#current_price_options when there is a default tax zone when there is no current order sets Spree::Current.zone to the default tax zone.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1:2\"}}","Spree::Core::ControllerHelpers::Store at ./spec/lib/spree/core/controller_helpers/store_spec.rb.#current_price_options when there is no default tax zone when there is a current order example at ./spec/lib/spree/core/controller_helpers/store_spec.rb:225.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:2:1\"}}","Spree::Core::ControllerHelpers::Store at ./spec/lib/spree/core/controller_helpers/store_spec.rb.#current_price_options when there is no default tax zone when there is a current order sets Spree::Current.zone to the order tax zone.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:2:2\"}}","Spree::Core::ControllerHelpers::Store at ./spec/lib/spree/core/controller_helpers/store_spec.rb.#current_price_options when there is no default tax zone when there is no current order when store has a checkout_zone returns the store checkout_zone.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1:1:1\"}}","Spree::Core::ControllerHelpers::Store at ./spec/lib/spree/core/controller_helpers/store_spec.rb.#current_price_options when there is no default tax zone when there is no current order when store has a checkout_zone sets Spree::Current.zone to the store checkout_zone.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1:1:2\"}}","Spree::Core::ControllerHelpers::Store at ./spec/lib/spree/core/controller_helpers/store_spec.rb.#current_price_options when there is no default tax zone when there is no current order when store has no checkout_zone returns nil when asked for the current tax zone.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1:2:1\"}}","Spree::Core::ControllerHelpers::Store at ./spec/lib/spree/core/controller_helpers/store_spec.rb.#current_price_options when there is no default tax zone when there is no current order when store has no checkout_zone sets Spree::Current.zone to nil.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1:2:2\"}}","Spree::Core::ControllerHelpers::Store at ./spec/lib/spree/core/controller_helpers/store_spec.rb.#current_store by domain returns current store.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","Spree::Core::ControllerHelpers::Store at ./spec/lib/spree/core/controller_helpers/store_spec.rb.#current_store by subdomain returns current store.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","Spree::Core::ControllerHelpers::Store at ./spec/lib/spree/core/controller_helpers/store_spec.rb.#current_store default store returns current store.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","Spree::Core::ControllerHelpers::Store at ./spec/lib/spree/core/controller_helpers/store_spec.rb.#ensure_current_store on a object that accepts a single store when an object already has a store assigned and the same store is re-assigned no exception is raised.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:3:1\"}}","Spree::Core::ControllerHelpers::Store at ./spec/lib/spree/core/controller_helpers/store_spec.rb.#ensure_current_store on a object that accepts a single store when an object already has a store assigned raises an exception.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:2:1\"}}","Spree::Core::ControllerHelpers::Store at ./spec/lib/spree/core/controller_helpers/store_spec.rb.#ensure_current_store on a object that accepts a single store when no store is present sets the current_store.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1:1\"}}","Spree::Core::ControllerHelpers::Store at ./spec/lib/spree/core/controller_helpers/store_spec.rb.#ensure_current_store on an object that accepts multiple stores when the object has a store and the same store is attempted to be added object is not changed.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:3:1\"}}","Spree::Core::ControllerHelpers::Store at ./spec/lib/spree/core/controller_helpers/store_spec.rb.#ensure_current_store on an object that accepts multiple stores when the object has a store pre assigned adds the new store without removing the original store.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:2:1\"}}","Spree::Core::ControllerHelpers::Store at ./spec/lib/spree/core/controller_helpers/store_spec.rb.#ensure_current_store on an object that accepts multiple stores when the object has no stores associated associates the object with the current_store.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1:1\"}}","Spree::Core::ControllerHelpers::Store at ./spec/lib/spree/core/controller_helpers/store_spec.rb.#ensure_current_store when object is nil returns nil.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:1\"}}","Spree::Core::ControllerHelpers::Store at ./spec/lib/spree/core/controller_helpers/store_spec.rb.#raise_record_not_found_if_store_is_not_found when store is found does not raise an exception.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3:1\"}}","Spree::Core::ControllerHelpers::Store at ./spec/lib/spree/core/controller_helpers/store_spec.rb.#raise_record_not_found_if_store_is_not_found when the store is not found raises an exception.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1\"}}","Spree::Core::ControllerHelpers::Store at ./spec/lib/spree/core/controller_helpers/store_spec.rb.#raise_record_not_found_if_store_is_not_found with root_domain set does not raise an exception.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1\"}}","Spree::Core::ControllerHelpers::StrongParameters at ./spec/lib/spree/core/controller_helpers/strong_parameters_spec.rb.#permitted_attributes returns Spree::PermittedAttributes module.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::Core::ControllerHelpers::StrongParameters at ./spec/lib/spree/core/controller_helpers/strong_parameters_spec.rb.#permitted_checkout_attributes returns Array class.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","Spree::Core::ControllerHelpers::StrongParameters at ./spec/lib/spree/core/controller_helpers/strong_parameters_spec.rb.#permitted_order_attributes returns Array class.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","Spree::Core::ControllerHelpers::StrongParameters at ./spec/lib/spree/core/controller_helpers/strong_parameters_spec.rb.#permitted_payment_attributes returns Array class.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","Spree::Core::ControllerHelpers::StrongParameters at ./spec/lib/spree/core/controller_helpers/strong_parameters_spec.rb.#permitted_product_attributes returns Array class.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","Spree::Core::ControllerHelpers::StrongParameters at ./spec/lib/spree/core/controller_helpers/strong_parameters_spec.rb.#permitted_store_attributes returns Array class.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","Spree::Core::Dependencies at ./spec/models/spree/app_dependencies_spec.rb.#_class clears memoization when value changes.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:4\"}}","Spree::Core::Dependencies at ./spec/models/spree/app_dependencies_spec.rb.#_class memoizes the resolved class.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3\"}}","Spree::Core::Dependencies at ./spec/models/spree/app_dependencies_spec.rb.#_class returns the class directly when set as class.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","Spree::Core::Dependencies at ./spec/models/spree/app_dependencies_spec.rb.#_class returns the constantized class for string values.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","Spree::Core::Dependencies at ./spec/models/spree/app_dependencies_spec.rb.#current_values marks non-overridden dependencies correctly.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2\"}}","Spree::Core::Dependencies at ./spec/models/spree/app_dependencies_spec.rb.#current_values marks overridden dependencies correctly.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:3\"}}","Spree::Core::Dependencies at ./spec/models/spree/app_dependencies_spec.rb.#current_values returns all dependencies with metadata.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","Spree::Core::Dependencies at ./spec/models/spree/app_dependencies_spec.rb.#overridden? returns false for non-overridden dependencies.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","Spree::Core::Dependencies at ./spec/models/spree/app_dependencies_spec.rb.#overridden? returns true for overridden dependencies.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2\"}}","Spree::Core::Dependencies at ./spec/models/spree/app_dependencies_spec.rb.#overridden? works with string argument.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3\"}}","Spree::Core::Dependencies at ./spec/models/spree/app_dependencies_spec.rb.#override_info returns nil for non-overridden dependencies.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","Spree::Core::Dependencies at ./spec/models/spree/app_dependencies_spec.rb.#override_info returns override info for overridden dependencies.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2\"}}","Spree::Core::Dependencies at ./spec/models/spree/app_dependencies_spec.rb.#overrides includes override metadata.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3\"}}","Spree::Core::Dependencies at ./spec/models/spree/app_dependencies_spec.rb.#overrides returns empty hash when no overrides.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","Spree::Core::Dependencies at ./spec/models/spree/app_dependencies_spec.rb.#overrides tracks overridden dependencies.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","Spree::Core::Dependencies at ./spec/models/spree/app_dependencies_spec.rb.#validate! raises Spree::DependencyError for invalid dependencies.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","Spree::Core::Dependencies at ./spec/models/spree/app_dependencies_spec.rb.backwards compatibility allows to overwrite the value with a class.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","Spree::Core::Dependencies at ./spec/models/spree/app_dependencies_spec.rb.backwards compatibility allows to overwrite the value with a string.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","Spree::Core::Dependencies at ./spec/models/spree/app_dependencies_spec.rb.backwards compatibility returns the default value as string.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::Core::Dependencies at ./spec/models/spree/app_dependencies_spec.rb.backwards compatibility works with constantize for string values.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb.adds adjustments.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:24\"}}","Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb.adds line item adjustments from promotion.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:25\"}}","Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb.adds line item adjustments from taxation.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:26\"}}","Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb.assigning a user to an order as a user does not assign the order to the other user.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1\"}}","Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb.assigning a user to an order as an admin a user's id is not provided doesn't unassociate the admin from the order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1:1\"}}","Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb.assigns order[email] over user email to order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3\"}}","Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb.build a source payment using years and month.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:32\"}}","Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb.builds a payment using state.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29\"}}","Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb.builds a payment using status as fallback.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:30\"}}","Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb.builds a payment with an optional created_at.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:34\"}}","Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb.calculates final order total correctly.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:27\"}}","Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb.can build an order from API shipping address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10\"}}","Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb.can build an order from API with country attributes.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11\"}}","Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb.can build an order from API with just line items.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5\"}}","Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb.can build an order from API with state attributes.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13\"}}","Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb.can build an order from API with variant sku.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8\"}}","Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb.can import an order number.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb.ensures_country_id for country fields.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19\"}}","Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb.ensures_state_id for state fields.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:21\"}}","Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb.handles adjustment building exceptions.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:28\"}}","Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb.handles country lookup exceptions.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12\"}}","Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb.handles exceptions when sku is not found.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9\"}}","Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb.handles line_item building exceptions.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6\"}}","Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb.handles line_item updating exceptions.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7\"}}","Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb.handles payment building exceptions.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:31\"}}","Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb.handles shipment building exceptions.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:23\"}}","Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb.handles source building exceptions when do not have years and month.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:33\"}}","Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb.optionally add completed at.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2\"}}","Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb.raises error clears out order from db.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:35:1\"}}","Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb.raises with proper message when can't find country.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:20\"}}","Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb.shipments accepts admin name for stock location.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:22:4\"}}","Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb.shipments allocates inventory units to the correct shipments.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:22:3\"}}","Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb.shipments builds them properly.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:22:2\"}}","Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb.shipments ensures variant exists and is not deleted.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:22:1\"}}","Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb.shipments raises if can't find stock location.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:22:5\"}}","Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb.shipments when a shipping adjustment is present creates the shipping adjustment.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:22:6:1\"}}","Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb.shipments when completed_at and shipped_at present builds them properly.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:22:7:1\"}}","Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb.variant not deleted ensures variant id from api.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:17:1\"}}","Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb.variant was deleted raise error as variant shouldn't be found.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:1\"}}","Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb.with a different currency can handle it when a line order price is specified.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:2\"}}","Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb.with a different currency sets the order currency.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:1\"}}","Spree::Core::NumberGenerator at ./spec/lib/spree/core/number_generator_spec.rb.#included generates .number_generator on host returns number generator.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:1\"}}","Spree::Core::NumberGenerator at ./spec/lib/spree/core/number_generator_spec.rb.#included generates validation hooks on host when permalink field value is nil on defaults and generated candidate is NOT unique and exactly half of the value space taken sets permalink field.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1:1:2:2:1\"}}","Spree::Core::NumberGenerator at ./spec/lib/spree/core/number_generator_spec.rb.#included generates validation hooks on host when permalink field value is nil on defaults and generated candidate is NOT unique and less than half of the value space taken sets permalink field.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1:1:2:1:1\"}}","Spree::Core::NumberGenerator at ./spec/lib/spree/core/number_generator_spec.rb.#included generates validation hooks on host when permalink field value is nil on defaults and generated candidate is NOT unique and more than half of the value space is taken sets permalink field.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1:1:2:3:1\"}}","Spree::Core::NumberGenerator at ./spec/lib/spree/core/number_generator_spec.rb.#included generates validation hooks on host when permalink field value is nil on defaults and generated candidate is unique sets permalink field.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1:1:1:1\"}}","Spree::Core::NumberGenerator at ./spec/lib/spree/core/number_generator_spec.rb.#included generates validation hooks on host when permalink field value is nil with length: option and generated candidate is NOT unique and exactly half of the value space taken sets permalink field.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1:2:2:2:1\"}}","Spree::Core::NumberGenerator at ./spec/lib/spree/core/number_generator_spec.rb.#included generates validation hooks on host when permalink field value is nil with length: option and generated candidate is NOT unique and less than half of the value space taken sets permalink field.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1:2:2:1:1\"}}","Spree::Core::NumberGenerator at ./spec/lib/spree/core/number_generator_spec.rb.#included generates validation hooks on host when permalink field value is nil with length: option and generated candidate is NOT unique and more than half of the value space is taken sets permalink field.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1:2:2:3:1\"}}","Spree::Core::NumberGenerator at ./spec/lib/spree/core/number_generator_spec.rb.#included generates validation hooks on host when permalink field value is nil with length: option and generated candidate is unique sets permalink field.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1:2:1:1\"}}","Spree::Core::NumberGenerator at ./spec/lib/spree/core/number_generator_spec.rb.#included generates validation hooks on host when permalink field value is nil with letters option and generated candidate is NOT unique and exactly half of the value space taken sets permalink field.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1:3:2:2:1\"}}","Spree::Core::NumberGenerator at ./spec/lib/spree/core/number_generator_spec.rb.#included generates validation hooks on host when permalink field value is nil with letters option and generated candidate is NOT unique and less than half of the value space taken sets permalink field.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1:3:2:1:1\"}}","Spree::Core::NumberGenerator at ./spec/lib/spree/core/number_generator_spec.rb.#included generates validation hooks on host when permalink field value is nil with letters option and generated candidate is NOT unique and more than half of the value space is taken sets permalink field.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1:3:2:3:1\"}}","Spree::Core::NumberGenerator at ./spec/lib/spree/core/number_generator_spec.rb.#included generates validation hooks on host when permalink field value is nil with letters option and generated candidate is unique sets permalink field.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1:3:1:1\"}}","Spree::Core::NumberGenerator at ./spec/lib/spree/core/number_generator_spec.rb.#included generates validation hooks on host when permalink field value is present does not touch field.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:2:1\"}}","Spree::Core::NumberGenerator at ./spec/lib/spree/core/number_generator_spec.rb.#length returns attribute value from options.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","Spree::Core::NumberGenerator at ./spec/lib/spree/core/number_generator_spec.rb.#length= writes attribute value.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","Spree::Core::NumberGenerator at ./spec/lib/spree/core/number_generator_spec.rb.#prefix returns attribute value from options.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::Core::NumberGenerator at ./spec/lib/spree/core/number_generator_spec.rb.#prefix= writes attribute value.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","Spree::Core::NumberGenerator at ./spec/lib/spree/core/number_generator_spec.rb.generator method redefinition allows to override generator method.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","Spree::Core::Partials at ./spec/lib/spree/core/partials_spec.rb.#initialize accepts config and environment parameters.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::Core::Partials at ./spec/lib/spree/core/partials_spec.rb.#initialize sets config and environment.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","Spree::Core::Partials at ./spec/lib/spree/core/partials_spec.rb.#keys returns partial member names without _partials suffix.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","Spree::Core::Partials at ./spec/lib/spree/core/partials_spec.rb.#partial_members returns only members ending with _partials.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","Spree::Core::Partials at ./spec/lib/spree/core/partials_spec.rb.dynamically defined methods defines getter methods for all _partials attributes.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","Spree::Core::Partials at ./spec/lib/spree/core/partials_spec.rb.dynamically defined methods defines setter methods for all _partials attributes.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2\"}}","Spree::Core::Partials at ./spec/lib/spree/core/partials_spec.rb.dynamically defined methods does not define methods for non-partials attributes.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3\"}}","Spree::Core::Partials at ./spec/lib/spree/core/partials_spec.rb.getter methods calls the config with the full _partials attribute name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","Spree::Core::Partials at ./spec/lib/spree/core/partials_spec.rb.getter methods works with different partial types.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2\"}}","Spree::Core::Partials at ./spec/lib/spree/core/partials_spec.rb.setter methods sets the config with the full _partials attribute name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","Spree::Core::Partials at ./spec/lib/spree/core/partials_spec.rb.setter methods works with different partial types.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2\"}}","Spree::Core::TokenGenerator at ./spec/lib/spree/core/token_generator_spec.rb.generate_token generates random token with timestamp.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::Country at ./spec/models/spree/country_spec.rb.#default? no arguments returns false for other countries.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:2\"}}","Spree::Country at ./spec/models/spree/country_spec.rb.#default? no arguments returns true for store default country.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","Spree::Country at ./spec/models/spree/country_spec.rb.#default? other store passed returns false for other countries.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:2\"}}","Spree::Country at ./spec/models/spree/country_spec.rb.#default? other store passed returns true for store default country.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","Spree::Country at ./spec/models/spree/country_spec.rb..by_iso will return Country by iso.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","Spree::Country at ./spec/models/spree/country_spec.rb..by_iso will return Country by iso3.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","Spree::Country at ./spec/models/spree/country_spec.rb..by_iso will return Country by lower iso.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:4\"}}","Spree::Country at ./spec/models/spree/country_spec.rb..by_iso will return nil with wrong iso or iso3.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3\"}}","Spree::Country at ./spec/models/spree/country_spec.rb.validates uniqueness.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","Spree::CouponCode at ./spec/models/spree/coupon_code_spec.rb.validations code validates presence.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","Spree::CouponCode at ./spec/models/spree/coupon_code_spec.rb.validations code validates uniqueness.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2\"}}","Spree::CouponCodes::BulkGenerateJob at ./spec/jobs/spree/coupon_codes/bulk_generate_job_spec.rb.#perform generates coupon codes.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb.#can_capture? when payment is checkout behaves like can be captured can be captured.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1:1\"}}","Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb.#can_capture? when payment is invalid cannot be captured.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3:1\"}}","Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb.#can_capture? when payment is pending behaves like can be captured can be captured.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1:1\"}}","Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb.#can_credit? when payment is completed when credit_allowed bigger than zero can credit.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:2:1\"}}","Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb.#can_credit? when payment is completed when credit_allowed is zero behaves like can not credit can not credit.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1:1:1\"}}","Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb.#can_credit? when payment is not completed behaves like can not credit can not credit.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:1:1\"}}","Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb.#can_void? when payment is not voided is true.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1\"}}","Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb.#can_void? when payment is voided is false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1\"}}","Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb.#cc_type= assigns the type based on card number in the event of js failure.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2\"}}","Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb.#cc_type= converts between the different types.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1\"}}","Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb.#display_brand when the cc_type does not exist example at ./spec/models/spree/credit_card_spec.rb:431.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:20:1:1\"}}","Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb.#display_brand when the cc_type exist example at ./spec/models/spree/credit_card_spec.rb:437.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:20:2:1\"}}","Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb.#expiry= can set with a 2-digit month and 2-digit year without whitespace and slash.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:5\"}}","Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb.#expiry= can set with a 2-digit month and 4-digit year without whitespace and slash.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:4\"}}","Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb.#expiry= can set with a 2-digit month and 4-digit year without whitespace.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:3\"}}","Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb.#expiry= can set with a 2-digit month and 4-digit year.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:2\"}}","Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb.#expiry= can set with a 2-digit month and year.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1\"}}","Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb.#expiry= does not blow up when passed an empty string.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:6\"}}","Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb.#expiry= does not blow up when passed one number.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:7\"}}","Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb.#first_name extracts the first name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:1\"}}","Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb.#last_name extracts the last name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:1\"}}","Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb.#number= does not raise an exception on non-string input.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2\"}}","Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb.#number= strips non-numeric characters from card input.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1\"}}","Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb.#save does not actually store the number.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb.#save does not actually store the security code.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2\"}}","Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb.#to_active_merchant converts to an ActiveMerchant::Billing::CreditCard object.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:1\"}}","Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb.#valid? encrypted data is present does not validate presence of number or cvv.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:5:1\"}}","Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb.#valid? imported is true does not validate presence of number or cvv.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:6:1\"}}","Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb.#valid? only validates on create.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:4\"}}","Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb.#valid? validates name presence.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:3\"}}","Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb.#valid? validates presence of number.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb.#valid? validates presence of security code.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2\"}}","Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb.#verification_value= accepts a valid 3-digit value.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1\"}}","Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb.#verification_value= accepts a valid 4-digit value.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:2\"}}","Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb.#verification_value= stringifies an integer.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:3\"}}","Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb.#verification_value= strips any whitespace.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:4\"}}","Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb.#wallet_type when the wallet_type does not exist example at ./spec/models/spree/credit_card_spec.rb:446.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:21:1:1\"}}","Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb.#wallet_type when the wallet_type exists example at ./spec/models/spree/credit_card_spec.rb:452.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:21:2:1\"}}","Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb.Associations is able to access its payments.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:1\"}}","Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb.Scopes #capturable does not include credit cards without profile or payment id.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:2:2\"}}","Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb.Scopes #capturable includes only capturable credit cards.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:2:1\"}}","Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb.Scopes #not_expired does not include outdated credit cards.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:1:2\"}}","Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb.Scopes #not_expired includes only not expired credit cards.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:1:1\"}}","Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb.allows default credit cards for different users.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:17\"}}","Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb.allows this card to save even if the previously default card has expired.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18\"}}","Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb.behaves like metadata can query records by metadata properties.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:10\"}}","Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:10.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:11.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:4.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:5.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:7.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:8.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb.behaves like metadata reads data as not symbolized keys.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8\"}}","Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb.behaves like metadata reads data as symbolized keys.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7\"}}","Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb.ensures only one credit card per user is default at a time.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16\"}}","Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb.responds to track_data.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2\"}}","Spree::CreditCards::Destroy at ./spec/services/spree/credit_cards/destroy_spec.rb.#call destroy credit_card and update payment state.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::CreditCards::Destroy at ./spec/services/spree/credit_cards/destroy_spec.rb.#destroy remove credit_card.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","Spree::CreditCards::Destroy at ./spec/services/spree/credit_cards/destroy_spec.rb.#invalidate_payments destroy credit_card and invalidate valid checkout payments.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","Spree::CreditCards::Destroy at ./spec/services/spree/credit_cards/destroy_spec.rb.#void_payments destroy credit_card and void valid payments.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","Spree::CurrencyHelper at ./spec/helpers/currency_helper_spec.rb.#currency_money returns Money::Currency instance for given currency.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","Spree::CurrencyHelper at ./spec/helpers/currency_helper_spec.rb.#currency_money uses current_currency when no argument is provided.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2\"}}","Spree::CurrencyHelper at ./spec/helpers/currency_helper_spec.rb.#currency_presentation example at ./spec/helpers/currency_helper_spec.rb:32.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","Spree::CurrencyHelper at ./spec/helpers/currency_helper_spec.rb.#currency_symbol example at ./spec/helpers/currency_helper_spec.rb:28.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","Spree::CurrencyHelper at ./spec/helpers/currency_helper_spec.rb.#preferred_currencies returns array of supported currencies from current store as `Money::Currency`.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","Spree::CurrencyHelper at ./spec/helpers/currency_helper_spec.rb.#should_render_currency_dropdown? store with multiple currencies example at ./spec/helpers/currency_helper_spec.rb:17.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","Spree::CurrencyHelper at ./spec/helpers/currency_helper_spec.rb.#should_render_currency_dropdown? store with single currency example at ./spec/helpers/currency_helper_spec.rb:23.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","Spree::CurrencyHelper at ./spec/helpers/currency_helper_spec.rb.#supported_currency_options example at ./spec/helpers/currency_helper_spec.rb:12.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::Current at ./spec/models/spree/current_spec.rb.#currency when currency is not set returns the default currency from the store.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","Spree::Current at ./spec/models/spree/current_spec.rb.#currency when currency is set returns the set currency.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","Spree::Current at ./spec/models/spree/current_spec.rb.#global_pricing_context memoizes the context.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:5\"}}","Spree::Current at ./spec/models/spree/current_spec.rb.#global_pricing_context returns a Spree::Pricing::Context.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","Spree::Current at ./spec/models/spree/current_spec.rb.#global_pricing_context uses the current currency.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3\"}}","Spree::Current at ./spec/models/spree/current_spec.rb.#global_pricing_context uses the current store.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2\"}}","Spree::Current at ./spec/models/spree/current_spec.rb.#global_pricing_context uses the current zone.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:4\"}}","Spree::Current at ./spec/models/spree/current_spec.rb.#price_lists excludes inactive price lists.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:4\"}}","Spree::Current at ./spec/models/spree/current_spec.rb.#price_lists includes active price lists.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2\"}}","Spree::Current at ./spec/models/spree/current_spec.rb.#price_lists includes scheduled price lists within date range.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3\"}}","Spree::Current at ./spec/models/spree/current_spec.rb.#price_lists memoizes the price lists.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:6\"}}","Spree::Current at ./spec/models/spree/current_spec.rb.#price_lists returns price lists for the current store.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","Spree::Current at ./spec/models/spree/current_spec.rb.#price_lists returns price lists ordered by position.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:5\"}}","Spree::Current at ./spec/models/spree/current_spec.rb.#store when store is not set returns the default store.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","Spree::Current at ./spec/models/spree/current_spec.rb.#store when store is set returns the set store.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","Spree::Current at ./spec/models/spree/current_spec.rb.#zone when zone is not set and no default tax zone exists when store has a checkout_zone returns the store checkout_zone.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3:1:1\"}}","Spree::Current at ./spec/models/spree/current_spec.rb.#zone when zone is not set and no default tax zone exists when store has no checkout_zone returns nil.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3:2:1\"}}","Spree::Current at ./spec/models/spree/current_spec.rb.#zone when zone is not set returns the default tax zone.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","Spree::Current at ./spec/models/spree/current_spec.rb.#zone when zone is set returns the set zone.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","Spree::Current at ./spec/models/spree/current_spec.rb..reset clears memoized global_pricing_context.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:3\"}}","Spree::Current at ./spec/models/spree/current_spec.rb..reset clears memoized price_lists.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2\"}}","Spree::Current at ./spec/models/spree/current_spec.rb..reset resets all attributes.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","Spree::CustomDomain at ./spec/models/spree/custom_domain_spec.rb.Callbacks touch store touches the store when the custom domain is created.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","Spree::CustomDomain at ./spec/models/spree/custom_domain_spec.rb.Validations #sanitize_url removes https:// and http:// from the url.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","Spree::CustomDomain at ./spec/models/spree/custom_domain_spec.rb.Validations #url_is_valid is invalid with wrong number of parts.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:3\"}}","Spree::CustomDomain at ./spec/models/spree/custom_domain_spec.rb.Validations #url_is_valid is valid with composed tlds.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2\"}}","Spree::CustomDomain at ./spec/models/spree/custom_domain_spec.rb.Validations #url_is_valid is valid with valid url.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","Spree::CustomerGroup at ./spec/models/spree/customer_group_spec.rb.#add_customers adds customers to the group.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","Spree::CustomerGroup at ./spec/models/spree/customer_group_spec.rb.#add_customers does not touch users that were already in the group.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:8\"}}","Spree::CustomerGroup at ./spec/models/spree/customer_group_spec.rb.#add_customers handles empty array.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:5\"}}","Spree::CustomerGroup at ./spec/models/spree/customer_group_spec.rb.#add_customers handles nil.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:6\"}}","Spree::CustomerGroup at ./spec/models/spree/customer_group_spec.rb.#add_customers returns 0 when no users are added.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:4\"}}","Spree::CustomerGroup at ./spec/models/spree/customer_group_spec.rb.#add_customers returns the count of added customers.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2\"}}","Spree::CustomerGroup at ./spec/models/spree/customer_group_spec.rb.#add_customers skips users already in the group.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:3\"}}","Spree::CustomerGroup at ./spec/models/spree/customer_group_spec.rb.#add_customers touches the added users.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:7\"}}","Spree::CustomerGroup at ./spec/models/spree/customer_group_spec.rb.#remove_customers does not touch users that were not in the group.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:7\"}}","Spree::CustomerGroup at ./spec/models/spree/customer_group_spec.rb.#remove_customers handles empty array.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:4\"}}","Spree::CustomerGroup at ./spec/models/spree/customer_group_spec.rb.#remove_customers handles nil.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:5\"}}","Spree::CustomerGroup at ./spec/models/spree/customer_group_spec.rb.#remove_customers removes customers from the group.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","Spree::CustomerGroup at ./spec/models/spree/customer_group_spec.rb.#remove_customers returns 0 when users are not in the group.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:3\"}}","Spree::CustomerGroup at ./spec/models/spree/customer_group_spec.rb.#remove_customers returns the count of removed customers.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2\"}}","Spree::CustomerGroup at ./spec/models/spree/customer_group_spec.rb.#remove_customers touches the removed users.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:6\"}}","Spree::CustomerGroup at ./spec/models/spree/customer_group_spec.rb.#users_count returns the number of users in the group.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","Spree::CustomerGroup at ./spec/models/spree/customer_group_spec.rb.associations example at ./spec/models/spree/customer_group_spec.rb:10.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","Spree::CustomerGroup at ./spec/models/spree/customer_group_spec.rb.associations example at ./spec/models/spree/customer_group_spec.rb:8.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::CustomerGroup at ./spec/models/spree/customer_group_spec.rb.associations example at ./spec/models/spree/customer_group_spec.rb:9.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","Spree::CustomerGroup at ./spec/models/spree/customer_group_spec.rb.scopes .for_store returns groups for the specified store.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","Spree::CustomerGroup at ./spec/models/spree/customer_group_spec.rb.soft delete supports soft deletion.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","Spree::CustomerGroup at ./spec/models/spree/customer_group_spec.rb.validations example at ./spec/models/spree/customer_group_spec.rb:14.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","Spree::CustomerGroup at ./spec/models/spree/customer_group_spec.rb.validations example at ./spec/models/spree/customer_group_spec.rb:15.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","Spree::CustomerGroup at ./spec/models/spree/customer_group_spec.rb.validations uniqueness allows same name in different store.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:2\"}}","Spree::CustomerGroup at ./spec/models/spree/customer_group_spec.rb.validations uniqueness validates uniqueness of name within store scope.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:1\"}}","Spree::CustomerGroupUser at ./spec/models/spree/customer_group_user_spec.rb.associations example at ./spec/models/spree/customer_group_user_spec.rb:8.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::CustomerGroupUser at ./spec/models/spree/customer_group_user_spec.rb.associations example at ./spec/models/spree/customer_group_user_spec.rb:9.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","Spree::CustomerGroupUser at ./spec/models/spree/customer_group_user_spec.rb.validations example at ./spec/models/spree/customer_group_user_spec.rb:13.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","Spree::CustomerGroupUser at ./spec/models/spree/customer_group_user_spec.rb.validations example at ./spec/models/spree/customer_group_user_spec.rb:14.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","Spree::CustomerGroupUser at ./spec/models/spree/customer_group_user_spec.rb.validations uniqueness allows same user in different groups.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:2\"}}","Spree::CustomerGroupUser at ./spec/models/spree/customer_group_user_spec.rb.validations uniqueness validates uniqueness of customer_group_id within user scope.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:1\"}}","Spree::CustomerReturn at ./spec/models/spree/customer_return_spec.rb.#currency example at ./spec/models/spree/customer_return_spec.rb:170.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1\"}}","Spree::CustomerReturn at ./spec/models/spree/customer_return_spec.rb.#display_pre_tax_total example at ./spec/models/spree/customer_return_spec.rb:133.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","Spree::CustomerReturn at ./spec/models/spree/customer_return_spec.rb.#display_pre_tax_total returns a Spree::Money.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","Spree::CustomerReturn at ./spec/models/spree/customer_return_spec.rb.#fully_reimbursed? when all return items are decided when all return items are accepted when all return items have a reimbursement when all reimbursements are reimbursed example at ./spec/models/spree/customer_return_spec.rb:310.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:2:2:2:2:1\"}}","Spree::CustomerReturn at ./spec/models/spree/customer_return_spec.rb.#fully_reimbursed? when all return items are decided when all return items are accepted when all return items have a reimbursement when some reimbursements are not reimbursed example at ./spec/models/spree/customer_return_spec.rb:304.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:2:2:2:1:1\"}}","Spree::CustomerReturn at ./spec/models/spree/customer_return_spec.rb.#fully_reimbursed? when all return items are decided when all return items are accepted when some return items have no reimbursement example at ./spec/models/spree/customer_return_spec.rb:297.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:2:2:1:1\"}}","Spree::CustomerReturn at ./spec/models/spree/customer_return_spec.rb.#fully_reimbursed? when all return items are decided when all return items are rejected example at ./spec/models/spree/customer_return_spec.rb:290.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:2:1:1\"}}","Spree::CustomerReturn at ./spec/models/spree/customer_return_spec.rb.#fully_reimbursed? when some return items are undecided example at ./spec/models/spree/customer_return_spec.rb:283.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:1:1\"}}","Spree::CustomerReturn at ./spec/models/spree/customer_return_spec.rb.#order return item without inventory unit returns nil.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:2:1\"}}","Spree::CustomerReturn at ./spec/models/spree/customer_return_spec.rb.#order returns the order associated with the return item's inventory unit.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1\"}}","Spree::CustomerReturn at ./spec/models/spree/customer_return_spec.rb.#order_id has an associated return item is the return item's inventory unit's order id.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:2:1\"}}","Spree::CustomerReturn at ./spec/models/spree/customer_return_spec.rb.#order_id return item is not associated yet is nil.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1:1\"}}","Spree::CustomerReturn at ./spec/models/spree/customer_return_spec.rb.#pre_tax_total returns the sum of the return item's pre_tax_amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","Spree::CustomerReturn at ./spec/models/spree/customer_return_spec.rb..after_save to a different stock location does not raise an error when no stock item exists in the stock location.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2:2\"}}","Spree::CustomerReturn at ./spec/models/spree/customer_return_spec.rb..after_save to a different stock location does not update the stock item counts in the original stock location.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2:3\"}}","Spree::CustomerReturn at ./spec/models/spree/customer_return_spec.rb..after_save to a different stock location updates the stock item counts in new stock location.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2:1\"}}","Spree::CustomerReturn at ./spec/models/spree/customer_return_spec.rb..after_save to the initial stock location marks all inventory units are returned.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1:1\"}}","Spree::CustomerReturn at ./spec/models/spree/customer_return_spec.rb..after_save to the initial stock location updates the stock item counts in the stock location.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1:2\"}}","Spree::CustomerReturn at ./spec/models/spree/customer_return_spec.rb..after_save to the initial stock location with Config.track_inventory_levels == false does not update the stock item counts in the stock location.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1:3:1\"}}","Spree::CustomerReturn at ./spec/models/spree/customer_return_spec.rb..validation #must_have_return_authorization return item belongs to return authorization is valid.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:2:1\"}}","Spree::CustomerReturn at ./spec/models/spree/customer_return_spec.rb..validation #must_have_return_authorization return item does not belong to return authorization adds an error message.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1:2\"}}","Spree::CustomerReturn at ./spec/models/spree/customer_return_spec.rb..validation #must_have_return_authorization return item does not belong to return authorization is not valid.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1:1\"}}","Spree::CustomerReturn at ./spec/models/spree/customer_return_spec.rb..validation #return_items_belong_to_same_order return items are part of different orders adds an error message.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1:2\"}}","Spree::CustomerReturn at ./spec/models/spree/customer_return_spec.rb..validation #return_items_belong_to_same_order return items are part of different orders is not valid.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1:1\"}}","Spree::CustomerReturn at ./spec/models/spree/customer_return_spec.rb..validation #return_items_belong_to_same_order return items are part of the same order is valid.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:2:1\"}}","Spree::CustomerReturn at ./spec/models/spree/customer_return_spec.rb.behaves like metadata can query records by metadata properties.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:10\"}}","Spree::CustomerReturn at ./spec/models/spree/customer_return_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:10.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","Spree::CustomerReturn at ./spec/models/spree/customer_return_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:11.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","Spree::CustomerReturn at ./spec/models/spree/customer_return_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:4.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::CustomerReturn at ./spec/models/spree/customer_return_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:5.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","Spree::CustomerReturn at ./spec/models/spree/customer_return_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:7.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","Spree::CustomerReturn at ./spec/models/spree/customer_return_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:8.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","Spree::CustomerReturn at ./spec/models/spree/customer_return_spec.rb.behaves like metadata reads data as not symbolized keys.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8\"}}","Spree::CustomerReturn at ./spec/models/spree/customer_return_spec.rb.behaves like metadata reads data as symbolized keys.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7\"}}","Spree::CustomerReturn at ./spec/models/spree/customer_return_spec.rb.lifecycle events customer_return.created publishes created event when record is created.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","Spree::CustomerReturn at ./spec/models/spree/customer_return_spec.rb.lifecycle events customer_return.deleted publishes deleted event when record is destroyed.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:1\"}}","Spree::CustomerReturn at ./spec/models/spree/customer_return_spec.rb.lifecycle events customer_return.updated publishes updated event when record is updated.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","Spree::CustomerReturn at ./spec/models/spree/customer_return_spec.rb.whitelisted_ransackable_attributes example at ./spec/models/spree/customer_return_spec.rb:120.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","Spree::DataFeed::Google at ./spec/models/spree/data_feed/google_spec.rb.#create when slug is not provided generates slug automatically.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","Spree::DataFeed::Google at ./spec/models/spree/data_feed/google_spec.rb.#create when slug is provided uses the slug provided.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","Spree::DataFeed::Google at ./spec/models/spree/data_feed/google_spec.rb.#formatted_url returns full url to the data feed.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","Spree::DataFeed::Google at ./spec/models/spree/data_feed/google_spec.rb..label returns a descriptive label.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","Spree::DataFeeds::Google::RequiredAttributes at ./spec/services/spree/data_feeds/google/required_attributes_spec.rb.#call does not mutate product name when generating titles for multiple variants.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::DataFeeds::Google::Rss at ./spec/services/spree/data_feeds/google/rss_spec.rb.optional item attributes are generated correctly adds brand to item attributes.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","Spree::DataFeeds::Google::Rss at ./spec/services/spree/data_feeds/google/rss_spec.rb.required item attributes are generated correctly availability date is nil shows that product availability date is nil.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:10:2\"}}","Spree::DataFeeds::Google::Rss at ./spec/services/spree/data_feeds/google/rss_spec.rb.required item attributes are generated correctly availability date is nil shows that product is in stock.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:10:1\"}}","Spree::DataFeeds::Google::Rss at ./spec/services/spree/data_feeds/google/rss_spec.rb.required item attributes are generated correctly includes description.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:4\"}}","Spree::DataFeeds::Google::Rss at ./spec/services/spree/data_feeds/google/rss_spec.rb.required item attributes are generated correctly includes id.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","Spree::DataFeeds::Google::Rss at ./spec/services/spree/data_feeds/google/rss_spec.rb.required item attributes are generated correctly includes image link.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:6\"}}","Spree::DataFeeds::Google::Rss at ./spec/services/spree/data_feeds/google/rss_spec.rb.required item attributes are generated correctly includes link.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:5\"}}","Spree::DataFeeds::Google::Rss at ./spec/services/spree/data_feeds/google/rss_spec.rb.required item attributes are generated correctly includes price.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:7\"}}","Spree::DataFeeds::Google::Rss at ./spec/services/spree/data_feeds/google/rss_spec.rb.required item attributes are generated correctly includes product id as item_group_id.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","Spree::DataFeeds::Google::Rss at ./spec/services/spree/data_feeds/google/rss_spec.rb.required item attributes are generated correctly includes title.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3\"}}","Spree::DataFeeds::Google::Rss at ./spec/services/spree/data_feeds/google/rss_spec.rb.required item attributes are generated correctly product is set to available shows that product availability date is the same.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:8:2\"}}","Spree::DataFeeds::Google::Rss at ./spec/services/spree/data_feeds/google/rss_spec.rb.required item attributes are generated correctly product is set to available shows that product is in stock.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:8:1\"}}","Spree::DataFeeds::Google::Rss at ./spec/services/spree/data_feeds/google/rss_spec.rb.required item attributes are generated correctly product is set to backorderable shows that product is on backorder.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:9:1\"}}","Spree::DataFeeds::Google::Rss at ./spec/services/spree/data_feeds/google/rss_spec.rb.store header is generated correctly include store name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::DataFeeds::Google::Rss at ./spec/services/spree/data_feeds/google/rss_spec.rb.store header is generated correctly includes store description.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","Spree::DataFeeds::Google::Rss at ./spec/services/spree/data_feeds/google/rss_spec.rb.store header is generated correctly includes store url.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","Spree::Digital at ./spec/models/spree/digital_spec.rb.behaves like lifecycle events lifecycle events digital.created publishes created event when record is created.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","Spree::Digital at ./spec/models/spree/digital_spec.rb.behaves like lifecycle events lifecycle events digital.deleted publishes deleted event when record is deleted.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:1\"}}","Spree::Digital at ./spec/models/spree/digital_spec.rb.behaves like lifecycle events lifecycle events digital.updated publishes updated event when record is updated.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","Spree::Digital at ./spec/models/spree/digital_spec.rb.validates presence of attachment and variant.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4\"}}","Spree::Digital at ./spec/models/spree/digital_spec.rb.validates presence of attachment.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3\"}}","Spree::Digital at ./spec/models/spree/digital_spec.rb.validates presence of variant.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2\"}}","Spree::DigitalLink at ./spec/models/spree/digital_link_spec.rb.#access_limit_exceeded? count exceeded but the store does not limit digital download count example at ./spec/models/spree/digital_link_spec.rb:114.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2:1\"}}","Spree::DigitalLink at ./spec/models/spree/digital_link_spec.rb.#access_limit_exceeded? count exceeded example at ./spec/models/spree/digital_link_spec.rb:102.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1:1\"}}","Spree::DigitalLink at ./spec/models/spree/digital_link_spec.rb.#access_limit_exceeded? still in count range example at ./spec/models/spree/digital_link_spec.rb:120.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:3:1\"}}","Spree::DigitalLink at ./spec/models/spree/digital_link_spec.rb.#authorizable? count exceeded but the store does not limit digital download count example at ./spec/models/spree/digital_link_spec.rb:146.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:2:1\"}}","Spree::DigitalLink at ./spec/models/spree/digital_link_spec.rb.#authorizable? count exceeded example at ./spec/models/spree/digital_link_spec.rb:134.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1:1\"}}","Spree::DigitalLink at ./spec/models/spree/digital_link_spec.rb.#authorizable? out of date but the store does not track date of expire example at ./spec/models/spree/digital_link_spec.rb:176.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:5:1\"}}","Spree::DigitalLink at ./spec/models/spree/digital_link_spec.rb.#authorizable? out of date example at ./spec/models/spree/digital_link_spec.rb:164.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:4:1\"}}","Spree::DigitalLink at ./spec/models/spree/digital_link_spec.rb.#authorizable? still in count range example at ./spec/models/spree/digital_link_spec.rb:152.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:3:1\"}}","Spree::DigitalLink at ./spec/models/spree/digital_link_spec.rb.#authorizable? still in date example at ./spec/models/spree/digital_link_spec.rb:182.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:6:1\"}}","Spree::DigitalLink at ./spec/models/spree/digital_link_spec.rb.#expired? out of date but the store does not track date of expire example at ./spec/models/spree/digital_link_spec.rb:82.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2:1\"}}","Spree::DigitalLink at ./spec/models/spree/digital_link_spec.rb.#expired? out of date example at ./spec/models/spree/digital_link_spec.rb:70.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1:1\"}}","Spree::DigitalLink at ./spec/models/spree/digital_link_spec.rb.#expired? still in date example at ./spec/models/spree/digital_link_spec.rb:88.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:3:1\"}}","Spree::DigitalLink at ./spec/models/spree/digital_link_spec.rb.#reset! resets access_counter.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","Spree::DigitalLink at ./spec/models/spree/digital_link_spec.rb.#reset! resets created_at timestamp.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2\"}}","Spree::DigitalLink at ./spec/models/spree/digital_link_spec.rb.authorize! does not touch the digital_link if not authorized.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:3\"}}","Spree::DigitalLink at ./spec/models/spree/digital_link_spec.rb.authorize! increments the access counter.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1\"}}","Spree::DigitalLink at ./spec/models/spree/digital_link_spec.rb.authorize! touches the digital_link when autorized.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:2\"}}","Spree::DigitalLink at ./spec/models/spree/digital_link_spec.rb.behaves like lifecycle events lifecycle events digital_link.created publishes created event when record is created.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","Spree::DigitalLink at ./spec/models/spree/digital_link_spec.rb.behaves like lifecycle events lifecycle events digital_link.deleted publishes deleted event when record is deleted.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:1\"}}","Spree::DigitalLink at ./spec/models/spree/digital_link_spec.rb.behaves like lifecycle events lifecycle events digital_link.updated publishes updated event when record is updated.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","Spree::DigitalLink at ./spec/models/spree/digital_link_spec.rb.validates access_counter validates access_counter 0 is valid.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3\"}}","Spree::DigitalLink at ./spec/models/spree/digital_link_spec.rb.validates access_counter validates access_counter 0 or greater.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2\"}}","Spree::DigitalLink at ./spec/models/spree/digital_link_spec.rb.validates access_counter validates access_counter numericality.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","Spree::DigitalLink at ./spec/models/spree/digital_link_spec.rb.validates presence of digital and line_item.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2\"}}","Spree::DigitalLink at ./spec/models/spree/digital_link_spec.rb.validates presence of digital.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4\"}}","Spree::DigitalLink at ./spec/models/spree/digital_link_spec.rb.validates presence of line_item.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3\"}}","Spree::DisplayMoney at ./spec/models/spree/concerns/display_money_spec.rb..money_methods currency is defined generates a display_* method that builds a Spree::Money with currency.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","Spree::DisplayMoney at ./spec/models/spree/concerns/display_money_spec.rb..money_methods currency is not defined generates a display_method that builds a Spree::Money without options.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","Spree::DisplayMoney at ./spec/models/spree/concerns/display_money_spec.rb..money_methods currency is not defined wrapped method accepts `:currency` keyword argument defined method passes the received keyword argument to the wrapped method.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","Spree::DisplayMoney at ./spec/models/spree/concerns/display_money_spec.rb..money_methods currency is not defined wrapped method accepts `currency` argument defined method passes the received keyword argument to the wrapped method.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:1\"}}","Spree::DisplayMoney at ./spec/models/spree/concerns/display_money_spec.rb..money_methods with multiple + options generates a display_* method that builds a Spree::Money with the specified options.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","Spree::Event at ./spec/models/spree/event_spec.rb.#action extracts the action from the event name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","Spree::Event at ./spec/models/spree/event_spec.rb.#action handles multi-part actions.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2\"}}","Spree::Event at ./spec/models/spree/event_spec.rb.#attributes returns a hash representation with string keys.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1\"}}","Spree::Event at ./spec/models/spree/event_spec.rb.#initialize accepts custom metadata.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","Spree::Event at ./spec/models/spree/event_spec.rb.#initialize accepts explicit store_id.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:9\"}}","Spree::Event at ./spec/models/spree/event_spec.rb.#initialize creates an event with name and payload.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::Event at ./spec/models/spree/event_spec.rb.#initialize deep stringifies payload keys.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7\"}}","Spree::Event at ./spec/models/spree/event_spec.rb.#initialize freezes the payload and metadata.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","Spree::Event at ./spec/models/spree/event_spec.rb.#initialize generates an id.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","Spree::Event at ./spec/models/spree/event_spec.rb.#initialize includes spree_version in metadata.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","Spree::Event at ./spec/models/spree/event_spec.rb.#initialize sets created_at.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","Spree::Event at ./spec/models/spree/event_spec.rb.#initialize sets store_id from Spree::Current.store.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8\"}}","Spree::Event at ./spec/models/spree/event_spec.rb.#inspect returns a readable string representation.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1\"}}","Spree::Event at ./spec/models/spree/event_spec.rb.#matches? matches exact event names.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","Spree::Event at ./spec/models/spree/event_spec.rb.#matches? matches global wildcard.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:3\"}}","Spree::Event at ./spec/models/spree/event_spec.rb.#matches? matches wildcard patterns.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2\"}}","Spree::Event at ./spec/models/spree/event_spec.rb.#resource_type extracts the resource type from the event name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","Spree::Event at ./spec/models/spree/event_spec.rb.#resource_type handles nested event names.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2\"}}","Spree::Event at ./spec/models/spree/event_spec.rb.#store memoizes the store lookup.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3\"}}","Spree::Event at ./spec/models/spree/event_spec.rb.#store returns nil when store_id is blank.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","Spree::Event at ./spec/models/spree/event_spec.rb.#store returns the store for the store_id.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","Spree::Event at ./spec/models/spree/event_spec.rb..matches? handles complex patterns.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:4\"}}","Spree::Event at ./spec/models/spree/event_spec.rb..matches? matches exact names.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","Spree::Event at ./spec/models/spree/event_spec.rb..matches? matches global wildcard.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:3\"}}","Spree::Event at ./spec/models/spree/event_spec.rb..matches? matches wildcard patterns.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2\"}}","Spree::Event at ./spec/models/spree/event_spec.rb.validations is valid with name and store_id.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3\"}}","Spree::Event at ./spec/models/spree/event_spec.rb.validations requires name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","Spree::Event at ./spec/models/spree/event_spec.rb.validations requires store_id.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","Spree::EventLogSubscriber at ./spec/subscribers/spree/event_log_subscriber_spec.rb..attach_to_notifications can be called multiple times safely (for code reload support).{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","Spree::EventLogSubscriber at ./spec/subscribers/spree/event_log_subscriber_spec.rb..attach_to_notifications subscribes to Spree events.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::EventLogSubscriber at ./spec/subscribers/spree/event_log_subscriber_spec.rb..detach_from_notifications unsubscribes from notifications.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","Spree::EventLogSubscriber at ./spec/subscribers/spree/event_log_subscriber_spec.rb.logging events filtering sensitive parameters does not filter non-sensitive data.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:4\"}}","Spree::EventLogSubscriber at ./spec/subscribers/spree/event_log_subscriber_spec.rb.logging events filtering sensitive parameters filters credit card number from payload.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:2\"}}","Spree::EventLogSubscriber at ./spec/subscribers/spree/event_log_subscriber_spec.rb.logging events filtering sensitive parameters filters password from payload.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","Spree::EventLogSubscriber at ./spec/subscribers/spree/event_log_subscriber_spec.rb.logging events filtering sensitive parameters filters verification_value from payload.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:3\"}}","Spree::EventLogSubscriber at ./spec/subscribers/spree/event_log_subscriber_spec.rb.logging events logs events to Rails logger.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","Spree::Events at ./spec/lib/spree/events_spec.rb..disable disables events within the block.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","Spree::Events at ./spec/lib/spree/events_spec.rb..disable handles nested disable blocks.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:3\"}}","Spree::Events at ./spec/lib/spree/events_spec.rb..disable restores enabled state after the block.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2\"}}","Spree::Events at ./spec/lib/spree/events_spec.rb..enabled? returns false when disabled.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2\"}}","Spree::Events at ./spec/lib/spree/events_spec.rb..enabled? returns true by default.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","Spree::Events at ./spec/lib/spree/events_spec.rb..patterns returns all registered patterns.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","Spree::Events at ./spec/lib/spree/events_spec.rb..publish notifies subscribers synchronously when async: false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","Spree::Events at ./spec/lib/spree/events_spec.rb..publish publishes an event.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::Events at ./spec/lib/spree/events_spec.rb..register_subscribers! registers subscribers from Spree.subscribers.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1\"}}","Spree::Events at ./spec/lib/spree/events_spec.rb..register_subscribers! resolves subscriber classes fresh (for code reload support).{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2\"}}","Spree::Events at ./spec/lib/spree/events_spec.rb..reset! clears all subscriptions.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1\"}}","Spree::Events at ./spec/lib/spree/events_spec.rb..resolve_subscriber handles string class names.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:3\"}}","Spree::Events at ./spec/lib/spree/events_spec.rb..resolve_subscriber resolves subscriber by name in development.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:2\"}}","Spree::Events at ./spec/lib/spree/events_spec.rb..resolve_subscriber returns nil for anonymous classes.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:5\"}}","Spree::Events at ./spec/lib/spree/events_spec.rb..resolve_subscriber returns nil for invalid class names.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:4\"}}","Spree::Events at ./spec/lib/spree/events_spec.rb..resolve_subscriber returns the subscriber directly in production.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1\"}}","Spree::Events at ./spec/lib/spree/events_spec.rb..subscribe raises error when no subscriber provided.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:5\"}}","Spree::Events at ./spec/lib/spree/events_spec.rb..subscribe subscribes with a block.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","Spree::Events at ./spec/lib/spree/events_spec.rb..subscribe subscribes with a class.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","Spree::Events at ./spec/lib/spree/events_spec.rb..subscribe supports global wildcard.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:4\"}}","Spree::Events at ./spec/lib/spree/events_spec.rb..subscribe supports pattern matching with wildcards.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3\"}}","Spree::Events at ./spec/lib/spree/events_spec.rb..subscriptions returns all subscriptions.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","Spree::Events at ./spec/lib/spree/events_spec.rb..unsubscribe removes a subscriber.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","Spree::Events at ./spec/lib/spree/events_spec.rb.multiple subscribers handles mixed pattern and exact subscribers.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:2\"}}","Spree::Events at ./spec/lib/spree/events_spec.rb.multiple subscribers notifies all matching subscribers.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1\"}}","Spree::Events::AssetSerializer at ./spec/serializers/spree/events/asset_serializer_spec.rb.#as_json includes alt text.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","Spree::Events::AssetSerializer at ./spec/serializers/spree/events/asset_serializer_spec.rb.#as_json includes identity attributes.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::Events::AssetSerializer at ./spec/serializers/spree/events/asset_serializer_spec.rb.#as_json includes position.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","Spree::Events::AssetSerializer at ./spec/serializers/spree/events/asset_serializer_spec.rb.#as_json includes timestamps.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","Spree::Events::AssetSerializer at ./spec/serializers/spree/events/asset_serializer_spec.rb.#as_json includes viewable polymorphic reference.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","Spree::Events::BaseSerializer at ./spec/serializers/spree/events/base_serializer_spec.rb.#as_json formats timestamps as ISO8601.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","Spree::Events::BaseSerializer at ./spec/serializers/spree/events/base_serializer_spec.rb.#as_json returns a hash with attributes.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::Events::BaseSerializer at ./spec/serializers/spree/events/base_serializer_spec.rb.#attribute returns nil if the attribute does not exist.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2\"}}","Spree::Events::BaseSerializer at ./spec/serializers/spree/events/base_serializer_spec.rb.#attribute returns the attribute value if it exists.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","Spree::Events::BaseSerializer at ./spec/serializers/spree/events/base_serializer_spec.rb.#event_name returns the event name from context.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","Spree::Events::BaseSerializer at ./spec/serializers/spree/events/base_serializer_spec.rb.#money returns decimal value for BigDecimal.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3\"}}","Spree::Events::BaseSerializer at ./spec/serializers/spree/events/base_serializer_spec.rb.#money returns decimal value for numbers.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2\"}}","Spree::Events::BaseSerializer at ./spec/serializers/spree/events/base_serializer_spec.rb.#money returns nil for nil values.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","Spree::Events::BaseSerializer at ./spec/serializers/spree/events/base_serializer_spec.rb.#timestamp returns ISO8601 formatted string.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","Spree::Events::BaseSerializer at ./spec/serializers/spree/events/base_serializer_spec.rb.#timestamp returns nil for nil values.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","Spree::Events::BaseSerializer at ./spec/serializers/spree/events/base_serializer_spec.rb..serialize creates an instance and calls as_json.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","Spree::Events::CustomerReturnSerializer at ./spec/serializers/spree/events/customer_return_serializer_spec.rb.#as_json includes foreign keys.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","Spree::Events::CustomerReturnSerializer at ./spec/serializers/spree/events/customer_return_serializer_spec.rb.#as_json includes identity attributes.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::Events::CustomerReturnSerializer at ./spec/serializers/spree/events/customer_return_serializer_spec.rb.#as_json includes timestamps.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","Spree::Events::DigitalLinkSerializer at ./spec/serializers/spree/events/digital_link_serializer_spec.rb.#as_json includes access_counter.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","Spree::Events::DigitalLinkSerializer at ./spec/serializers/spree/events/digital_link_serializer_spec.rb.#as_json includes foreign keys.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","Spree::Events::DigitalLinkSerializer at ./spec/serializers/spree/events/digital_link_serializer_spec.rb.#as_json includes identity attributes.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::Events::DigitalLinkSerializer at ./spec/serializers/spree/events/digital_link_serializer_spec.rb.#as_json includes timestamps.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","Spree::Events::DigitalSerializer at ./spec/serializers/spree/events/digital_serializer_spec.rb.#as_json includes identity attributes.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::Events::DigitalSerializer at ./spec/serializers/spree/events/digital_serializer_spec.rb.#as_json includes timestamps.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","Spree::Events::DigitalSerializer at ./spec/serializers/spree/events/digital_serializer_spec.rb.#as_json includes variant_id.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","Spree::Events::ExportSerializer at ./spec/serializers/spree/events/export_serializer_spec.rb.#as_json includes foreign keys.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","Spree::Events::ExportSerializer at ./spec/serializers/spree/events/export_serializer_spec.rb.#as_json includes format.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","Spree::Events::ExportSerializer at ./spec/serializers/spree/events/export_serializer_spec.rb.#as_json includes identity attributes.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::Events::ExportSerializer at ./spec/serializers/spree/events/export_serializer_spec.rb.#as_json includes timestamps.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","Spree::Events::ExportSerializer at ./spec/serializers/spree/events/export_serializer_spec.rb.#as_json includes type.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","Spree::Events::GiftCardBatchSerializer at ./spec/serializers/spree/events/gift_card_batch_serializer_spec.rb.#as_json includes amount fields.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","Spree::Events::GiftCardBatchSerializer at ./spec/serializers/spree/events/gift_card_batch_serializer_spec.rb.#as_json includes codes_count.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","Spree::Events::GiftCardBatchSerializer at ./spec/serializers/spree/events/gift_card_batch_serializer_spec.rb.#as_json includes expires_at.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","Spree::Events::GiftCardBatchSerializer at ./spec/serializers/spree/events/gift_card_batch_serializer_spec.rb.#as_json includes foreign keys.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","Spree::Events::GiftCardBatchSerializer at ./spec/serializers/spree/events/gift_card_batch_serializer_spec.rb.#as_json includes identity attributes.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::Events::GiftCardBatchSerializer at ./spec/serializers/spree/events/gift_card_batch_serializer_spec.rb.#as_json includes prefix.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","Spree::Events::GiftCardBatchSerializer at ./spec/serializers/spree/events/gift_card_batch_serializer_spec.rb.#as_json includes timestamps.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7\"}}","Spree::Events::GiftCardSerializer at ./spec/serializers/spree/events/gift_card_serializer_spec.rb.#as_json includes amount fields.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","Spree::Events::GiftCardSerializer at ./spec/serializers/spree/events/gift_card_serializer_spec.rb.#as_json includes currency.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","Spree::Events::GiftCardSerializer at ./spec/serializers/spree/events/gift_card_serializer_spec.rb.#as_json includes dates.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","Spree::Events::GiftCardSerializer at ./spec/serializers/spree/events/gift_card_serializer_spec.rb.#as_json includes foreign keys.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","Spree::Events::GiftCardSerializer at ./spec/serializers/spree/events/gift_card_serializer_spec.rb.#as_json includes identity attributes.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::Events::GiftCardSerializer at ./spec/serializers/spree/events/gift_card_serializer_spec.rb.#as_json includes state as string.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","Spree::Events::GiftCardSerializer at ./spec/serializers/spree/events/gift_card_serializer_spec.rb.#as_json includes timestamps.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7\"}}","Spree::Events::ImportRowSerializer at ./spec/serializers/spree/events/import_row_serializer_spec.rb.#as_json includes identity attributes.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::Events::ImportRowSerializer at ./spec/serializers/spree/events/import_row_serializer_spec.rb.#as_json includes import reference.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","Spree::Events::ImportRowSerializer at ./spec/serializers/spree/events/import_row_serializer_spec.rb.#as_json includes item polymorphic reference.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","Spree::Events::ImportRowSerializer at ./spec/serializers/spree/events/import_row_serializer_spec.rb.#as_json includes row_number.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","Spree::Events::ImportRowSerializer at ./spec/serializers/spree/events/import_row_serializer_spec.rb.#as_json includes status.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","Spree::Events::ImportRowSerializer at ./spec/serializers/spree/events/import_row_serializer_spec.rb.#as_json includes timestamps.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7\"}}","Spree::Events::ImportRowSerializer at ./spec/serializers/spree/events/import_row_serializer_spec.rb.#as_json includes validation_errors.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","Spree::Events::ImportRowSerializer at ./spec/serializers/spree/events/import_row_serializer_spec.rb.#as_json with validation errors includes validation error message.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8:1\"}}","Spree::Events::ImportSerializer at ./spec/serializers/spree/events/import_serializer_spec.rb.#as_json includes identity attributes.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::Events::ImportSerializer at ./spec/serializers/spree/events/import_serializer_spec.rb.#as_json includes owner polymorphic reference.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","Spree::Events::ImportSerializer at ./spec/serializers/spree/events/import_serializer_spec.rb.#as_json includes rows_count.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","Spree::Events::ImportSerializer at ./spec/serializers/spree/events/import_serializer_spec.rb.#as_json includes status as string.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","Spree::Events::ImportSerializer at ./spec/serializers/spree/events/import_serializer_spec.rb.#as_json includes timestamps.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7\"}}","Spree::Events::ImportSerializer at ./spec/serializers/spree/events/import_serializer_spec.rb.#as_json includes type.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","Spree::Events::ImportSerializer at ./spec/serializers/spree/events/import_serializer_spec.rb.#as_json includes user_id.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","Spree::Events::InvitationSerializer at ./spec/serializers/spree/events/invitation_serializer_spec.rb.#as_json includes dates.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7\"}}","Spree::Events::InvitationSerializer at ./spec/serializers/spree/events/invitation_serializer_spec.rb.#as_json includes identity attributes.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::Events::InvitationSerializer at ./spec/serializers/spree/events/invitation_serializer_spec.rb.#as_json includes invitee polymorphic reference.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","Spree::Events::InvitationSerializer at ./spec/serializers/spree/events/invitation_serializer_spec.rb.#as_json includes inviter polymorphic reference.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","Spree::Events::InvitationSerializer at ./spec/serializers/spree/events/invitation_serializer_spec.rb.#as_json includes resource polymorphic reference.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","Spree::Events::InvitationSerializer at ./spec/serializers/spree/events/invitation_serializer_spec.rb.#as_json includes role_id.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","Spree::Events::InvitationSerializer at ./spec/serializers/spree/events/invitation_serializer_spec.rb.#as_json includes status as string.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","Spree::Events::InvitationSerializer at ./spec/serializers/spree/events/invitation_serializer_spec.rb.#as_json includes timestamps.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8\"}}","Spree::Events::LineItemSerializer at ./spec/serializers/spree/events/line_item_serializer_spec.rb.#as_json includes adjustment totals.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","Spree::Events::LineItemSerializer at ./spec/serializers/spree/events/line_item_serializer_spec.rb.#as_json includes foreign keys.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","Spree::Events::LineItemSerializer at ./spec/serializers/spree/events/line_item_serializer_spec.rb.#as_json includes identity attributes.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::Events::LineItemSerializer at ./spec/serializers/spree/events/line_item_serializer_spec.rb.#as_json includes price fields.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","Spree::Events::LineItemSerializer at ./spec/serializers/spree/events/line_item_serializer_spec.rb.#as_json includes quantity.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","Spree::Events::LineItemSerializer at ./spec/serializers/spree/events/line_item_serializer_spec.rb.#as_json includes timestamps.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","Spree::Events::NewsletterSubscriberSerializer at ./spec/serializers/spree/events/newsletter_subscriber_serializer_spec.rb.#as_json includes identity attributes.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::Events::NewsletterSubscriberSerializer at ./spec/serializers/spree/events/newsletter_subscriber_serializer_spec.rb.#as_json includes timestamps.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","Spree::Events::NewsletterSubscriberSerializer at ./spec/serializers/spree/events/newsletter_subscriber_serializer_spec.rb.#as_json includes user_id.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","Spree::Events::NewsletterSubscriberSerializer at ./spec/serializers/spree/events/newsletter_subscriber_serializer_spec.rb.#as_json includes verified status.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","Spree::Events::NewsletterSubscriberSerializer at ./spec/serializers/spree/events/newsletter_subscriber_serializer_spec.rb.#as_json when not verified returns verified as false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5:1\"}}","Spree::Events::OrderSerializer at ./spec/serializers/spree/events/order_serializer_spec.rb.#as_json does not include associations.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:9\"}}","Spree::Events::OrderSerializer at ./spec/serializers/spree/events/order_serializer_spec.rb.#as_json includes email.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","Spree::Events::OrderSerializer at ./spec/serializers/spree/events/order_serializer_spec.rb.#as_json includes foreign keys.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7\"}}","Spree::Events::OrderSerializer at ./spec/serializers/spree/events/order_serializer_spec.rb.#as_json includes identity attributes.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::Events::OrderSerializer at ./spec/serializers/spree/events/order_serializer_spec.rb.#as_json includes item count and currency.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","Spree::Events::OrderSerializer at ./spec/serializers/spree/events/order_serializer_spec.rb.#as_json includes state attributes as strings.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","Spree::Events::OrderSerializer at ./spec/serializers/spree/events/order_serializer_spec.rb.#as_json includes tax totals.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","Spree::Events::OrderSerializer at ./spec/serializers/spree/events/order_serializer_spec.rb.#as_json includes timestamps.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8\"}}","Spree::Events::OrderSerializer at ./spec/serializers/spree/events/order_serializer_spec.rb.#as_json includes totals.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","Spree::Events::PaymentSerializer at ./spec/serializers/spree/events/payment_serializer_spec.rb.#as_json does not include associations.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7\"}}","Spree::Events::PaymentSerializer at ./spec/serializers/spree/events/payment_serializer_spec.rb.#as_json includes amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","Spree::Events::PaymentSerializer at ./spec/serializers/spree/events/payment_serializer_spec.rb.#as_json includes foreign keys.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","Spree::Events::PaymentSerializer at ./spec/serializers/spree/events/payment_serializer_spec.rb.#as_json includes identity attributes.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::Events::PaymentSerializer at ./spec/serializers/spree/events/payment_serializer_spec.rb.#as_json includes source polymorphic reference.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","Spree::Events::PaymentSerializer at ./spec/serializers/spree/events/payment_serializer_spec.rb.#as_json includes state as string.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","Spree::Events::PaymentSerializer at ./spec/serializers/spree/events/payment_serializer_spec.rb.#as_json includes timestamps.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","Spree::Events::PostCategorySerializer at ./spec/serializers/spree/events/post_category_serializer_spec.rb.#as_json includes identity attributes.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::Events::PostCategorySerializer at ./spec/serializers/spree/events/post_category_serializer_spec.rb.#as_json includes store_id.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","Spree::Events::PostCategorySerializer at ./spec/serializers/spree/events/post_category_serializer_spec.rb.#as_json includes timestamps.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","Spree::Events::PostSerializer at ./spec/serializers/spree/events/post_serializer_spec.rb.#as_json includes deleted_at.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","Spree::Events::PostSerializer at ./spec/serializers/spree/events/post_serializer_spec.rb.#as_json includes foreign keys.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","Spree::Events::PostSerializer at ./spec/serializers/spree/events/post_serializer_spec.rb.#as_json includes identity attributes.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::Events::PostSerializer at ./spec/serializers/spree/events/post_serializer_spec.rb.#as_json includes meta fields.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","Spree::Events::PostSerializer at ./spec/serializers/spree/events/post_serializer_spec.rb.#as_json includes published_at.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","Spree::Events::PostSerializer at ./spec/serializers/spree/events/post_serializer_spec.rb.#as_json includes timestamps.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","Spree::Events::PriceSerializer at ./spec/serializers/spree/events/price_serializer_spec.rb.#as_json includes amount fields.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","Spree::Events::PriceSerializer at ./spec/serializers/spree/events/price_serializer_spec.rb.#as_json includes deleted_at.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","Spree::Events::PriceSerializer at ./spec/serializers/spree/events/price_serializer_spec.rb.#as_json includes identity attributes.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::Events::PriceSerializer at ./spec/serializers/spree/events/price_serializer_spec.rb.#as_json includes timestamps.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","Spree::Events::PriceSerializer at ./spec/serializers/spree/events/price_serializer_spec.rb.#as_json includes variant_id.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","Spree::Events::ProductSerializer at ./spec/serializers/spree/events/product_serializer_spec.rb.#as_json does not include associations.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","Spree::Events::ProductSerializer at ./spec/serializers/spree/events/product_serializer_spec.rb.#as_json includes availability timestamps.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","Spree::Events::ProductSerializer at ./spec/serializers/spree/events/product_serializer_spec.rb.#as_json includes identity attributes.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::Events::ProductSerializer at ./spec/serializers/spree/events/product_serializer_spec.rb.#as_json includes status as string.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","Spree::Events::ProductSerializer at ./spec/serializers/spree/events/product_serializer_spec.rb.#as_json includes timestamps.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","Spree::Events::PromotionSerializer at ./spec/serializers/spree/events/promotion_serializer_spec.rb.#as_json includes code.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","Spree::Events::PromotionSerializer at ./spec/serializers/spree/events/promotion_serializer_spec.rb.#as_json includes date range.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7\"}}","Spree::Events::PromotionSerializer at ./spec/serializers/spree/events/promotion_serializer_spec.rb.#as_json includes description.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","Spree::Events::PromotionSerializer at ./spec/serializers/spree/events/promotion_serializer_spec.rb.#as_json includes identity attributes.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::Events::PromotionSerializer at ./spec/serializers/spree/events/promotion_serializer_spec.rb.#as_json includes multi-code settings.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","Spree::Events::PromotionSerializer at ./spec/serializers/spree/events/promotion_serializer_spec.rb.#as_json includes policy settings.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","Spree::Events::PromotionSerializer at ./spec/serializers/spree/events/promotion_serializer_spec.rb.#as_json includes promotion_category_id.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8\"}}","Spree::Events::PromotionSerializer at ./spec/serializers/spree/events/promotion_serializer_spec.rb.#as_json includes timestamps.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:9\"}}","Spree::Events::PromotionSerializer at ./spec/serializers/spree/events/promotion_serializer_spec.rb.#as_json includes type and kind.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","Spree::Events::RefundSerializer at ./spec/serializers/spree/events/refund_serializer_spec.rb.#as_json includes amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","Spree::Events::RefundSerializer at ./spec/serializers/spree/events/refund_serializer_spec.rb.#as_json includes foreign keys.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","Spree::Events::RefundSerializer at ./spec/serializers/spree/events/refund_serializer_spec.rb.#as_json includes identity attributes.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::Events::RefundSerializer at ./spec/serializers/spree/events/refund_serializer_spec.rb.#as_json includes timestamps.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","Spree::Events::RefundSerializer at ./spec/serializers/spree/events/refund_serializer_spec.rb.#as_json includes transaction_id.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","Spree::Events::Registry at ./spec/lib/spree/events/registry_spec.rb.#all_subscriptions returns a copy of the subscriptions.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2\"}}","Spree::Events::Registry at ./spec/lib/spree/events/registry_spec.rb.#all_subscriptions returns all registered subscriptions.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","Spree::Events::Registry at ./spec/lib/spree/events/registry_spec.rb.#clear! removes all subscriptions.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","Spree::Events::Registry at ./spec/lib/spree/events/registry_spec.rb.#patterns returns unique patterns.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","Spree::Events::Registry at ./spec/lib/spree/events/registry_spec.rb.#register allows multiple subscribers for the same pattern.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","Spree::Events::Registry at ./spec/lib/spree/events/registry_spec.rb.#register registers a subscriber for a pattern.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::Events::Registry at ./spec/lib/spree/events/registry_spec.rb.#register returns the subscription.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","Spree::Events::Registry at ./spec/lib/spree/events/registry_spec.rb.#register stores subscription options.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","Spree::Events::Registry at ./spec/lib/spree/events/registry_spec.rb.#registered? returns false for unregistered patterns.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2\"}}","Spree::Events::Registry at ./spec/lib/spree/events/registry_spec.rb.#registered? returns true for registered patterns.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","Spree::Events::Registry at ./spec/lib/spree/events/registry_spec.rb.#subscriptions_for returns empty array when no matches.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3\"}}","Spree::Events::Registry at ./spec/lib/spree/events/registry_spec.rb.#subscriptions_for returns subscriptions for exact match.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","Spree::Events::Registry at ./spec/lib/spree/events/registry_spec.rb.#subscriptions_for returns subscriptions matching wildcard patterns.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","Spree::Events::Registry at ./spec/lib/spree/events/registry_spec.rb.#subscriptions_for with global wildcard matches all events.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4:1\"}}","Spree::Events::Registry at ./spec/lib/spree/events/registry_spec.rb.#unregister keeps other subscribers intact.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3\"}}","Spree::Events::Registry at ./spec/lib/spree/events/registry_spec.rb.#unregister removes a specific subscriber.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","Spree::Events::Registry at ./spec/lib/spree/events/registry_spec.rb.#unregister returns false when subscriber not found.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","Spree::Events::Registry at ./spec/lib/spree/events/registry_spec.rb.thread safety handles concurrent registrations.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1\"}}","Spree::Events::ReimbursementSerializer at ./spec/serializers/spree/events/reimbursement_serializer_spec.rb.#as_json includes foreign keys.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","Spree::Events::ReimbursementSerializer at ./spec/serializers/spree/events/reimbursement_serializer_spec.rb.#as_json includes identity attributes.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::Events::ReimbursementSerializer at ./spec/serializers/spree/events/reimbursement_serializer_spec.rb.#as_json includes reimbursement_status.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","Spree::Events::ReimbursementSerializer at ./spec/serializers/spree/events/reimbursement_serializer_spec.rb.#as_json includes timestamps.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","Spree::Events::ReimbursementSerializer at ./spec/serializers/spree/events/reimbursement_serializer_spec.rb.#as_json includes total.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","Spree::Events::ReportSerializer at ./spec/serializers/spree/events/report_serializer_spec.rb.#as_json includes currency.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","Spree::Events::ReportSerializer at ./spec/serializers/spree/events/report_serializer_spec.rb.#as_json includes date range.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","Spree::Events::ReportSerializer at ./spec/serializers/spree/events/report_serializer_spec.rb.#as_json includes identity attributes.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::Events::ReportSerializer at ./spec/serializers/spree/events/report_serializer_spec.rb.#as_json includes store reference.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","Spree::Events::ReportSerializer at ./spec/serializers/spree/events/report_serializer_spec.rb.#as_json includes timestamps.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","Spree::Events::ReportSerializer at ./spec/serializers/spree/events/report_serializer_spec.rb.#as_json includes user reference.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","Spree::Events::ReturnAuthorizationSerializer at ./spec/serializers/spree/events/return_authorization_serializer_spec.rb.#as_json does not include associations.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","Spree::Events::ReturnAuthorizationSerializer at ./spec/serializers/spree/events/return_authorization_serializer_spec.rb.#as_json includes foreign keys.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","Spree::Events::ReturnAuthorizationSerializer at ./spec/serializers/spree/events/return_authorization_serializer_spec.rb.#as_json includes identity attributes.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::Events::ReturnAuthorizationSerializer at ./spec/serializers/spree/events/return_authorization_serializer_spec.rb.#as_json includes state as string.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","Spree::Events::ReturnAuthorizationSerializer at ./spec/serializers/spree/events/return_authorization_serializer_spec.rb.#as_json includes timestamps.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","Spree::Events::ReturnItemSerializer at ./spec/serializers/spree/events/return_item_serializer_spec.rb.#as_json includes amount fields.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","Spree::Events::ReturnItemSerializer at ./spec/serializers/spree/events/return_item_serializer_spec.rb.#as_json includes foreign keys.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","Spree::Events::ReturnItemSerializer at ./spec/serializers/spree/events/return_item_serializer_spec.rb.#as_json includes identity attributes.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::Events::ReturnItemSerializer at ./spec/serializers/spree/events/return_item_serializer_spec.rb.#as_json includes status fields.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","Spree::Events::ReturnItemSerializer at ./spec/serializers/spree/events/return_item_serializer_spec.rb.#as_json includes timestamps.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","Spree::Events::ShipmentSerializer at ./spec/serializers/spree/events/shipment_serializer_spec.rb.#as_json does not include associations.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7\"}}","Spree::Events::ShipmentSerializer at ./spec/serializers/spree/events/shipment_serializer_spec.rb.#as_json includes cost.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","Spree::Events::ShipmentSerializer at ./spec/serializers/spree/events/shipment_serializer_spec.rb.#as_json includes foreign keys.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","Spree::Events::ShipmentSerializer at ./spec/serializers/spree/events/shipment_serializer_spec.rb.#as_json includes identity attributes.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::Events::ShipmentSerializer at ./spec/serializers/spree/events/shipment_serializer_spec.rb.#as_json includes state as string.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","Spree::Events::ShipmentSerializer at ./spec/serializers/spree/events/shipment_serializer_spec.rb.#as_json includes timestamps.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","Spree::Events::ShipmentSerializer at ./spec/serializers/spree/events/shipment_serializer_spec.rb.#as_json includes tracking.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","Spree::Events::StockItemSerializer at ./spec/serializers/spree/events/stock_item_serializer_spec.rb.#as_json includes backorderable.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","Spree::Events::StockItemSerializer at ./spec/serializers/spree/events/stock_item_serializer_spec.rb.#as_json includes count_on_hand.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","Spree::Events::StockItemSerializer at ./spec/serializers/spree/events/stock_item_serializer_spec.rb.#as_json includes deleted_at.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","Spree::Events::StockItemSerializer at ./spec/serializers/spree/events/stock_item_serializer_spec.rb.#as_json includes foreign keys.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","Spree::Events::StockItemSerializer at ./spec/serializers/spree/events/stock_item_serializer_spec.rb.#as_json includes identity attributes.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::Events::StockItemSerializer at ./spec/serializers/spree/events/stock_item_serializer_spec.rb.#as_json includes timestamps.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","Spree::Events::StockMovementSerializer at ./spec/serializers/spree/events/stock_movement_serializer_spec.rb.#as_json includes action.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","Spree::Events::StockMovementSerializer at ./spec/serializers/spree/events/stock_movement_serializer_spec.rb.#as_json includes identity attributes.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::Events::StockMovementSerializer at ./spec/serializers/spree/events/stock_movement_serializer_spec.rb.#as_json includes originator polymorphic reference.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","Spree::Events::StockMovementSerializer at ./spec/serializers/spree/events/stock_movement_serializer_spec.rb.#as_json includes quantity.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","Spree::Events::StockMovementSerializer at ./spec/serializers/spree/events/stock_movement_serializer_spec.rb.#as_json includes stock_item_id.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","Spree::Events::StockMovementSerializer at ./spec/serializers/spree/events/stock_movement_serializer_spec.rb.#as_json includes timestamps.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","Spree::Events::StockTransferSerializer at ./spec/serializers/spree/events/stock_transfer_serializer_spec.rb.#as_json includes identity attributes.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::Events::StockTransferSerializer at ./spec/serializers/spree/events/stock_transfer_serializer_spec.rb.#as_json includes location foreign keys.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","Spree::Events::StockTransferSerializer at ./spec/serializers/spree/events/stock_transfer_serializer_spec.rb.#as_json includes reference.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","Spree::Events::StockTransferSerializer at ./spec/serializers/spree/events/stock_transfer_serializer_spec.rb.#as_json includes timestamps.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","Spree::Events::StockTransferSerializer at ./spec/serializers/spree/events/stock_transfer_serializer_spec.rb.#as_json includes type.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","Spree::Events::StoreCreditSerializer at ./spec/serializers/spree/events/store_credit_serializer_spec.rb.#as_json includes amount fields.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","Spree::Events::StoreCreditSerializer at ./spec/serializers/spree/events/store_credit_serializer_spec.rb.#as_json includes category and type ids.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","Spree::Events::StoreCreditSerializer at ./spec/serializers/spree/events/store_credit_serializer_spec.rb.#as_json includes deleted_at.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8\"}}","Spree::Events::StoreCreditSerializer at ./spec/serializers/spree/events/store_credit_serializer_spec.rb.#as_json includes identity attributes.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::Events::StoreCreditSerializer at ./spec/serializers/spree/events/store_credit_serializer_spec.rb.#as_json includes memo.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","Spree::Events::StoreCreditSerializer at ./spec/serializers/spree/events/store_credit_serializer_spec.rb.#as_json includes originator polymorphic reference.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7\"}}","Spree::Events::StoreCreditSerializer at ./spec/serializers/spree/events/store_credit_serializer_spec.rb.#as_json includes store_id.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","Spree::Events::StoreCreditSerializer at ./spec/serializers/spree/events/store_credit_serializer_spec.rb.#as_json includes timestamps.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:9\"}}","Spree::Events::StoreCreditSerializer at ./spec/serializers/spree/events/store_credit_serializer_spec.rb.#as_json includes user foreign keys.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","Spree::Events::UserSerializer at ./spec/serializers/spree/events/user_serializer_spec.rb.#as_json does not include sensitive data.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","Spree::Events::UserSerializer at ./spec/serializers/spree/events/user_serializer_spec.rb.#as_json includes identity attributes.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::Events::UserSerializer at ./spec/serializers/spree/events/user_serializer_spec.rb.#as_json includes timestamps.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","Spree::Events::VariantSerializer at ./spec/serializers/spree/events/variant_serializer_spec.rb.#as_json includes barcode.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","Spree::Events::VariantSerializer at ./spec/serializers/spree/events/variant_serializer_spec.rb.#as_json includes cost fields.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","Spree::Events::VariantSerializer at ./spec/serializers/spree/events/variant_serializer_spec.rb.#as_json includes deleted_at.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:10\"}}","Spree::Events::VariantSerializer at ./spec/serializers/spree/events/variant_serializer_spec.rb.#as_json includes dimensions.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","Spree::Events::VariantSerializer at ./spec/serializers/spree/events/variant_serializer_spec.rb.#as_json includes discontinue_on.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:9\"}}","Spree::Events::VariantSerializer at ./spec/serializers/spree/events/variant_serializer_spec.rb.#as_json includes foreign keys.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8\"}}","Spree::Events::VariantSerializer at ./spec/serializers/spree/events/variant_serializer_spec.rb.#as_json includes identity attributes.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::Events::VariantSerializer at ./spec/serializers/spree/events/variant_serializer_spec.rb.#as_json includes is_master.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","Spree::Events::VariantSerializer at ./spec/serializers/spree/events/variant_serializer_spec.rb.#as_json includes position.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","Spree::Events::VariantSerializer at ./spec/serializers/spree/events/variant_serializer_spec.rb.#as_json includes timestamps.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:11\"}}","Spree::Events::VariantSerializer at ./spec/serializers/spree/events/variant_serializer_spec.rb.#as_json includes track_inventory.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7\"}}","Spree::Events::WishedItemSerializer at ./spec/serializers/spree/events/wished_item_serializer_spec.rb.#as_json includes foreign keys.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","Spree::Events::WishedItemSerializer at ./spec/serializers/spree/events/wished_item_serializer_spec.rb.#as_json includes identity attributes.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::Events::WishedItemSerializer at ./spec/serializers/spree/events/wished_item_serializer_spec.rb.#as_json includes quantity.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","Spree::Events::WishedItemSerializer at ./spec/serializers/spree/events/wished_item_serializer_spec.rb.#as_json includes timestamps.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","Spree::Events::WishlistSerializer at ./spec/serializers/spree/events/wishlist_serializer_spec.rb.#as_json does not include token.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","Spree::Events::WishlistSerializer at ./spec/serializers/spree/events/wishlist_serializer_spec.rb.#as_json includes foreign keys.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","Spree::Events::WishlistSerializer at ./spec/serializers/spree/events/wishlist_serializer_spec.rb.#as_json includes identity attributes.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::Events::WishlistSerializer at ./spec/serializers/spree/events/wishlist_serializer_spec.rb.#as_json includes privacy settings.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","Spree::Events::WishlistSerializer at ./spec/serializers/spree/events/wishlist_serializer_spec.rb.#as_json includes timestamps.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","Spree::Exchange at ./spec/models/spree/exchange_spec.rb.#description describes the return items' change in options.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::Exchange at ./spec/models/spree/exchange_spec.rb.#display_amount is the total amount of all return items.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","Spree::Exchange at ./spec/models/spree/exchange_spec.rb.#perform! creates shipments for the order with the return items exchange inventory units.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","Spree::Exchange at ./spec/models/spree/exchange_spec.rb.#perform! when it cannot create shipments for all items raises an UnableToCreateShipments error.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","Spree::Exchange at ./spec/models/spree/exchange_spec.rb.#to_key example at ./spec/models/spree/exchange_spec.rb:65.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","Spree::Exchange at ./spec/models/spree/exchange_spec.rb..model_name example at ./spec/models/spree/exchange_spec.rb:73.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","Spree::Exchange at ./spec/models/spree/exchange_spec.rb..param_key example at ./spec/models/spree/exchange_spec.rb:69.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","Spree::Export at ./spec/models/spree/export_spec.rb.#event_serializer_class returns the correct event serializer class.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","Spree::Export at ./spec/models/spree/export_spec.rb.#export_file_name returns the correct file name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","Spree::Export at ./spec/models/spree/export_spec.rb.#generate generates the export.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","Spree::Export at ./spec/models/spree/export_spec.rb.#generate sends the export done email.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2\"}}","Spree::Export at ./spec/models/spree/export_spec.rb.#generate when the export type is Spree::Exports::Customers generates the export.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3:1\"}}","Spree::Export at ./spec/models/spree/export_spec.rb.#model_class returns the correct record class.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","Spree::Export at ./spec/models/spree/export_spec.rb.#normalize_search_params with Ruby hash input converts to JSON string.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:5:1\"}}","Spree::Export at ./spec/models/spree/export_spec.rb.#normalize_search_params with empty search_params does nothing.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2:1\"}}","Spree::Export at ./spec/models/spree/export_spec.rb.#normalize_search_params with invalid JSON string preserves the original string.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:4:1\"}}","Spree::Export at ./spec/models/spree/export_spec.rb.#normalize_search_params with nil search_params does nothing.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1:1\"}}","Spree::Export at ./spec/models/spree/export_spec.rb.#normalize_search_params with pre-normalized params does not double-process.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:6:1\"}}","Spree::Export at ./spec/models/spree/export_spec.rb.#normalize_search_params with valid JSON string ensures valid JSON output.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:3:2\"}}","Spree::Export at ./spec/models/spree/export_spec.rb.#normalize_search_params with valid JSON string maintains the same content.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:3:1\"}}","Spree::Export at ./spec/models/spree/export_spec.rb.#records_to_export with search params returns matching products.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2:1\"}}","Spree::Export at ./spec/models/spree/export_spec.rb.#records_to_export without search params returns all products.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1:1\"}}","Spree::Export at ./spec/models/spree/export_spec.rb.#send_export_done_email queues the export done email.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","Spree::Export at ./spec/models/spree/export_spec.rb.behaves like lifecycle events lifecycle events export.created publishes created event when record is created.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","Spree::Export at ./spec/models/spree/export_spec.rb.behaves like lifecycle events lifecycle events export.deleted publishes deleted event when record is deleted.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:1\"}}","Spree::Export at ./spec/models/spree/export_spec.rb.behaves like lifecycle events lifecycle events export.updated publishes updated event when record is updated.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","Spree::ExportMailer at ./spec/mailers/spree/export_mailer_spec.rb.#export_done includes download link in the body.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","Spree::ExportMailer at ./spec/mailers/spree/export_mailer_spec.rb.#export_done includes export attachment filename.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","Spree::ExportMailer at ./spec/mailers/spree/export_mailer_spec.rb.#export_done renders the subject.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::ExportMailer at ./spec/mailers/spree/export_mailer_spec.rb.#export_done sends to the correct recipient.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","Spree::ExportSubscriber at ./spec/subscribers/spree/export_subscriber_spec.rb.#generate_export_async does not call job if export_id is missing.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","Spree::ExportSubscriber at ./spec/subscribers/spree/export_subscriber_spec.rb.#generate_export_async extracts export_id from event payload.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","Spree::ExportSubscriber at ./spec/subscribers/spree/export_subscriber_spec.rb..event_handlers routes export.created to generate_export_async.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","Spree::ExportSubscriber at ./spec/subscribers/spree/export_subscriber_spec.rb..subscription_patterns subscribes to export.created event.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::Exports::Customers at ./spec/models/spree/exports/customers_spec.rb.#csv_headers when metafields exist includes metafield headers.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","Spree::Exports::Customers at ./spec/models/spree/exports/customers_spec.rb.#csv_headers when no metafields exist returns customer headers.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","Spree::Exports::GenerateJob at ./spec/jobs/spree/exports/generate_job_spec.rb.#perform calls generate on the export.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::Exports::GiftCards at ./spec/models/spree/exports/gift_cards_spec.rb.#csv_headers when metafields exist includes metafield headers.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","Spree::Exports::GiftCards at ./spec/models/spree/exports/gift_cards_spec.rb.#csv_headers when no metafields exist returns gift card headers.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","Spree::Exports::GiftCards at ./spec/models/spree/exports/gift_cards_spec.rb.#records_to_export when search_params filters by status includes only active gift cards.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","Spree::Exports::GiftCards at ./spec/models/spree/exports/gift_cards_spec.rb.#records_to_export when search_params is nil includes all gift cards for the store.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","Spree::Exports::NewsletterSubscribers at ./spec/models/spree/exports/newsletter_subscribers_spec.rb.#csv_headers when metafields exist includes metafield headers.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","Spree::Exports::NewsletterSubscribers at ./spec/models/spree/exports/newsletter_subscribers_spec.rb.#csv_headers when no metafields exist returns newsletter subscriber headers.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","Spree::Exports::Orders at ./spec/models/spree/exports/orders_spec.rb.#csv_headers when metafields exist includes metafield headers.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","Spree::Exports::Orders at ./spec/models/spree/exports/orders_spec.rb.#csv_headers when no metafields exist returns order line item headers.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","Spree::Exports::Orders at ./spec/models/spree/exports/orders_spec.rb.#multi_line_csv? returns true.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","Spree::Exports::Products at ./spec/models/spree/exports/products_spec.rb.#csv_headers when metafields exist includes metafield headers.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:1\"}}","Spree::Exports::Products at ./spec/models/spree/exports/products_spec.rb.#csv_headers when product_properties_enabled is false and no metafields returns product variant headers without properties.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","Spree::Exports::Products at ./spec/models/spree/exports/products_spec.rb.#csv_headers when product_properties_enabled is true includes property headers.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","Spree::Exports::Products at ./spec/models/spree/exports/products_spec.rb.#scope when search_params is nil excludes archived products.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","Spree::Exports::Products at ./spec/models/spree/exports/products_spec.rb.#scope when search_params is present includes all products.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","Spree::Filters::OptionsPresenter at ./spec/presenters/spree/filters/options_presenter_spec.rb.#to_a returns filterable Option Types and Values.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::Filters::PricePresenter at ./spec/presenters/spree/filters/price_presenter_spec.rb.#to_i returns price amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::Filters::PricePresenter at ./spec/presenters/spree/filters/price_presenter_spec.rb.#to_s returns a formatted price.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","Spree::Filters::PriceRangePresenter at ./spec/presenters/spree/filters/price_range_presenter_spec.rb.#to_param returns price range as param.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","Spree::Filters::PriceRangePresenter at ./spec/presenters/spree/filters/price_range_presenter_spec.rb.#to_s returns a formatted price range.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","Spree::Filters::PriceRangePresenter at ./spec/presenters/spree/filters/price_range_presenter_spec.rb..from_param builds a price range based on a param.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::Filters::PropertiesPresenter at ./spec/presenters/spree/filters/properties_presenter_spec.rb.#to_a returns filterable Product Properties.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::Filters::PropertyPresenter at ./spec/presenters/spree/filters/property_presenter_spec.rb.#uniq_values returns unique Product Properties values for a given list of Product Properties.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::Filters::QuantifiedPriceRangePresenter at ./spec/presenters/spree/filters/quantified_price_range_presenter_spec.rb.when the quantifier is less_than #to_param returns price range as param.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","Spree::Filters::QuantifiedPriceRangePresenter at ./spec/presenters/spree/filters/quantified_price_range_presenter_spec.rb.when the quantifier is less_than #to_s returns a formatted price range.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","Spree::Filters::QuantifiedPriceRangePresenter at ./spec/presenters/spree/filters/quantified_price_range_presenter_spec.rb.when the quantifier is more_than #to_param returns price range as param.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","Spree::Filters::QuantifiedPriceRangePresenter at ./spec/presenters/spree/filters/quantified_price_range_presenter_spec.rb.when the quantifier is more_than #to_s returns a formatted price range.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb.when stock_item is last on_hand has inventory unit on_hand.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2\"}}","Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb.when stock_item is last on_hand is successful.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb.when the current shipment has enough inventory units adds the desired inventory units to the desired shipment.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb.when the current shipment has enough inventory units recalculates shipping costs for the current shipment.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3\"}}","Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb.when the current shipment has enough inventory units recalculates shipping costs for the new shipment.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:4\"}}","Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb.when the current shipment has enough inventory units removes the desired inventory units from the current shipment.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb.when the current shipment has enough inventory units when the current shipment has been shipped already has an activemodel error hash.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:9:2\"}}","Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb.when the current shipment has enough inventory units when the current shipment has been shipped already is not successful.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:9:1\"}}","Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb.when the current shipment has enough inventory units when the desired shipment has no stock location has an activemodel error hash.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:8:2\"}}","Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb.when the current shipment has enough inventory units when the desired shipment has no stock location is not successful.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:8:1\"}}","Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb.when the current shipment has enough inventory units when the desired shipment is identical to the current shipment has an activemodel error hash.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:7:2\"}}","Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb.when the current shipment has enough inventory units when the desired shipment is identical to the current shipment is not successful.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:7:1\"}}","Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb.when the current shipment has enough inventory units when the quantity to transfer is not positive has an activemodel error hash.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:6:2\"}}","Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb.when the current shipment has enough inventory units when the quantity to transfer is not positive is not successful.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:6:1\"}}","Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb.when the current shipment has enough inventory units when transferring to another stock location when the desired stock location can only partially fulfil the quantity creates a shipment with the correct number of on hand and backordered units.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:5:2:3\"}}","Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb.when the current shipment has enough inventory units when transferring to another stock location when the desired stock location can only partially fulfil the quantity restocks seven at the original stock location.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:5:2:1\"}}","Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb.when the current shipment has enough inventory units when transferring to another stock location when the desired stock location can only partially fulfil the quantity unstocks seven at the desired stock location.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:5:2:2\"}}","Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb.when the current shipment has enough inventory units when transferring to another stock location when the desired stock location can only partially fulfil the quantity when the desired stock location already has a backordered units creates a shipment with the correct number of on hand and backordered units.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:5:2:4:3\"}}","Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb.when the current shipment has enough inventory units when transferring to another stock location when the desired stock location can only partially fulfil the quantity when the desired stock location already has a backordered units restocks seven at the original stock location.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:5:2:4:1\"}}","Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb.when the current shipment has enough inventory units when transferring to another stock location when the desired stock location can only partially fulfil the quantity when the desired stock location already has a backordered units unstocks seven at the desired stock location.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:5:2:4:2\"}}","Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb.when the current shipment has enough inventory units when transferring to another stock location when the desired stock location can only partially fulfil the quantity when the original shipment had some backordered units creates a shipment with the correct number of on hand and backordered units.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:5:2:6:3\"}}","Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb.when the current shipment has enough inventory units when transferring to another stock location when the desired stock location can only partially fulfil the quantity when the original shipment had some backordered units restocks four at the original stock location.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:5:2:6:1\"}}","Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb.when the current shipment has enough inventory units when transferring to another stock location when the desired stock location can only partially fulfil the quantity when the original shipment had some backordered units unstocks five at the desired stock location.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:5:2:6:2\"}}","Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb.when the current shipment has enough inventory units when transferring to another stock location when the desired stock location can only partially fulfil the quantity when the original shipment has on hand and backordered units more than one backordered unit reduces the backordered items first.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:5:2:5:2:1\"}}","Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb.when the current shipment has enough inventory units when transferring to another stock location when the desired stock location can only partially fulfil the quantity when the original shipment has on hand and backordered units more than one on_hand unit reduces the backordered items first.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:5:2:5:3:1\"}}","Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb.when the current shipment has enough inventory units when transferring to another stock location when the desired stock location can only partially fulfil the quantity when the original shipment has on hand and backordered units removes the backordered item first.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:5:2:5:1\"}}","Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb.when the current shipment has enough inventory units when transferring to another stock location when the other stock location does not have enough stock has an activemodel error hash.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:5:3:2\"}}","Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb.when the current shipment has enough inventory units when transferring to another stock location when the other stock location does not have enough stock is not successful.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:5:3:1\"}}","Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb.when the current shipment has enough inventory units when transferring to another stock location when the other stock location has enough stock is marked as a successful transfer.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:5:1:1\"}}","Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb.when the current shipment has enough inventory units when transferring to another stock location when the other stock location has enough stock stocks the current stock location back up.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:5:1:2\"}}","Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb.when the current shipment has enough inventory units when transferring to another stock location when the other stock location has enough stock unstocks the desired stock location.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:5:1:3\"}}","Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb.when the current shipment has enough inventory units when transferring to another stock location when the other stock location has enough stock when the order is not completed does not stock the current stock location back up.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:5:1:4:1\"}}","Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb.when the current shipment has enough inventory units when transferring to another stock location when the other stock location has enough stock when the order is not completed does not unstock the desired location.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:5:1:4:2\"}}","Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb.when the current shipment has not enough inventory units adds the desired inventory units to the desired shipment.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb.when the current shipment has not enough inventory units removes the desired inventory units from the current shipment.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb.when the current shipment is emptied out by the transfer adds the desired inventory units to the desired shipment.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb.when the current shipment is emptied out by the transfer removes the current shipment.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2\"}}","Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb.when the desired shipment is not yet persisted adds the desired inventory units to the desired shipment.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb.when the desired shipment is not yet persisted if the desired shipment is invalid has an activemodel error hash.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3:2\"}}","Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb.when the desired shipment is not yet persisted if the desired shipment is invalid is not successful.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3:1\"}}","Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb.when the desired shipment is not yet persisted updates desired shipment cost after selecting the shipping rate.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2\"}}","Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb.when the order has multiple line items can move more than one variant to the desired shipment.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::Gateway at ./spec/models/spree/gateway_spec.rb.#gateway_dashboard_payment_url returns nil.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","Spree::Gateway at ./spec/models/spree/gateway_spec.rb.#gateway_dashboard_payment_url when implemented returns the url.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2:1\"}}","Spree::Gateway at ./spec/models/spree/gateway_spec.rb.Validations automatically sets the name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","Spree::Gateway at ./spec/models/spree/gateway_spec.rb.Validations validates the type.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","Spree::Gateway at ./spec/models/spree/gateway_spec.rb.fetching payment sources finds credit cards associated on a order completed.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","Spree::Gateway at ./spec/models/spree/gateway_spec.rb.fetching payment sources finds credit cards associated with the order user.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","Spree::Gateway at ./spec/models/spree/gateway_spec.rb.passes through all arguments on a method_missing call.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","Spree::Gateway at ./spec/models/spree/gateway_spec.rb.returns exchange multiplier for gateway.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4\"}}","Spree::Gateway at ./spec/models/spree/gateway_spec.rb.returns public preferences.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5\"}}","Spree::Gateway::Bogus at ./spec/models/spree/gateway/bogus_spec.rb.disable recurring contract by destroying payment source.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","Spree::GiftCard at ./spec/models/spree/gift_card_spec.rb.#active? when active returns true.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3:1\"}}","Spree::GiftCard at ./spec/models/spree/gift_card_spec.rb.#active? when expired returns false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1\"}}","Spree::GiftCard at ./spec/models/spree/gift_card_spec.rb.#active? when redeemed returns false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1\"}}","Spree::GiftCard at ./spec/models/spree/gift_card_spec.rb.#amount_remaining when active returns the remaining amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:1\"}}","Spree::GiftCard at ./spec/models/spree/gift_card_spec.rb.#amount_remaining when authorized returns the remaining amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3:1\"}}","Spree::GiftCard at ./spec/models/spree/gift_card_spec.rb.#amount_remaining when redeemed returns 0.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1\"}}","Spree::GiftCard at ./spec/models/spree/gift_card_spec.rb.#display_state when active returns active.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2:1\"}}","Spree::GiftCard at ./spec/models/spree/gift_card_spec.rb.#display_state when expired returns expired.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1:1\"}}","Spree::GiftCard at ./spec/models/spree/gift_card_spec.rb.#to_csv includes the currency.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:4\"}}","Spree::GiftCard at ./spec/models/spree/gift_card_spec.rb.#to_csv includes the gift card code.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:3\"}}","Spree::GiftCard at ./spec/models/spree/gift_card_spec.rb.#to_csv includes the user email.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:5\"}}","Spree::GiftCard at ./spec/models/spree/gift_card_spec.rb.#to_csv returns an array.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","Spree::GiftCard at ./spec/models/spree/gift_card_spec.rb.#to_csv returns the correct number of fields.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2\"}}","Spree::GiftCard at ./spec/models/spree/gift_card_spec.rb.Callbacks #ensure_can_be_deleted adds an error.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:2\"}}","Spree::GiftCard at ./spec/models/spree/gift_card_spec.rb.Callbacks #ensure_can_be_deleted ensures a used gift card can't be destroyed.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","Spree::GiftCard at ./spec/models/spree/gift_card_spec.rb.Scopes #active returns active gift cards.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","Spree::GiftCard at ./spec/models/spree/gift_card_spec.rb.Scopes #expired returns expired gift cards.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","Spree::GiftCard at ./spec/models/spree/gift_card_spec.rb.Scopes #partially_redeemed returns partially redeemed gift cards.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4:1\"}}","Spree::GiftCard at ./spec/models/spree/gift_card_spec.rb.Scopes #redeemed returns redeemed gift cards.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3:1\"}}","Spree::GiftCard at ./spec/models/spree/gift_card_spec.rb.State transitions when active transitions from active to partially_redeemed.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1:1\"}}","Spree::GiftCard at ./spec/models/spree/gift_card_spec.rb.State transitions when active transitions from active to redeemed.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1:2\"}}","Spree::GiftCard at ./spec/models/spree/gift_card_spec.rb.State transitions when partially_redeemed allows multiple partial redemptions (remains partially_redeemed).{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2:1\"}}","Spree::GiftCard at ./spec/models/spree/gift_card_spec.rb.State transitions when partially_redeemed transitions from partially_redeemed to redeemed when fully used.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2:2\"}}","Spree::GiftCard at ./spec/models/spree/gift_card_spec.rb.State transitions when redeemed does not allow further redemption.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:3:1\"}}","Spree::GiftCard at ./spec/models/spree/gift_card_spec.rb.behaves like lifecycle events lifecycle events gift_card.created publishes created event when record is created.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","Spree::GiftCard at ./spec/models/spree/gift_card_spec.rb.behaves like lifecycle events lifecycle events gift_card.deleted publishes deleted event when record is deleted.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:1\"}}","Spree::GiftCard at ./spec/models/spree/gift_card_spec.rb.behaves like lifecycle events lifecycle events gift_card.updated publishes updated event when record is updated.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","Spree::GiftCard at ./spec/models/spree/gift_card_spec.rb.custom events gift_card.partially_redeemed publishes gift_card.partially_redeemed event when partially redeemed.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:2:1\"}}","Spree::GiftCard at ./spec/models/spree/gift_card_spec.rb.custom events gift_card.redeemed publishes gift_card.redeemed event when fully redeemed.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1:1\"}}","Spree::GiftCardBatch at ./spec/models/spree/gift_card_batch_spec.rb.#create_gift_cards generates gift cards.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","Spree::GiftCardBatch at ./spec/models/spree/gift_card_batch_spec.rb.#generate_gift_cards when codes count is greater than 500 enqueues a job.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","Spree::GiftCardBatch at ./spec/models/spree/gift_card_batch_spec.rb.#generate_gift_cards when codes count is less than 500 generates gift cards.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","Spree::GiftCardBatch at ./spec/models/spree/gift_card_batch_spec.rb.lifecycle events gift_card_batch.created publishes created event when record is created.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","Spree::GiftCardBatch at ./spec/models/spree/gift_card_batch_spec.rb.lifecycle events gift_card_batch.deleted publishes deleted event when record is destroyed.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","Spree::GiftCardBatch at ./spec/models/spree/gift_card_batch_spec.rb.lifecycle events gift_card_batch.updated publishes updated event when record is updated.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","Spree::GiftCards::Apply at ./spec/services/spree/gift_cards/apply_spec.rb.applies the gift card to an order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","Spree::GiftCards::Apply at ./spec/services/spree/gift_cards/apply_spec.rb.calls update_with_updater!.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2\"}}","Spree::GiftCards::Apply at ./spec/services/spree/gift_cards/apply_spec.rb.when the gift card has a different currency responds with an error.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","Spree::GiftCards::Apply at ./spec/services/spree/gift_cards/apply_spec.rb.when the gift card has no amount remaining responds with an error.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","Spree::GiftCards::Apply at ./spec/services/spree/gift_cards/apply_spec.rb.when the gift card is assigned to a user with another user order responds with an error.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3:1\"}}","Spree::GiftCards::Apply at ./spec/services/spree/gift_cards/apply_spec.rb.when the gift card is assigned to a user with guest order responds with an error.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1\"}}","Spree::GiftCards::Apply at ./spec/services/spree/gift_cards/apply_spec.rb.when the gift card is assigned to a user with valid user applies the gift card to the order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:1\"}}","Spree::GiftCards::Apply at ./spec/services/spree/gift_cards/apply_spec.rb.when the gift card is assigned to a user with valid user calls update_with_updater!.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:2\"}}","Spree::GiftCards::Apply at ./spec/services/spree/gift_cards/apply_spec.rb.when the order has applied store credit responds with an error.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","Spree::GiftCards::BulkGenerateJob at ./spec/jobs/spree/gift_cards/bulk_generate_job_spec.rb.#perform generates gift cards.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::GiftCards::Redeem at ./spec/services/spree/gift_cards/redeem_spec.rb.when the gift card has amount remaining calls partial_redeem! on the gift card.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","Spree::GiftCards::Redeem at ./spec/services/spree/gift_cards/redeem_spec.rb.when the gift card has amount remaining returns success with the gift card.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","Spree::GiftCards::Redeem at ./spec/services/spree/gift_cards/redeem_spec.rb.when the gift card has no amount remaining calls redeem! on the gift card.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::GiftCards::Redeem at ./spec/services/spree/gift_cards/redeem_spec.rb.when the gift card has no amount remaining returns success with the gift card.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","Spree::GiftCards::Remove at ./spec/services/spree/gift_cards/remove_spec.rb.for an order with the gift card applied calls update_with_updater!.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","Spree::GiftCards::Remove at ./spec/services/spree/gift_cards/remove_spec.rb.for an order with the gift card applied for a completed order responds with an error.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","Spree::GiftCards::Remove at ./spec/services/spree/gift_cards/remove_spec.rb.for an order with the gift card applied removes the gift card from an order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::GiftCards::Remove at ./spec/services/spree/gift_cards/remove_spec.rb.for an order without a gift card does nothing.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","Spree::HasImageAltText at ./spec/models/concerns/spree/has_image_alt_text_spec.rb.included behavior creates the image_alt method.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::HasImageAltText at ./spec/models/concerns/spree/has_image_alt_text_spec.rb.included behavior falls back when preference is whitespace-only.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","Spree::HasImageAltText at ./spec/models/concerns/spree/has_image_alt_text_spec.rb.included behavior filename processing correctly converts various filename formats.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7:1\"}}","Spree::HasImageAltText at ./spec/models/concerns/spree/has_image_alt_text_spec.rb.included behavior returns \"Image\" as fallback when no preference and no asset.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","Spree::HasImageAltText at ./spec/models/concerns/spree/has_image_alt_text_spec.rb.included behavior returns filename-based alt when preference is blank but asset has filename.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","Spree::HasImageAltText at ./spec/models/concerns/spree/has_image_alt_text_spec.rb.included behavior returns preference value when present.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","Spree::HasImageAltText at ./spec/models/concerns/spree/has_image_alt_text_spec.rb.included behavior when asset has no filename returns \"Image\" fallback.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6:1\"}}","Spree::Image at ./spec/models/spree/image_spec.rb.#style will return style for the given name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","Spree::Image at ./spec/models/spree/image_spec.rb.#styles will return all styles for the image.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","Spree::Image at ./spec/models/spree/image_spec.rb.cache expiration update position when viewable is a master variant touches product variants.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1:1\"}}","Spree::Image at ./spec/models/spree/image_spec.rb.cache expiration update position when viewable is a variant does not touch product variants.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:2:1\"}}","Spree::Image at ./spec/models/spree/image_spec.rb.image_count counter cache decrements image_count when image is destroyed.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2\"}}","Spree::Image at ./spec/models/spree/image_spec.rb.image_count counter cache increments image_count when image is created.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","Spree::Image at ./spec/models/spree/image_spec.rb.image_count counter cache tracks multiple images correctly.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3\"}}","Spree::Image at ./spec/models/spree/image_spec.rb.total_image_count counter cache on product decrements total_image_count when image is destroyed.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:3\"}}","Spree::Image at ./spec/models/spree/image_spec.rb.total_image_count counter cache on product increments total_image_count when image is created on master.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","Spree::Image at ./spec/models/spree/image_spec.rb.total_image_count counter cache on product increments total_image_count when image is created on variant.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2\"}}","Spree::Image at ./spec/models/spree/image_spec.rb.total_image_count counter cache on product tracks images across all variants correctly.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:4\"}}","Spree::Image at ./spec/models/spree/image_spec.rb.validation allows only web image content types.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","Spree::Image at ./spec/models/spree/image_spec.rb.validation does not allow non-web image content types.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","Spree::Image at ./spec/models/spree/image_spec.rb.validation has attachment absent.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","Spree::Image at ./spec/models/spree/image_spec.rb.validation has attachment present.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::ImageMethods at ./spec/models/concerns/spree/image_methods_spec.rb.#generate_url when gravity is not set to centre attachment.variant should receive the unchanged value of gravity.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","Spree::ImageMethods at ./spec/models/concerns/spree/image_methods_spec.rb.#generate_url when gravity is set to centre attachment.variant should receive \"gravity: center\" when image processing variant is nil.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","Spree::ImageMethods at ./spec/models/concerns/spree/image_methods_spec.rb.#generate_url when gravity is set to centre should return center when image processing variant is mini magick.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2\"}}","Spree::ImageMethods at ./spec/models/concerns/spree/image_methods_spec.rb.#generate_url when gravity is set to centre should return centre when image processing variant is VIPS.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:3\"}}","Spree::Images::SaveFromUrlJob at ./spec/jobs/spree/images/save_from_url_job_spec.rb.can be enqueued.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2\"}}","Spree::Images::SaveFromUrlJob at ./spec/jobs/spree/images/save_from_url_job_spec.rb.is queued in the correct queue.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","Spree::Images::SaveFromUrlJob at ./spec/jobs/spree/images/save_from_url_job_spec.rb.when performing the job downloads and attaches image from the URL.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","Spree::Images::SaveFromUrlJob at ./spec/jobs/spree/images/save_from_url_job_spec.rb.when performing the job when image already exists with the given external_url does not re-download but triggers save!.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3:1\"}}","Spree::Images::SaveFromUrlJob at ./spec/jobs/spree/images/save_from_url_job_spec.rb.when performing the job when skip_import? returns true does not download the image.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4:1\"}}","Spree::Images::SaveFromUrlJob at ./spec/jobs/spree/images/save_from_url_job_spec.rb.when performing the job with position sets the position if provided.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","Spree::ImagesHelper at ./spec/helpers/images_helper_spec.rb.#spree_asset_aspect_ratio when aspect_ratio is present in metadata returns the aspect ratio.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3:1\"}}","Spree::ImagesHelper at ./spec/helpers/images_helper_spec.rb.#spree_asset_aspect_ratio when attachment is not analyzed returns nil.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","Spree::ImagesHelper at ./spec/helpers/images_helper_spec.rb.#spree_asset_aspect_ratio when attachment is not present returns nil.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","Spree::ImagesHelper at ./spec/helpers/images_helper_spec.rb.#spree_asset_aspect_ratio when calculating aspect ratio from dimensions when height is greater than width returns the correct ratio.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4:1:1\"}}","Spree::ImagesHelper at ./spec/helpers/images_helper_spec.rb.#spree_asset_aspect_ratio when calculating aspect ratio from dimensions when width equals height returns 1.0.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4:3:1\"}}","Spree::ImagesHelper at ./spec/helpers/images_helper_spec.rb.#spree_asset_aspect_ratio when calculating aspect ratio from dimensions when width is greater than height returns the correct ratio.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4:2:1\"}}","Spree::ImagesHelper at ./spec/helpers/images_helper_spec.rb.#spree_image_tag returns an image tag with the correct url.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::ImagesHelper at ./spec/helpers/images_helper_spec.rb.#spree_image_tag when image is not attached returns nil.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","Spree::ImagesHelper at ./spec/helpers/images_helper_spec.rb.#spree_image_tag when image is not variable returns nil.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1\"}}","Spree::ImagesHelper at ./spec/helpers/images_helper_spec.rb.#spree_image_tag when variant option is provided ignores width, height, and format when variant is provided.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2\"}}","Spree::ImagesHelper at ./spec/helpers/images_helper_spec.rb.#spree_image_tag when variant option is provided passes only variant to spree_image_url and excludes it from image_tag options.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","Spree::ImagesHelper at ./spec/helpers/images_helper_spec.rb.#spree_image_url supports blob.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","Spree::ImagesHelper at ./spec/helpers/images_helper_spec.rb.#spree_image_url when format is provided returns a url with the correct format.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:6:1\"}}","Spree::ImagesHelper at ./spec/helpers/images_helper_spec.rb.#spree_image_url when image is not attached returns nil.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","Spree::ImagesHelper at ./spec/helpers/images_helper_spec.rb.#spree_image_url when image is not variable returns nil.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:1\"}}","Spree::ImagesHelper at ./spec/helpers/images_helper_spec.rb.#spree_image_url when only width is present returns a url with resize_to_limit.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:5:1\"}}","Spree::ImagesHelper at ./spec/helpers/images_helper_spec.rb.#spree_image_url when variant option is provided ignores width and height when variant is provided.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:7:2\"}}","Spree::ImagesHelper at ./spec/helpers/images_helper_spec.rb.#spree_image_url when variant option is provided uses the named variant directly.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:7:1\"}}","Spree::ImagesHelper at ./spec/helpers/images_helper_spec.rb.#spree_image_url when width and height are present returns a url with resize_to_fill.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:4:1\"}}","Spree::Import at ./spec/models/spree/import_spec.rb.#create_mappings auto-assigns file columns when possible.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:2\"}}","Spree::Import at ./spec/models/spree/import_spec.rb.#create_mappings creates mappings for schema fields.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1\"}}","Spree::Import at ./spec/models/spree/import_spec.rb.#create_rows_async enqueues CreateRowsJob.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:1\"}}","Spree::Import at ./spec/models/spree/import_spec.rb.#csv_headers returns the CSV headers.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","Spree::Import at ./spec/models/spree/import_spec.rb.#csv_headers with custom delimiter parses headers with custom delimiter.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2:1\"}}","Spree::Import at ./spec/models/spree/import_spec.rb.#display_name returns the correct display name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","Spree::Import at ./spec/models/spree/import_spec.rb.#event_serializer_class returns the correct event serializer class.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:1\"}}","Spree::Import at ./spec/models/spree/import_spec.rb.#import_schema returns the correct schema class.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","Spree::Import at ./spec/models/spree/import_spec.rb.#mapping_done? when all required fields are mapped returns true.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1:1\"}}","Spree::Import at ./spec/models/spree/import_spec.rb.#mapping_done? when not all required fields are mapped returns false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2:1\"}}","Spree::Import at ./spec/models/spree/import_spec.rb.#model_class for Customers import returns the user class.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1\"}}","Spree::Import at ./spec/models/spree/import_spec.rb.#model_class for Products import returns Spree::Product.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1\"}}","Spree::Import at ./spec/models/spree/import_spec.rb.#process_rows_async enqueues ProcessRowsJob.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:1\"}}","Spree::Import at ./spec/models/spree/import_spec.rb.#schema_fields when model does not support metafields does not include any metafield fields.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2:2\"}}","Spree::Import at ./spec/models/spree/import_spec.rb.#schema_fields when model does not support metafields returns only base fields from schema.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2:1\"}}","Spree::Import at ./spec/models/spree/import_spec.rb.#schema_fields when model supports metafields but has no metafield definitions returns only base fields.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:3:1\"}}","Spree::Import at ./spec/models/spree/import_spec.rb.#schema_fields when model supports metafields combines base fields and metafield fields.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1:3\"}}","Spree::Import at ./spec/models/spree/import_spec.rb.#schema_fields when model supports metafields has correct structure for metafield fields.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1:4\"}}","Spree::Import at ./spec/models/spree/import_spec.rb.#schema_fields when model supports metafields includes metafield fields.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1:2\"}}","Spree::Import at ./spec/models/spree/import_spec.rb.#schema_fields when model supports metafields returns base fields from schema.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1:1\"}}","Spree::Import at ./spec/models/spree/import_spec.rb.#store when owner is a Store returns the owner.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:1:1\"}}","Spree::Import at ./spec/models/spree/import_spec.rb.#unmapped_file_columns returns columns that are not mapped.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1\"}}","Spree::Import at ./spec/models/spree/import_spec.rb..available_models returns model classes for available types.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:1\"}}","Spree::Import at ./spec/models/spree/import_spec.rb..available_types returns configured import types.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:1\"}}","Spree::Import at ./spec/models/spree/import_spec.rb..model_class returns the model class for the import type.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:1\"}}","Spree::Import at ./spec/models/spree/import_spec.rb..type_for_model returns the import type for a given model.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:17:1\"}}","Spree::Import at ./spec/models/spree/import_spec.rb.State machine complete event publishes import.completed event.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:5:2\"}}","Spree::Import at ./spec/models/spree/import_spec.rb.State machine complete event transitions from processing to completed.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:5:1\"}}","Spree::Import at ./spec/models/spree/import_spec.rb.State machine complete_mapping event creates rows asynchronously after transition.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3:2\"}}","Spree::Import at ./spec/models/spree/import_spec.rb.State machine complete_mapping event transitions from mapping to completed_mapping.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3:1\"}}","Spree::Import at ./spec/models/spree/import_spec.rb.State machine initial state starts in pending state.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","Spree::Import at ./spec/models/spree/import_spec.rb.State machine start_mapping event creates mappings before transition.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:2\"}}","Spree::Import at ./spec/models/spree/import_spec.rb.State machine start_mapping event transitions from pending to mapping.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","Spree::Import at ./spec/models/spree/import_spec.rb.State machine start_processing event transitions from completed_mapping to processing.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4:1\"}}","Spree::Import at ./spec/models/spree/import_spec.rb.Validations attachment validation validates attachment content type.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","Spree::Import at ./spec/models/spree/import_spec.rb.Validations type validation allows valid types.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:2\"}}","Spree::Import at ./spec/models/spree/import_spec.rb.Validations type validation validates type is whitelisted.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","Spree::Import at ./spec/models/spree/import_spec.rb.behaves like lifecycle events lifecycle events import.created publishes created event when record is created.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","Spree::Import at ./spec/models/spree/import_spec.rb.behaves like lifecycle events lifecycle events import.deleted publishes deleted event when record is deleted.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:1\"}}","Spree::Import at ./spec/models/spree/import_spec.rb.behaves like lifecycle events lifecycle events import.updated publishes updated event when record is updated.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","Spree::Import at ./spec/models/spree/import_spec.rb.custom events import.completed publishes import.completed event when completed.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:20:1:1\"}}","Spree::ImportMapping at ./spec/models/spree/import_mapping_spec.rb.#mapped? when file_column is blank returns false when file_column is empty string.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:2\"}}","Spree::ImportMapping at ./spec/models/spree/import_mapping_spec.rb.#mapped? when file_column is blank returns false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1\"}}","Spree::ImportMapping at ./spec/models/spree/import_mapping_spec.rb.#mapped? when file_column is present returns true.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1\"}}","Spree::ImportMapping at ./spec/models/spree/import_mapping_spec.rb.#required? when schema_field is a required field returns true.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","Spree::ImportMapping at ./spec/models/spree/import_mapping_spec.rb.#required? when schema_field is not a required field returns false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","Spree::ImportMapping at ./spec/models/spree/import_mapping_spec.rb.#schema_field_label when schema_field does not exist in import schema returns nil.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:3:1\"}}","Spree::ImportMapping at ./spec/models/spree/import_mapping_spec.rb.#schema_field_label when schema_field exists in import schema returns the label for the schema field.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1:1\"}}","Spree::ImportMapping at ./spec/models/spree/import_mapping_spec.rb.#schema_field_label when schema_field is a metafield returns the metafield definition name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2:1\"}}","Spree::ImportMapping at ./spec/models/spree/import_mapping_spec.rb.#try_to_auto_assign_file_column when case-insensitive match exists assigns the matching file column.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1\"}}","Spree::ImportMapping at ./spec/models/spree/import_mapping_spec.rb.#try_to_auto_assign_file_column when exact match exists assigns the matching file column.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:1\"}}","Spree::ImportMapping at ./spec/models/spree/import_mapping_spec.rb.#try_to_auto_assign_file_column when file_column is already set overwrites with matching column.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:5:1\"}}","Spree::ImportMapping at ./spec/models/spree/import_mapping_spec.rb.#try_to_auto_assign_file_column when no match exists does not assign a file column.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:4:1\"}}","Spree::ImportMapping at ./spec/models/spree/import_mapping_spec.rb.#try_to_auto_assign_file_column when parameterized match exists assigns the matching file column.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3:1\"}}","Spree::ImportMapping at ./spec/models/spree/import_mapping_spec.rb.Associations example at ./spec/models/spree/import_mapping_spec.rb:9.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::ImportMapping at ./spec/models/spree/import_mapping_spec.rb.Validations presence validations validates presence of import.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","Spree::ImportMapping at ./spec/models/spree/import_mapping_spec.rb.Validations presence validations validates presence of schema_field.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:2\"}}","Spree::ImportMapping at ./spec/models/spree/import_mapping_spec.rb.Validations uniqueness validations allows blank file_column.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:4\"}}","Spree::ImportMapping at ./spec/models/spree/import_mapping_spec.rb.Validations uniqueness validations allows same file_column for different imports.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:5\"}}","Spree::ImportMapping at ./spec/models/spree/import_mapping_spec.rb.Validations uniqueness validations allows same schema_field for different imports.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:2\"}}","Spree::ImportMapping at ./spec/models/spree/import_mapping_spec.rb.Validations uniqueness validations validates uniqueness of file_column scoped to import_id.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:3\"}}","Spree::ImportMapping at ./spec/models/spree/import_mapping_spec.rb.Validations uniqueness validations validates uniqueness of schema_field scoped to import_id.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","Spree::ImportRow at ./spec/models/spree/import_row_spec.rb.#attribute_by_schema_field returns the mapped attribute value.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","Spree::ImportRow at ./spec/models/spree/import_row_spec.rb.#data_json with invalid JSON data returns empty hash.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1\"}}","Spree::ImportRow at ./spec/models/spree/import_row_spec.rb.#data_json with valid JSON data memoizes the result.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:2\"}}","Spree::ImportRow at ./spec/models/spree/import_row_spec.rb.#data_json with valid JSON data returns parsed JSON.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:1\"}}","Spree::ImportRow at ./spec/models/spree/import_row_spec.rb.#process! when processing fails reports the error to Rails.error.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2:3\"}}","Spree::ImportRow at ./spec/models/spree/import_row_spec.rb.#process! when processing fails sets validation errors.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2:2\"}}","Spree::ImportRow at ./spec/models/spree/import_row_spec.rb.#process! when processing fails transitions to failed.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2:1\"}}","Spree::ImportRow at ./spec/models/spree/import_row_spec.rb.#process! when processing succeeds sets the item.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1:2\"}}","Spree::ImportRow at ./spec/models/spree/import_row_spec.rb.#process! when processing succeeds transitions to processing then completed.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1:1\"}}","Spree::ImportRow at ./spec/models/spree/import_row_spec.rb.#to_schema_hash returns attributes mapped to schema fields.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","Spree::ImportRow at ./spec/models/spree/import_row_spec.rb.Associations #store delegates to import.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","Spree::ImportRow at ./spec/models/spree/import_row_spec.rb.Scopes .completed returns only completed rows.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1\"}}","Spree::ImportRow at ./spec/models/spree/import_row_spec.rb.Scopes .failed returns only failed rows.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3:1\"}}","Spree::ImportRow at ./spec/models/spree/import_row_spec.rb.Scopes .pending_and_failed returns pending and failed rows.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1\"}}","Spree::ImportRow at ./spec/models/spree/import_row_spec.rb.Scopes .processed returns completed and failed rows.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:4:1\"}}","Spree::ImportRow at ./spec/models/spree/import_row_spec.rb.State machine complete event publishes import_row.complete event.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4:2\"}}","Spree::ImportRow at ./spec/models/spree/import_row_spec.rb.State machine complete event transitions from processing to completed.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4:1\"}}","Spree::ImportRow at ./spec/models/spree/import_row_spec.rb.State machine fail event publishes import_row.fail event.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3:2\"}}","Spree::ImportRow at ./spec/models/spree/import_row_spec.rb.State machine fail event transitions from processing to failed.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3:1\"}}","Spree::ImportRow at ./spec/models/spree/import_row_spec.rb.State machine initial state starts in pending state.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","Spree::ImportRow at ./spec/models/spree/import_row_spec.rb.State machine start_processing event transitions from pending to processing.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","Spree::ImportRow at ./spec/models/spree/import_row_spec.rb.Validations row_number uniqueness allows same row_number for different imports.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:2\"}}","Spree::ImportRow at ./spec/models/spree/import_row_spec.rb.Validations row_number uniqueness validates uniqueness scoped to import_id.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","Spree::Imports::CreateRowsJob at ./spec/jobs/spree/imports/create_rows_job_spec.rb.creates import rows from the CSV file.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","Spree::Imports::CreateRowsJob at ./spec/jobs/spree/imports/create_rows_job_spec.rb.enqueues process_rows_async after rows creation.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4\"}}","Spree::Imports::CreateRowsJob at ./spec/jobs/spree/imports/create_rows_job_spec.rb.persists rows count.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3\"}}","Spree::Imports::CreateRowsJob at ./spec/jobs/spree/imports/create_rows_job_spec.rb.transitions import to processing if not already processing.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2\"}}","Spree::Imports::CreateRowsJob at ./spec/jobs/spree/imports/create_rows_job_spec.rb.when CSV is malformed sets processing_errors and fails the import.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","Spree::Imports::ProcessRowsJob at ./spec/jobs/spree/imports/process_rows_job_spec.rb.marks import as complete after processing all rows.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2\"}}","Spree::Imports::ProcessRowsJob at ./spec/jobs/spree/imports/process_rows_job_spec.rb.processes pending and failed rows.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","Spree::Imports::RowProcessors::ProductVariant at ./spec/services/spree/imports/row_processors/product_variant_spec.rb.when importing a master variant product row creates a product and sets correct attributes.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::Imports::RowProcessors::ProductVariant at ./spec/services/spree/imports/row_processors/product_variant_spec.rb.when importing a master variant product row when updating an existing master variant updates inventory_count and inventory_backorderable.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","Spree::Imports::RowProcessors::ProductVariant at ./spec/services/spree/imports/row_processors/product_variant_spec.rb.when importing a variant row with a new option type/value creates a new option type and value as needed.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","Spree::Imports::RowProcessors::ProductVariant at ./spec/services/spree/imports/row_processors/product_variant_spec.rb.when importing a variant row with options assigns to existing product and creates/re-uses option values.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","Spree::Imports::RowProcessors::ProductVariant at ./spec/services/spree/imports/row_processors/product_variant_spec.rb.when importing a variant row with options but product does not exist raises ActiveRecord::RecordNotFound.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","Spree::Imports::RowProcessors::ProductVariant at ./spec/services/spree/imports/row_processors/product_variant_spec.rb.when importing a variant row with options but slug is missing raises ActiveRecord::RecordNotFound with descriptive message.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1\"}}","Spree::Imports::RowProcessors::ProductVariant at ./spec/services/spree/imports/row_processors/product_variant_spec.rb.when importing a variant row with options when importing a variant row for existing variant updates the variant.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","Spree::Imports::RowProcessors::ProductVariant at ./spec/services/spree/imports/row_processors/product_variant_spec.rb.when importing a variant row with options when importing a variant row for existing variant when updating inventory values updates inventory_count and inventory_backorderable.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:2:1\"}}","Spree::Imports::RowProcessors::ProductVariant at ./spec/services/spree/imports/row_processors/product_variant_spec.rb.when importing a variant with all option columns empty does not create a variant.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","Spree::Imports::RowProcessors::ProductVariant at ./spec/services/spree/imports/row_processors/product_variant_spec.rb.when importing with shipping_category when shipping_category does not exist assigns the default shipping category.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2:1\"}}","Spree::Imports::RowProcessors::ProductVariant at ./spec/services/spree/imports/row_processors/product_variant_spec.rb.when importing with shipping_category when shipping_category exists assigns the shipping category to the product.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1:1\"}}","Spree::Imports::RowProcessors::ProductVariant at ./spec/services/spree/imports/row_processors/product_variant_spec.rb.when importing with shipping_category when shipping_category is not provided assigns the default shipping category.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:4:1\"}}","Spree::Imports::RowProcessors::ProductVariant at ./spec/services/spree/imports/row_processors/product_variant_spec.rb.when importing with shipping_category when updating product with different shipping_category updates the shipping category.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:3:1\"}}","Spree::Imports::RowProcessors::ProductVariant at ./spec/services/spree/imports/row_processors/product_variant_spec.rb.when importing with tax_category when importing a non-master variant with tax_category assigns tax category to the non-master variant.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:5:1\"}}","Spree::Imports::RowProcessors::ProductVariant at ./spec/services/spree/imports/row_processors/product_variant_spec.rb.when importing with tax_category when tax_category does not exist does not assign a tax category.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:2:1\"}}","Spree::Imports::RowProcessors::ProductVariant at ./spec/services/spree/imports/row_processors/product_variant_spec.rb.when importing with tax_category when tax_category exists assigns the tax category to the variant.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:1:1\"}}","Spree::Imports::RowProcessors::ProductVariant at ./spec/services/spree/imports/row_processors/product_variant_spec.rb.when importing with tax_category when tax_category is not provided does not assign a tax category.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:4:1\"}}","Spree::Imports::RowProcessors::ProductVariant at ./spec/services/spree/imports/row_processors/product_variant_spec.rb.when importing with tax_category when updating variant with different tax_category updates the tax category.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:3:1\"}}","Spree::Imports::RowProcessors::ProductVariant at ./spec/services/spree/imports/row_processors/product_variant_spec.rb.when variant row refers to missing product slug creates a new product and assigns the variant as its master if no option1_name given.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1\"}}","Spree::Imports::RowProcessors::ProductVariant at ./spec/services/spree/imports/row_processors/product_variant_spec.rb.with images saves the images.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","Spree::Imports::RowProcessors::ProductVariant at ./spec/services/spree/imports/row_processors/product_variant_spec.rb.with metafields auto-assigns file_column for metafield mappings when CSV headers match.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:2\"}}","Spree::Imports::RowProcessors::ProductVariant at ./spec/services/spree/imports/row_processors/product_variant_spec.rb.with metafields creates mappings for metafields automatically.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1\"}}","Spree::Imports::RowProcessors::ProductVariant at ./spec/services/spree/imports/row_processors/product_variant_spec.rb.with metafields sets metafields on the product.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:3\"}}","Spree::Imports::RowProcessors::ProductVariant at ./spec/services/spree/imports/row_processors/product_variant_spec.rb.with metafields when metafield value is blank skips blank metafield values.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:5:1\"}}","Spree::Imports::RowProcessors::ProductVariant at ./spec/services/spree/imports/row_processors/product_variant_spec.rb.with metafields when processing a non-master variant row does not clear out existing metafield values.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:7:1\"}}","Spree::Imports::RowProcessors::ProductVariant at ./spec/services/spree/imports/row_processors/product_variant_spec.rb.with metafields when updating an existing product with metafields updates existing metafields.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:4:1\"}}","Spree::Imports::RowProcessors::ProductVariant at ./spec/services/spree/imports/row_processors/product_variant_spec.rb.with metafields when updating existing product metafields with blank values removes existing metafield when empty value is uploaded.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:6:1\"}}","Spree::Imports::RowProcessors::ProductVariant at ./spec/services/spree/imports/row_processors/product_variant_spec.rb.with metafields when updating existing product metafields with blank values when all metafields have blank values removes all existing metafields.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:6:2:1\"}}","Spree::Imports::RowProcessors::ProductVariant at ./spec/services/spree/imports/row_processors/product_variant_spec.rb.with taxons assigns taxons to the product.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","Spree::Imports::RowProcessors::ProductVariant at ./spec/services/spree/imports/row_processors/product_variant_spec.rb.with taxons when importing a variant row with no taxons keeps the product taxons.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:5:1\"}}","Spree::Imports::RowProcessors::ProductVariant at ./spec/services/spree/imports/row_processors/product_variant_spec.rb.with taxons when taxons are not provided assigns no taxons to the product.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3:1\"}}","Spree::Imports::RowProcessors::ProductVariant at ./spec/services/spree/imports/row_processors/product_variant_spec.rb.with taxons when taxons format is invalid skips invalid taxons.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:4:1\"}}","Spree::Imports::RowProcessors::ProductVariant at ./spec/services/spree/imports/row_processors/product_variant_spec.rb.with taxons when the taxons already exist assigns the existing taxons to the product.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1\"}}","Spree::Integration at ./spec/models/spree/integration_spec.rb.example at ./spec/models/spree/integration_spec.rb:7.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","Spree::InventoryUnit at ./spec/models/spree/inventory_unit_spec.rb.#additional_tax_total is the correct amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","Spree::InventoryUnit at ./spec/models/spree/inventory_unit_spec.rb.#additional_tax_total is the correct amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","Spree::InventoryUnit at ./spec/models/spree/inventory_unit_spec.rb.#backordered_for_stock_item does not change shipping cost when fulfilling the order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:5\"}}","Spree::InventoryUnit at ./spec/models/spree/inventory_unit_spec.rb.#backordered_for_stock_item does not find inventory units that aren't backordered.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3\"}}","Spree::InventoryUnit at ./spec/models/spree/inventory_unit_spec.rb.#backordered_for_stock_item does not find inventory units that don't match the stock item's variant.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:4\"}}","Spree::InventoryUnit at ./spec/models/spree/inventory_unit_spec.rb.#backordered_for_stock_item finds inventory units from its stock location when the unit's variant matches the stock item's variant.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","Spree::InventoryUnit at ./spec/models/spree/inventory_unit_spec.rb.#backordered_for_stock_item other shipments does not find inventory units belonging to incomplete orders.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:6:1\"}}","Spree::InventoryUnit at ./spec/models/spree/inventory_unit_spec.rb.#backordered_for_stock_item returns modifiable objects.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","Spree::InventoryUnit at ./spec/models/spree/inventory_unit_spec.rb.#charged_amount is the correct amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1\"}}","Spree::InventoryUnit at ./spec/models/spree/inventory_unit_spec.rb.#current_or_new_return_item associated with a return item connects return_authorizations.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:3\"}}","Spree::InventoryUnit at ./spec/models/spree/inventory_unit_spec.rb.#current_or_new_return_item associated with a return item returns a persisted return item.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1\"}}","Spree::InventoryUnit at ./spec/models/spree/inventory_unit_spec.rb.#current_or_new_return_item associated with a return item returns it's associated return_item.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:2\"}}","Spree::InventoryUnit at ./spec/models/spree/inventory_unit_spec.rb.#current_or_new_return_item no associated return item associates itself to the new return_item.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:2\"}}","Spree::InventoryUnit at ./spec/models/spree/inventory_unit_spec.rb.#current_or_new_return_item no associated return item returns a new return item.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1\"}}","Spree::InventoryUnit at ./spec/models/spree/inventory_unit_spec.rb.#finalize_units! creates a stock movement.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","Spree::InventoryUnit at ./spec/models/spree/inventory_unit_spec.rb.#included_tax_total is the correct amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","Spree::InventoryUnit at ./spec/models/spree/inventory_unit_spec.rb.#included_tax_total is the correct amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1\"}}","Spree::InventoryUnit at ./spec/models/spree/inventory_unit_spec.rb.scopes .backordered example at ./spec/models/spree/inventory_unit_spec.rb:14.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","Spree::InventoryUnit at ./spec/models/spree/inventory_unit_spec.rb.scopes .on_hand example at ./spec/models/spree/inventory_unit_spec.rb:18.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","Spree::InventoryUnit at ./spec/models/spree/inventory_unit_spec.rb.scopes .on_hand_or_backordered example at ./spec/models/spree/inventory_unit_spec.rb:22.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","Spree::InventoryUnit at ./spec/models/spree/inventory_unit_spec.rb.scopes .returned example at ./spec/models/spree/inventory_unit_spec.rb:30.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5:1\"}}","Spree::InventoryUnit at ./spec/models/spree/inventory_unit_spec.rb.scopes .shipped example at ./spec/models/spree/inventory_unit_spec.rb:26.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1\"}}","Spree::Invitation at ./spec/models/spree/invitation_spec.rb.#expired? returns false when expires_at is in the future.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2\"}}","Spree::Invitation at ./spec/models/spree/invitation_spec.rb.#expired? returns true when expires_at is in the past.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","Spree::Invitation at ./spec/models/spree/invitation_spec.rb.#resend! does not publish event if invitation is accepted.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3\"}}","Spree::Invitation at ./spec/models/spree/invitation_spec.rb.#resend! does not publish event if invitation is expired.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2\"}}","Spree::Invitation at ./spec/models/spree/invitation_spec.rb.#resend! publishes invitation.resent event if invitation is pending and not expired.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","Spree::Invitation at ./spec/models/spree/invitation_spec.rb.Callbacks sets defaults on initialization.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","Spree::Invitation at ./spec/models/spree/invitation_spec.rb.Callbacks sets invitee from email before validation.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","Spree::Invitation at ./spec/models/spree/invitation_spec.rb.State Machine has initial state of pending.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","Spree::Invitation at ./spec/models/spree/invitation_spec.rb.State Machine when accepting an invitation changes status to accepted.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","Spree::Invitation at ./spec/models/spree/invitation_spec.rb.State Machine when accepting an invitation creates a resource user.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:4\"}}","Spree::Invitation at ./spec/models/spree/invitation_spec.rb.State Machine when accepting an invitation publishes invitation.accept event.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:3\"}}","Spree::Invitation at ./spec/models/spree/invitation_spec.rb.State Machine when accepting an invitation sets accepted_at timestamp.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:2\"}}","Spree::Invitation at ./spec/models/spree/invitation_spec.rb.Validations when invitation is accepted after expiration is invalid.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","Spree::Invitation at ./spec/models/spree/invitation_spec.rb.Validations when invitee already exists in the store is invalid.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","Spree::Invitation at ./spec/models/spree/invitation_spec.rb.Validations when invitee is the same as inviter is invalid.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","Spree::InvitationEmailSubscriber at ./spec/subscribers/spree/invitation_email_subscriber_spec.rb.invitation.accepted event sends acceptance notification email.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","Spree::InvitationEmailSubscriber at ./spec/subscribers/spree/invitation_email_subscriber_spec.rb.invitation.accepted event when invitation not found does not raise an error.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","Spree::InvitationEmailSubscriber at ./spec/subscribers/spree/invitation_email_subscriber_spec.rb.invitation.created event sends invitation email.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::InvitationEmailSubscriber at ./spec/subscribers/spree/invitation_email_subscriber_spec.rb.invitation.created event when invitation not found does not raise an error.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","Spree::InvitationEmailSubscriber at ./spec/subscribers/spree/invitation_email_subscriber_spec.rb.invitation.resent event resends invitation email.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","Spree::InvitationEmailSubscriber at ./spec/subscribers/spree/invitation_email_subscriber_spec.rb.invitation.resent event when invitation is accepted does not send invitation email.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3:1\"}}","Spree::InvitationEmailSubscriber at ./spec/subscribers/spree/invitation_email_subscriber_spec.rb.invitation.resent event when invitation is deleted does not send invitation email.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4:1\"}}","Spree::InvitationEmailSubscriber at ./spec/subscribers/spree/invitation_email_subscriber_spec.rb.invitation.resent event when invitation is expired does not send invitation email.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","Spree::InvitationEmailSubscriber at ./spec/subscribers/spree/invitation_email_subscriber_spec.rb.invitation.resent event when invitation not found does not raise an error.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:5:1\"}}","Spree::InvitationMailer at ./spec/mailers/spree/invitation_mailer_spec.rb.#invitation_accepted includes the invitee name in the body.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","Spree::InvitationMailer at ./spec/mailers/spree/invitation_mailer_spec.rb.#invitation_accepted renders the subject.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","Spree::InvitationMailer at ./spec/mailers/spree/invitation_mailer_spec.rb.#invitation_accepted sends from the store mail from address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:4\"}}","Spree::InvitationMailer at ./spec/mailers/spree/invitation_mailer_spec.rb.#invitation_accepted sends to the correct recipient.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3\"}}","Spree::InvitationMailer at ./spec/mailers/spree/invitation_mailer_spec.rb.#invitation_accepted sets reply-to as the store mail from address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:5\"}}","Spree::InvitationMailer at ./spec/mailers/spree/invitation_mailer_spec.rb.#invitation_email includes the invitation link in the body.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","Spree::InvitationMailer at ./spec/mailers/spree/invitation_mailer_spec.rb.#invitation_email renders the subject.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::InvitationMailer at ./spec/mailers/spree/invitation_mailer_spec.rb.#invitation_email sends from the store mail from address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","Spree::InvitationMailer at ./spec/mailers/spree/invitation_mailer_spec.rb.#invitation_email sends to the correct recipient.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","Spree::InvitationMailer at ./spec/mailers/spree/invitation_mailer_spec.rb.#invitation_email sets reply-to as the store mail from address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","Spree::LegacyUser at ./spec/models/spree/admin_user_spec.rb.#can_be_deleted? when store has no other admin users example at ./spec/models/spree/admin_user_spec.rb:18.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","Spree::LegacyUser at ./spec/models/spree/admin_user_spec.rb.#can_be_deleted? when store has other admin users example at ./spec/models/spree/admin_user_spec.rb:14.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","Spree::LegacyUser at ./spec/models/spree/admin_user_spec.rb.#can_be_deleted? when the user does not have admin role example at ./spec/models/spree/admin_user_spec.rb:24.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","Spree::LegacyUser at ./spec/models/spree/admin_user_spec.rb.#destroy (regression tests) admin user invited other other users accept invitation does not remove other user's role.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1:1\"}}","Spree::LegacyUser at ./spec/models/spree/admin_user_spec.rb.Callbacks cleans up admin user resources nullifies admin user resources.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","Spree::LegacyUser at ./spec/models/spree/user_spec.rb.#available_store_credits user does not have any associated store credits returns empty array.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:3:1:1\"}}","Spree::LegacyUser at ./spec/models/spree/user_spec.rb.#available_store_credits user has several associated store credits store credits have never been used returns store credit amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:3:2:1:1\"}}","Spree::LegacyUser at ./spec/models/spree/user_spec.rb.#available_store_credits user has several associated store credits store credits in different currencies exits returns sum of amounts.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:3:2:2:1\"}}","Spree::LegacyUser at ./spec/models/spree/user_spec.rb.#can_be_deleted? when user has completed orders example at ./spec/models/spree/user_spec.rb:18.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","Spree::LegacyUser at ./spec/models/spree/user_spec.rb.#can_be_deleted? when user has no completed orders example at ./spec/models/spree/user_spec.rb:24.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","Spree::LegacyUser at ./spec/models/spree/user_spec.rb.#event_serializer_class example at ./spec/models/spree/user_spec.rb:9.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","Spree::LegacyUser at ./spec/models/spree/user_spec.rb.#full_name when both first and last names are nil does not raise error and returns nil.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1\"}}","Spree::LegacyUser at ./spec/models/spree/user_spec.rb.#full_name when names are present returns the full name of the user.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1\"}}","Spree::LegacyUser at ./spec/models/spree/user_spec.rb.#last_incomplete_order payment source drops payment source.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3:2\"}}","Spree::LegacyUser at ./spec/models/spree/user_spec.rb.#last_incomplete_order payment source has payment sources.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3:1\"}}","Spree::LegacyUser at ./spec/models/spree/user_spec.rb.#last_incomplete_order persists order address copies over order addresses.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1\"}}","Spree::LegacyUser at ./spec/models/spree/user_spec.rb.#last_incomplete_order persists order address doesnt create new addresses if user has already.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:2\"}}","Spree::LegacyUser at ./spec/models/spree/user_spec.rb.#last_incomplete_order persists order address set both bill and ship address id on subject.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:3\"}}","Spree::LegacyUser at ./spec/models/spree/user_spec.rb.#last_incomplete_order returns correct order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","Spree::LegacyUser at ./spec/models/spree/user_spec.rb.#total_available_store_credit user does not have any associated store credits returns 0.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:2:1:1\"}}","Spree::LegacyUser at ./spec/models/spree/user_spec.rb.#total_available_store_credit user has several associated store credits all store credits have never been used or authorized returns sum of amounts.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:2:2:3:1\"}}","Spree::LegacyUser at ./spec/models/spree/user_spec.rb.#total_available_store_credit user has several associated store credits part of the store credit has been used part of the store credit has been authorized returns sum of amounts minus used amount and authorized amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:2:2:1:1:1\"}}","Spree::LegacyUser at ./spec/models/spree/user_spec.rb.#total_available_store_credit user has several associated store credits part of the store credit has been used there are no authorized amounts on any of the store credits returns sum of amounts minus used amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:2:2:1:2:1\"}}","Spree::LegacyUser at ./spec/models/spree/user_spec.rb.#total_available_store_credit user has several associated store credits store credits have never been used part of the store credit has been authorized returns sum of amounts minus authorized amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:2:2:2:1:1\"}}","Spree::LegacyUser at ./spec/models/spree/user_spec.rb.#total_available_store_credit user has several associated store credits store credits have never been used there are no authorized amounts on any of the store credits returns sum of amounts.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:2:2:2:2:1\"}}","Spree::LegacyUser at ./spec/models/spree/user_spec.rb.address book has many addresses.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:4:1\"}}","Spree::LegacyUser at ./spec/models/spree/user_spec.rb.behaves like lifecycle events lifecycle events legacy_user.created publishes created event when record is created.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","Spree::LegacyUser at ./spec/models/spree/user_spec.rb.behaves like lifecycle events lifecycle events legacy_user.deleted publishes deleted event when record is deleted.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:1\"}}","Spree::LegacyUser at ./spec/models/spree/user_spec.rb.behaves like lifecycle events lifecycle events legacy_user.updated publishes updated event when record is updated.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","Spree::LegacyUser at ./spec/models/spree/user_spec.rb.reporting #average_order_value with orders returns the average completed order price for the user.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:1:4:1:1\"}}","Spree::LegacyUser at ./spec/models/spree/user_spec.rb.reporting #average_order_value without orders returns 0.00.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:1:4:2:1\"}}","Spree::LegacyUser at ./spec/models/spree/user_spec.rb.reporting #display_average_order_value returns a Spree::Money version of average_order_value.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:1:5:1\"}}","Spree::LegacyUser at ./spec/models/spree/user_spec.rb.reporting #display_lifetime_value returns a Spree::Money version of lifetime_value.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:1:2:1\"}}","Spree::LegacyUser at ./spec/models/spree/user_spec.rb.reporting #lifetime_value with orders returns the total of completed orders for the user.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:1:1:1:1\"}}","Spree::LegacyUser at ./spec/models/spree/user_spec.rb.reporting #lifetime_value without orders returns 0.00.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:1:1:2:1\"}}","Spree::LegacyUser at ./spec/models/spree/user_spec.rb.reporting #order_count returns the count of completed orders for the user.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:1:3:1\"}}","Spree::LegacyUser at ./spec/models/spree/user_spec.rb.reporting #report_values_for when order purchases in other currencies exist average_order_value with orders returns a list of average completed order prices for the user.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:1:6:1:2:1:1\"}}","Spree::LegacyUser at ./spec/models/spree/user_spec.rb.reporting #report_values_for when order purchases in other currencies exist lifetime_value returns a list of store lifetime values.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:1:6:1:1:1\"}}","Spree::LegacyUser at ./spec/models/spree/user_spec.rb.validations #address_not_associated_with_other_user bill_address when associated bill address belongs to other user assigns error to bill address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:5:1:1:3:2\"}}","Spree::LegacyUser at ./spec/models/spree/user_spec.rb.validations #address_not_associated_with_other_user bill_address when associated bill address belongs to other user behaves like invalid is invalid.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:5:1:1:3:1:1\"}}","Spree::LegacyUser at ./spec/models/spree/user_spec.rb.validations #address_not_associated_with_other_user bill_address when default bill address belongs to user behaves like valid is valid.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:5:1:1:2:1:1\"}}","Spree::LegacyUser at ./spec/models/spree/user_spec.rb.validations #address_not_associated_with_other_user bill_address when default bill address does not belong to any user behaves like valid is valid.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:5:1:1:1:1:1\"}}","Spree::LegacyUser at ./spec/models/spree/user_spec.rb.validations #address_not_associated_with_other_user ship_address when associated ship address belongs to other user assigns error to ship address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:5:1:2:3:2\"}}","Spree::LegacyUser at ./spec/models/spree/user_spec.rb.validations #address_not_associated_with_other_user ship_address when associated ship address belongs to other user behaves like invalid is invalid.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:5:1:2:3:1:1\"}}","Spree::LegacyUser at ./spec/models/spree/user_spec.rb.validations #address_not_associated_with_other_user ship_address when default ship address belongs to user behaves like valid is valid.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:5:1:2:2:1:1\"}}","Spree::LegacyUser at ./spec/models/spree/user_spec.rb.validations #address_not_associated_with_other_user ship_address when default ship address does not belong to any user behaves like valid is valid.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:5:1:2:1:1:1\"}}","Spree::LegacyUser at ./spec/models/spree/user_spec.rb.validations #address_not_deprecated_in_completed_order bill_address when default bill address is associated to completed order when default bill address is the same as associated to order behaves like valid is valid.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:5:2:1:3:1:2:1\"}}","Spree::LegacyUser at ./spec/models/spree/user_spec.rb.validations #address_not_deprecated_in_completed_order bill_address when default bill address is associated to completed order when default bill address is the same as associated to order example at ./spec/models/spree/user_spec.rb:437.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:5:2:1:3:1:1\"}}","Spree::LegacyUser at ./spec/models/spree/user_spec.rb.validations #address_not_deprecated_in_completed_order bill_address when default bill address is associated to completed order when user changed bill address which was used in completed order so the old one is deprecated assigns error to bill address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:5:2:1:3:2:3\"}}","Spree::LegacyUser at ./spec/models/spree/user_spec.rb.validations #address_not_deprecated_in_completed_order bill_address when default bill address is associated to completed order when user changed bill address which was used in completed order so the old one is deprecated behaves like invalid is invalid.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:5:2:1:3:2:2:1\"}}","Spree::LegacyUser at ./spec/models/spree/user_spec.rb.validations #address_not_deprecated_in_completed_order bill_address when default bill address is associated to completed order when user changed bill address which was used in completed order so the old one is deprecated example at ./spec/models/spree/user_spec.rb:445.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:5:2:1:3:2:1\"}}","Spree::LegacyUser at ./spec/models/spree/user_spec.rb.validations #address_not_deprecated_in_completed_order bill_address when default bill address is associated to uncompleted order behaves like valid is valid.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:5:2:1:2:1:1\"}}","Spree::LegacyUser at ./spec/models/spree/user_spec.rb.validations #address_not_deprecated_in_completed_order bill_address when default bill address is not associated to completed order behaves like valid is valid.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:5:2:1:1:1:1\"}}","Spree::LegacyUser at ./spec/models/spree/user_spec.rb.validations #address_not_deprecated_in_completed_order ship_address when default ship address is associated to completed order when default ship address is the same as associated to order behaves like valid is valid.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:5:2:2:3:1:2:1\"}}","Spree::LegacyUser at ./spec/models/spree/user_spec.rb.validations #address_not_deprecated_in_completed_order ship_address when default ship address is associated to completed order when default ship address is the same as associated to order example at ./spec/models/spree/user_spec.rb:476.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:5:2:2:3:1:1\"}}","Spree::LegacyUser at ./spec/models/spree/user_spec.rb.validations #address_not_deprecated_in_completed_order ship_address when default ship address is associated to completed order when user changed ship address which was used in completed order so the old one is deprecated assigns error to ship address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:5:2:2:3:2:3\"}}","Spree::LegacyUser at ./spec/models/spree/user_spec.rb.validations #address_not_deprecated_in_completed_order ship_address when default ship address is associated to completed order when user changed ship address which was used in completed order so the old one is deprecated behaves like invalid is invalid.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:5:2:2:3:2:2:1\"}}","Spree::LegacyUser at ./spec/models/spree/user_spec.rb.validations #address_not_deprecated_in_completed_order ship_address when default ship address is associated to completed order when user changed ship address which was used in completed order so the old one is deprecated example at ./spec/models/spree/user_spec.rb:484.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:5:2:2:3:2:1\"}}","Spree::LegacyUser at ./spec/models/spree/user_spec.rb.validations #address_not_deprecated_in_completed_order ship_address when default ship address is associated to uncompleted order behaves like valid is valid.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:5:2:2:2:1:1\"}}","Spree::LegacyUser at ./spec/models/spree/user_spec.rb.validations #address_not_deprecated_in_completed_order ship_address when default ship address is not associated to completed order behaves like valid is valid.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:5:2:2:1:1:1\"}}","Spree::LineItem at ./spec/models/spree/line_item_spec.rb.#amount returns the amount for the line item.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:27:1\"}}","Spree::LineItem at ./spec/models/spree/line_item_spec.rb.#compare_at_amount returns the compare at amount for the line item.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:1\"}}","Spree::LineItem at ./spec/models/spree/line_item_spec.rb.#compare_at_amount when compare_at_price is nil returns zero.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:2:1\"}}","Spree::LineItem at ./spec/models/spree/line_item_spec.rb.#compare_at_amount when compare_at_price is zero returns zero.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:3:1\"}}","Spree::LineItem at ./spec/models/spree/line_item_spec.rb.#copy_price copies over a variant's prices.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1\"}}","Spree::LineItem at ./spec/models/spree/line_item_spec.rb.#copy_price no price available in the selected currency doesn't copy the price.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:3:1\"}}","Spree::LineItem at ./spec/models/spree/line_item_spec.rb.#copy_price no price available in the selected currency shouldn't be valid.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:3:2\"}}","Spree::LineItem at ./spec/models/spree/line_item_spec.rb.#copy_price variant price amount is equal 0 copies over a variant's price.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2:1\"}}","Spree::LineItem at ./spec/models/spree/line_item_spec.rb.#copy_price variant price amount is equal 0 should be valid.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2:2\"}}","Spree::LineItem at ./spec/models/spree/line_item_spec.rb.#copy_tax_category copies over a variant's tax category.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:1\"}}","Spree::LineItem at ./spec/models/spree/line_item_spec.rb.#create when order does not have a tax zone does not create a tax adjustment.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:2:1\"}}","Spree::LineItem at ./spec/models/spree/line_item_spec.rb.#create when order has a tax zone creates a tax adjustment.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1:1\"}}","Spree::LineItem at ./spec/models/spree/line_item_spec.rb.#destroy deletes inventory units.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1\"}}","Spree::LineItem at ./spec/models/spree/line_item_spec.rb.#dimensions_unit returns the dimension unit for the line item.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:32:1\"}}","Spree::LineItem at ./spec/models/spree/line_item_spec.rb.#discontinued fetches discontinued products.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","Spree::LineItem at ./spec/models/spree/line_item_spec.rb.#discontinued fetches discontinued variants.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2\"}}","Spree::LineItem at ./spec/models/spree/line_item_spec.rb.#discounted_amount returns the amount minus any discounts.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:1\"}}","Spree::LineItem at ./spec/models/spree/line_item_spec.rb.#discounted_money returns a money object with the discounted amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:1\"}}","Spree::LineItem at ./spec/models/spree/line_item_spec.rb.#discounted_price returns the discounted price for the line item.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:36:1\"}}","Spree::LineItem at ./spec/models/spree/line_item_spec.rb.#discounted_price when line item promo_total is zero returns the price for the line item.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:36:2:1\"}}","Spree::LineItem at ./spec/models/spree/line_item_spec.rb.#discounted_price when quantity is zero returns the price for the line item.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:36:3:1\"}}","Spree::LineItem at ./spec/models/spree/line_item_spec.rb.#display_amount returns the amount for the line item.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:28:1\"}}","Spree::LineItem at ./spec/models/spree/line_item_spec.rb.#display_compare_at_amount returns the compare at amount for the line item.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:30:1\"}}","Spree::LineItem at ./spec/models/spree/line_item_spec.rb.#ensure_valid_quantity quantity < 0 example at ./spec/models/spree/line_item_spec.rb:57.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1\"}}","Spree::LineItem at ./spec/models/spree/line_item_spec.rb.#ensure_valid_quantity quantity = 0 example at ./spec/models/spree/line_item_spec.rb:66.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3:1\"}}","Spree::LineItem at ./spec/models/spree/line_item_spec.rb.#ensure_valid_quantity quantity > 0 example at ./spec/models/spree/line_item_spec.rb:77.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:4:1\"}}","Spree::LineItem at ./spec/models/spree/line_item_spec.rb.#ensure_valid_quantity quantity.nil? example at ./spec/models/spree/line_item_spec.rb:48.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:1\"}}","Spree::LineItem at ./spec/models/spree/line_item_spec.rb.#item_weight returns the weight for the line item.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:31:1\"}}","Spree::LineItem at ./spec/models/spree/line_item_spec.rb.#money returns a Spree::Money representing the total for this line item.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:17:1\"}}","Spree::LineItem at ./spec/models/spree/line_item_spec.rb.#options= can handle updating a blank line item with no order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:22:1\"}}","Spree::LineItem at ./spec/models/spree/line_item_spec.rb.#options= updates the data provided in the options.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:22:2\"}}","Spree::LineItem at ./spec/models/spree/line_item_spec.rb.#options= updates the price based on the options provided.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:22:3\"}}","Spree::LineItem at ./spec/models/spree/line_item_spec.rb.#quantity allows to set different value for quantity.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2\"}}","Spree::LineItem at ./spec/models/spree/line_item_spec.rb.#quantity has a default quantity of 1.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","Spree::LineItem at ./spec/models/spree/line_item_spec.rb.#recalculate_price when creating line item with quantity meeting volume threshold applies volume price on initial creation.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:35:3:1\"}}","Spree::LineItem at ./spec/models/spree/line_item_spec.rb.#recalculate_price when creating line item with quantity meeting volume threshold does not apply volume price when quantity is below threshold.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:35:3:2\"}}","Spree::LineItem at ./spec/models/spree/line_item_spec.rb.#recalculate_price with volume-based pricing reverts to base price when quantity decreases below volume threshold.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:35:1:2\"}}","Spree::LineItem at ./spec/models/spree/line_item_spec.rb.#recalculate_price with volume-based pricing updates price when quantity increases to meet volume threshold.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:35:1:1\"}}","Spree::LineItem at ./spec/models/spree/line_item_spec.rb.#recalculate_price with volume-based pricing when order is completed does not update price when quantity changes.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:35:1:3:1\"}}","Spree::LineItem at ./spec/models/spree/line_item_spec.rb.#recalculate_price without volume-based pricing does not change price when quantity changes.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:35:2:1\"}}","Spree::LineItem at ./spec/models/spree/line_item_spec.rb.#save line item changes triggers adjustment total recalculation.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1:1\"}}","Spree::LineItem at ./spec/models/spree/line_item_spec.rb.#save line item does not change does not trigger adjustment total recalculation.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:2:1\"}}","Spree::LineItem at ./spec/models/spree/line_item_spec.rb.#save target_shipment is provided verifies inventory.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:3:1\"}}","Spree::LineItem at ./spec/models/spree/line_item_spec.rb.#save touches the order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","Spree::LineItem at ./spec/models/spree/line_item_spec.rb.#shipments returns the shipments for the line item.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:25:1\"}}","Spree::LineItem at ./spec/models/spree/line_item_spec.rb.#shipping_cost returns the shipping cost for the line item.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:26:1\"}}","Spree::LineItem at ./spec/models/spree/line_item_spec.rb.#shipping_cost when the shipment cost is 0 returns 0.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:26:4:1\"}}","Spree::LineItem at ./spec/models/spree/line_item_spec.rb.#shipping_cost when the shipment is canceled returns 0.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:26:2:1\"}}","Spree::LineItem at ./spec/models/spree/line_item_spec.rb.#shipping_cost when the shipment is not present returns 0.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:26:3:1\"}}","Spree::LineItem at ./spec/models/spree/line_item_spec.rb.#should_update_price? when order is completed returns false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:34:2:1\"}}","Spree::LineItem at ./spec/models/spree/line_item_spec.rb.#should_update_price? when order is not completed returns true.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:34:1:1\"}}","Spree::LineItem at ./spec/models/spree/line_item_spec.rb.#single_money returns a Spree::Money representing the price for one variant.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:1\"}}","Spree::LineItem at ./spec/models/spree/line_item_spec.rb.#update_price copies over a variants differing price for another vat zone.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:1\"}}","Spree::LineItem at ./spec/models/spree/line_item_spec.rb.#update_price_from_modifier with specified currency sets currency.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:24:1:1\"}}","Spree::LineItem at ./spec/models/spree/line_item_spec.rb.#update_price_from_modifier with specified currency variant with price in this currency sets the proper price.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:24:1:2:1\"}}","Spree::LineItem at ./spec/models/spree/line_item_spec.rb.#update_price_from_modifier with specified currency variant without price in this currency sets the proper price.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:24:1:3:1\"}}","Spree::LineItem at ./spec/models/spree/line_item_spec.rb.#update_price_from_modifier without currency sets the proper price.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:24:2:1\"}}","Spree::LineItem at ./spec/models/spree/line_item_spec.rb.#weight_unit returns the weight unit for the line item.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:33:1\"}}","Spree::LineItem at ./spec/models/spree/line_item_spec.rb..currency returns the globally configured currency.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:1\"}}","Spree::LineItem at ./spec/models/spree/line_item_spec.rb.Validations ensure_proper_currency order is present when line_item's currency does not matches with order's example at ./spec/models/spree/line_item_spec.rb:23.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1:2:1\"}}","Spree::LineItem at ./spec/models/spree/line_item_spec.rb.Validations ensure_proper_currency order is present when line_item's currency matches with order's example at ./spec/models/spree/line_item_spec.rb:15.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1:1:1\"}}","Spree::LineItem at ./spec/models/spree/line_item_spec.rb.behaves like lifecycle events lifecycle events line_item.created publishes created event when record is created.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1:1\"}}","Spree::LineItem at ./spec/models/spree/line_item_spec.rb.behaves like lifecycle events lifecycle events line_item.deleted publishes deleted event when record is deleted.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:3:1\"}}","Spree::LineItem at ./spec/models/spree/line_item_spec.rb.behaves like lifecycle events lifecycle events line_item.updated publishes updated event when record is updated.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:2:1\"}}","Spree::LineItem at ./spec/models/spree/line_item_spec.rb.behaves like metadata can query records by metadata properties.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:10\"}}","Spree::LineItem at ./spec/models/spree/line_item_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:10.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","Spree::LineItem at ./spec/models/spree/line_item_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:11.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","Spree::LineItem at ./spec/models/spree/line_item_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:4.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::LineItem at ./spec/models/spree/line_item_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:5.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","Spree::LineItem at ./spec/models/spree/line_item_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:7.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","Spree::LineItem at ./spec/models/spree/line_item_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:8.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","Spree::LineItem at ./spec/models/spree/line_item_spec.rb.behaves like metadata reads data as not symbolized keys.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8\"}}","Spree::LineItem at ./spec/models/spree/line_item_spec.rb.behaves like metadata reads data as symbolized keys.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7\"}}","Spree::LineItem at ./spec/models/spree/line_item_spec.rb.currency different than order.currency is not a valid line item.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:21:1\"}}","Spree::LineItem at ./spec/models/spree/line_item_spec.rb.currency same as order.currency is a valid line item.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:20:1\"}}","Spree::LineItem at ./spec/models/spree/line_item_spec.rb.has inventory (completed order so items were already unstocked) 2 items left on stock allows to increase quantity up to stock availability.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:2:1\"}}","Spree::LineItem at ./spec/models/spree/line_item_spec.rb.has inventory (completed order so items were already unstocked) 2 items left on stock doesnt allow to increase quantity over stock availability.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:2:2\"}}","Spree::LineItem at ./spec/models/spree/line_item_spec.rb.has inventory (completed order so items were already unstocked) nothing left on stock allows to decrease item quantity.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:1:1\"}}","Spree::LineItem at ./spec/models/spree/line_item_spec.rb.has inventory (completed order so items were already unstocked) nothing left on stock doesnt allow to increase item quantity.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:1:2\"}}","Spree::LineItem at ./spec/models/spree/line_item_spec.rb.precision of pre_tax_amount keeps four digits of precision even when reloading.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:23:1\"}}","Spree::LineItems::Create at ./spec/services/spree/line_items/create_spec.rb.creates a line item with any quantity.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::LineItems::Destroy at ./spec/services/spree/line_items/destroy_spec.rb.given a shipment ensure shipment calls update_amounts instead of order calling ensure_updated_shipments.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","Spree::LineItems::Destroy at ./spec/services/spree/line_items/destroy_spec.rb.not given a shipment ensures updated shipments.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","Spree::LineItems::Destroy at ./spec/services/spree/line_items/destroy_spec.rb.remove line item with any quantity.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::LineItems::Update at ./spec/services/spree/line_items/update_spec.rb.given a shipment ensure shipment calls update_amounts instead of order calling ensure_updated_shipments.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","Spree::LineItems::Update at ./spec/services/spree/line_items/update_spec.rb.not given a shipment ensures updated shipments.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","Spree::LineItems::Update at ./spec/services/spree/line_items/update_spec.rb.updates line item with any quantity.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::LocaleHelper at ./spec/helpers/locale_helper_spec.rb.#all_locales_options example at ./spec/helpers/locale_helper_spec.rb:25.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::LocaleHelper at ./spec/helpers/locale_helper_spec.rb.#available_locales_options example at ./spec/helpers/locale_helper_spec.rb:34.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","Spree::LocaleHelper at ./spec/helpers/locale_helper_spec.rb.#locale_presentation example at ./spec/helpers/locale_helper_spec.rb:44.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","Spree::LocaleHelper at ./spec/helpers/locale_helper_spec.rb.#locale_presentation returns the locale when no translation exists.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2\"}}","Spree::LocaleHelper at ./spec/helpers/locale_helper_spec.rb.#should_render_locale_dropdown? store with multiple locales example at ./spec/helpers/locale_helper_spec.rb:55.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:1\"}}","Spree::LocaleHelper at ./spec/helpers/locale_helper_spec.rb.#should_render_locale_dropdown? store with single locale example at ./spec/helpers/locale_helper_spec.rb:61.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1\"}}","Spree::LocaleHelper at ./spec/helpers/locale_helper_spec.rb.#supported_locales_options example at ./spec/helpers/locale_helper_spec.rb:40.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","Spree::Locales::SetFallbackLocaleForStore at ./spec/services/spree/locales/set_fallback_locale_for_store_spec.rb.#call when translatable object does not have a translation in the requested locale sets mobility to retrieve value in the fallback locale.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","Spree::Locales::SetFallbackLocaleForStore at ./spec/services/spree/locales/set_fallback_locale_for_store_spec.rb.#call when translatable object has a translation in the requested locale sets mobility to retrieve value directly.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","Spree::LocalizedNumber at ./spec/lib/spree/localized_number_spec.rb..parse string argument is not modified.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1\"}}","Spree::LocalizedNumber at ./spec/lib/spree/localized_number_spec.rb..parse with a numeric price uses the price as is.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","Spree::LocalizedNumber at ./spec/lib/spree/localized_number_spec.rb..parse with decimal comma captures the proper amount for a formatted price.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","Spree::LocalizedNumber at ./spec/lib/spree/localized_number_spec.rb..parse with decimal point captures the proper amount for a formatted price.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","Spree::LocalizedNumber at ./spec/lib/spree/localized_number_spec.rb..parse with empty string returns 0.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5:1\"}}","Spree::LogEntry at ./spec/models/spree/log_entry_spec.rb.#parsed_details deserializes log entry with billing response.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::Metafield at ./spec/models/spree/metafield_spec.rb.#csv_value for Boolean metafield returns No for false values.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:2\"}}","Spree::Metafield at ./spec/models/spree/metafield_spec.rb.#csv_value for Boolean metafield returns Yes for true values.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1\"}}","Spree::Metafield at ./spec/models/spree/metafield_spec.rb.#csv_value for Json metafield returns the JSON string.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:4:1\"}}","Spree::Metafield at ./spec/models/spree/metafield_spec.rb.#csv_value for LongText metafield returns the text value.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:6:1\"}}","Spree::Metafield at ./spec/models/spree/metafield_spec.rb.#csv_value for Number metafield returns the number as string.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3:1\"}}","Spree::Metafield at ./spec/models/spree/metafield_spec.rb.#csv_value for RichText metafield returns plain text without HTML tags.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:7:1\"}}","Spree::Metafield at ./spec/models/spree/metafield_spec.rb.#csv_value for ShortText metafield returns the text value.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:5:1\"}}","Spree::Metafield at ./spec/models/spree/metafield_spec.rb.#csv_value for base Metafield returns the value as string.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:1\"}}","Spree::Metafield at ./spec/models/spree/metafield_spec.rb.#serialize_value returns the value.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","Spree::Metafield at ./spec/models/spree/metafield_spec.rb.Callbacks sets the type from the metafield definition.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::Metafield at ./spec/models/spree/metafield_spec.rb.Scopes .with_key returns the metafields with the given key.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","Spree::Metafield at ./spec/models/spree/metafield_spec.rb.Validations validates the type must match the metafield definition.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","Spree::MetafieldDefinition at ./spec/models/spree/metafield_definition_spec.rb.#csv_header_name returns the CSV header name with metafield prefix.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","Spree::MetafieldDefinition at ./spec/models/spree/metafield_definition_spec.rb.#full_key returns the full key with namespace.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","Spree::MetafieldDefinition at ./spec/models/spree/metafield_definition_spec.rb.scopes .available returns only both definitions (from DisplayOn concern).{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","Spree::MetafieldDefinition at ./spec/models/spree/metafield_definition_spec.rb.scopes .available_on_back_end returns admin definitions (back_end and both).{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","Spree::MetafieldDefinition at ./spec/models/spree/metafield_definition_spec.rb.scopes .available_on_front_end returns public definitions (front_end and both).{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","Spree::MetafieldDefinition at ./spec/models/spree/metafield_definition_spec.rb.scopes .for_resource_type returns definitions for specific resource type.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1\"}}","Spree::Metafields at ./spec/models/concerns/spree/metafields_spec.rb.#has_metafield? raises ArgumentError for invalid key_with_namespace.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:5\"}}","Spree::Metafields at ./spec/models/concerns/spree/metafields_spec.rb.#has_metafield? returns false if metafield does not exist for MetafieldDefinition.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:4\"}}","Spree::Metafields at ./spec/models/concerns/spree/metafields_spec.rb.#has_metafield? returns false if metafield does not exist for string key_with_namespace.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2\"}}","Spree::Metafields at ./spec/models/concerns/spree/metafields_spec.rb.#has_metafield? returns true if metafield exists for MetafieldDefinition.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3\"}}","Spree::Metafields at ./spec/models/concerns/spree/metafields_spec.rb.#has_metafield? returns true if metafield exists for string key_with_namespace.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","Spree::Metafields at ./spec/models/concerns/spree/metafields_spec.rb.#set_metafield and #get_metafield creates and retrieves a metafield by key_with_namespace.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","Spree::Metafields at ./spec/models/concerns/spree/metafields_spec.rb.#set_metafield and #get_metafield updates the value if the metafield already exists.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2\"}}","Spree::Metafields at ./spec/models/concerns/spree/metafields_spec.rb..with_metafield_key does not return products without the given metafield key.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","Spree::Metafields at ./spec/models/concerns/spree/metafields_spec.rb..with_metafield_key returns products with the given metafield key.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","Spree::Metafields at ./spec/models/concerns/spree/metafields_spec.rb..with_metafield_key_value does not return products with the key but different value.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","Spree::Metafields at ./spec/models/concerns/spree/metafields_spec.rb..with_metafield_key_value returns products with the given metafield key and value.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","Spree::Metafields at ./spec/models/concerns/spree/metafields_spec.rb.accepts_nested_attributes_for :metafields auto-destroy metafields with empty values destroys existing metafield when value is set to empty string.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:4:1\"}}","Spree::Metafields at ./spec/models/concerns/spree/metafields_spec.rb.accepts_nested_attributes_for :metafields auto-destroy metafields with empty values destroys existing metafield when value is set to nil.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:4:2\"}}","Spree::Metafields at ./spec/models/concerns/spree/metafields_spec.rb.accepts_nested_attributes_for :metafields auto-destroy metafields with empty values handles multiple metafields correctly.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:4:4\"}}","Spree::Metafields at ./spec/models/concerns/spree/metafields_spec.rb.accepts_nested_attributes_for :metafields auto-destroy metafields with empty values updates existing metafield when value is not empty.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:4:3\"}}","Spree::Metafields at ./spec/models/concerns/spree/metafields_spec.rb.accepts_nested_attributes_for :metafields creates metafield via nested attributes.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","Spree::Metafields at ./spec/models/concerns/spree/metafields_spec.rb.accepts_nested_attributes_for :metafields rejects metafield if id and value are blank.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:3\"}}","Spree::Metafields at ./spec/models/concerns/spree/metafields_spec.rb.accepts_nested_attributes_for :metafields rejects metafield if metafield_definition_id is blank.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2\"}}","Spree::Metafields at ./spec/models/concerns/spree/metafields_spec.rb.associations has many metafields.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::Metafields at ./spec/models/concerns/spree/metafields_spec.rb.associations has many private_metafields.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","Spree::Metafields at ./spec/models/concerns/spree/metafields_spec.rb.associations has many public_metafields.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","Spree::Metafields::Boolean at ./spec/models/spree/metafields/boolean_spec.rb.#csv_value returns the boolean value.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","Spree::Metafields::Boolean at ./spec/models/spree/metafields/boolean_spec.rb.#serialize_value returns the boolean value.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","Spree::Metafields::Boolean at ./spec/models/spree/metafields/boolean_spec.rb.normalizes normalizes the boolean value.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::Metafields::Json at ./spec/models/spree/metafields/json_spec.rb.#serialize_value returns original value if parsing fails.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3\"}}","Spree::Metafields::Json at ./spec/models/spree/metafields/json_spec.rb.#serialize_value returns parsed JSON array.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","Spree::Metafields::Json at ./spec/models/spree/metafields/json_spec.rb.#serialize_value returns parsed JSON object.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","Spree::Metafields::Json at ./spec/models/spree/metafields/json_spec.rb.Validations returns false if the value is not valid JSON.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::Metafields::Json at ./spec/models/spree/metafields/json_spec.rb.Validations returns true for valid JSON array.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","Spree::Metafields::Json at ./spec/models/spree/metafields/json_spec.rb.Validations returns true for valid JSON boolean.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","Spree::Metafields::Json at ./spec/models/spree/metafields/json_spec.rb.Validations returns true for valid JSON null.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7\"}}","Spree::Metafields::Json at ./spec/models/spree/metafields/json_spec.rb.Validations returns true for valid JSON number.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","Spree::Metafields::Json at ./spec/models/spree/metafields/json_spec.rb.Validations returns true for valid JSON object.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","Spree::Metafields::Json at ./spec/models/spree/metafields/json_spec.rb.Validations returns true for valid JSON string.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","Spree::Metafields::Number at ./spec/models/spree/metafields/number_spec.rb.#csv_value returns the number as a string.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","Spree::Metafields::Number at ./spec/models/spree/metafields/number_spec.rb.#serialize_value returns the number.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","Spree::Metafields::Number at ./spec/models/spree/metafields/number_spec.rb.Validations returns false if the value is not a number.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::Metafields::RichText at ./spec/models/spree/metafields/rich_text_spec.rb.#serialize_value returns the rich text body.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","Spree::Metafields::RichText at ./spec/models/spree/metafields/rich_text_spec.rb.#value returns the rich text body.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::Migrations at ./spec/lib/spree/migrations_spec.rb.no missing migrations says nothing.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","Spree::Migrations at ./spec/lib/spree/migrations_spec.rb.warns about missing migrations.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","Spree::Money at ./spec/lib/spree/money_spec.rb.#amount_in_cents when currency is JPY example at ./spec/lib/spree/money_spec.rb:170.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:2:1\"}}","Spree::Money at ./spec/lib/spree/money_spec.rb.#amount_in_cents when currency is KRW example at ./spec/lib/spree/money_spec.rb:170.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:3:1\"}}","Spree::Money at ./spec/lib/spree/money_spec.rb.#amount_in_cents when currency is USD example at ./spec/lib/spree/money_spec.rb:170.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:1:1\"}}","Spree::Money at ./spec/lib/spree/money_spec.rb.#as_json returns the expected string.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:1\"}}","Spree::Money at ./spec/lib/spree/money_spec.rb.DKK formats correctly.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1\"}}","Spree::Money at ./spec/lib/spree/money_spec.rb.EUR formats as HTML if asked (nicely) to.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2\"}}","Spree::Money at ./spec/lib/spree/money_spec.rb.EUR formats as HTML with currency.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:3\"}}","Spree::Money at ./spec/lib/spree/money_spec.rb.EUR formats as plain by default.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1\"}}","Spree::Money at ./spec/lib/spree/money_spec.rb.JPY formats correctly.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1\"}}","Spree::Money at ./spec/lib/spree/money_spec.rb.Money formatting rules #decimal_mark favors decimal mark passed in as a parameter on initialization.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:1:3\"}}","Spree::Money at ./spec/lib/spree/money_spec.rb.Money formatting rules #decimal_mark favors decimal mark set in default_formatting_rules.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:1:2\"}}","Spree::Money at ./spec/lib/spree/money_spec.rb.Money formatting rules #decimal_mark uses decimal mark set in Monetize gem.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:1:1\"}}","Spree::Money at ./spec/lib/spree/money_spec.rb.Money formatting rules #thousands_separator favors decimal mark passed in as a parameter on initialization.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:2:3\"}}","Spree::Money at ./spec/lib/spree/money_spec.rb.Money formatting rules #thousands_separator favors decimal mark set in default_formatting_rules.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:2:2\"}}","Spree::Money at ./spec/lib/spree/money_spec.rb.Money formatting rules #thousands_separator uses thousands separator set in Monetize gem.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:2:1\"}}","Spree::Money at ./spec/lib/spree/money_spec.rb.can get cents.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2\"}}","Spree::Money at ./spec/lib/spree/money_spec.rb.can get currency.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3\"}}","Spree::Money at ./spec/lib/spree/money_spec.rb.currency parameter when currency is specified in Canadian Dollars uses the currency param over the global configuration.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1:1\"}}","Spree::Money at ./spec/lib/spree/money_spec.rb.currency parameter when currency is specified in Japanese Yen uses the currency param over the global configuration.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2:1\"}}","Spree::Money at ./spec/lib/spree/money_spec.rb.format passed in option.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","Spree::Money at ./spec/lib/spree/money_spec.rb.formats correctly.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","Spree::Money at ./spec/lib/spree/money_spec.rb.hide cents hides cents suffix.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","Spree::Money at ./spec/lib/spree/money_spec.rb.hide cents shows cents suffix.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2\"}}","Spree::Money at ./spec/lib/spree/money_spec.rb.sign before symbol defaults to -$10.00.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1\"}}","Spree::Money at ./spec/lib/spree/money_spec.rb.sign before symbol passed in option.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2\"}}","Spree::Money at ./spec/lib/spree/money_spec.rb.with currency passed in option.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","Spree::Newsletter::Subscribe at ./spec/services/spree/newsletter/subscribe_spec.rb.when logged in user has the same email as inputed email creates a new verified subscriber.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3\"}}","Spree::Newsletter::Subscribe at ./spec/services/spree/newsletter/subscribe_spec.rb.when logged in user has the same email as inputed email does not send a confirmation email.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","Spree::Newsletter::Subscribe at ./spec/services/spree/newsletter/subscribe_spec.rb.when logged in user has the same email as inputed email returns an instance of NewsletterSubscriber.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","Spree::Newsletter::Subscribe at ./spec/services/spree/newsletter/subscribe_spec.rb.when logged in user inputs another email creates a new unverified subscriber.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3\"}}","Spree::Newsletter::Subscribe at ./spec/services/spree/newsletter/subscribe_spec.rb.when logged in user inputs another email returns an instance of NewsletterSubscriber.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","Spree::Newsletter::Subscribe at ./spec/services/spree/newsletter/subscribe_spec.rb.when logged in user inputs another email sends a confirmation email.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","Spree::Newsletter::Subscribe at ./spec/services/spree/newsletter/subscribe_spec.rb.when unverified subscription has been already created does not create new subscriber.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2\"}}","Spree::Newsletter::Subscribe at ./spec/services/spree/newsletter/subscribe_spec.rb.when unverified subscription has been already created returns an instance of NewsletterSubscriber.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","Spree::Newsletter::Subscribe at ./spec/services/spree/newsletter/subscribe_spec.rb.when unverified subscription has been already created sends a confirmation email.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3\"}}","Spree::Newsletter::Subscribe at ./spec/services/spree/newsletter/subscribe_spec.rb.when verified subscription already exists does not create new subscriber.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2\"}}","Spree::Newsletter::Subscribe at ./spec/services/spree/newsletter/subscribe_spec.rb.when verified subscription already exists does not send a confirmation email.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3\"}}","Spree::Newsletter::Subscribe at ./spec/services/spree/newsletter/subscribe_spec.rb.when verified subscription already exists returns an instance of NewsletterSubscriber.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","Spree::Newsletter::Subscribe at ./spec/services/spree/newsletter/subscribe_spec.rb.with invalid params does not create a new record.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","Spree::Newsletter::Subscribe at ./spec/services/spree/newsletter/subscribe_spec.rb.with invalid params does not send a confirmation email.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","Spree::Newsletter::Subscribe at ./spec/services/spree/newsletter/subscribe_spec.rb.with invalid params returns a record with errors.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::Newsletter::Verify at ./spec/services/spree/newsletter/verify_spec.rb.custom events publishes newsletter_subscriber.verified event when verified.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","Spree::Newsletter::Verify at ./spec/services/spree/newsletter/verify_spec.rb.with associated user updates user email marketing attribute.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","Spree::Newsletter::Verify at ./spec/services/spree/newsletter/verify_spec.rb.with associated user verifies a subscription.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::Newsletter::Verify at ./spec/services/spree/newsletter/verify_spec.rb.without user verifies a subscription.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","Spree::NewsletterSubscriber at ./spec/models/spree/newsletter_subscriber_spec.rb.behaves like lifecycle events lifecycle events newsletter_subscriber.created publishes created event when record is created.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","Spree::NewsletterSubscriber at ./spec/models/spree/newsletter_subscriber_spec.rb.behaves like lifecycle events lifecycle events newsletter_subscriber.deleted publishes deleted event when record is deleted.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:1\"}}","Spree::NewsletterSubscriber at ./spec/models/spree/newsletter_subscriber_spec.rb.behaves like lifecycle events lifecycle events newsletter_subscriber.updated publishes updated event when record is updated.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","Spree::NewsletterSubscriber at ./spec/models/spree/newsletter_subscriber_spec.rb.normalizations example at ./spec/models/spree/newsletter_subscriber_spec.rb:11.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","Spree::NewsletterSubscriber at ./spec/models/spree/newsletter_subscriber_spec.rb.normalizations example at ./spec/models/spree/newsletter_subscriber_spec.rb:12.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","Spree::NewsletterSubscriber at ./spec/models/spree/newsletter_subscriber_spec.rb.normalizations example at ./spec/models/spree/newsletter_subscriber_spec.rb:13.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3\"}}","Spree::NewsletterSubscriber at ./spec/models/spree/newsletter_subscriber_spec.rb.scopes unverified returns unverified subscribers only.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1\"}}","Spree::NewsletterSubscriber at ./spec/models/spree/newsletter_subscriber_spec.rb.scopes verified returns verified subscribers only.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1\"}}","Spree::NewsletterSubscriber at ./spec/models/spree/newsletter_subscriber_spec.rb.subscribe with user calls subscribe service.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:1\"}}","Spree::NewsletterSubscriber at ./spec/models/spree/newsletter_subscriber_spec.rb.subscribe without user calls subscribe service.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1\"}}","Spree::NewsletterSubscriber at ./spec/models/spree/newsletter_subscriber_spec.rb.validations example at ./spec/models/spree/newsletter_subscriber_spec.rb:17.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","Spree::NewsletterSubscriber at ./spec/models/spree/newsletter_subscriber_spec.rb.validations example at ./spec/models/spree/newsletter_subscriber_spec.rb:18.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","Spree::NewsletterSubscriber at ./spec/models/spree/newsletter_subscriber_spec.rb.validations example at ./spec/models/spree/newsletter_subscriber_spec.rb:19.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3\"}}","Spree::NewsletterSubscriber at ./spec/models/spree/newsletter_subscriber_spec.rb.validations example at ./spec/models/spree/newsletter_subscriber_spec.rb:20.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4\"}}","Spree::NewsletterSubscriber at ./spec/models/spree/newsletter_subscriber_spec.rb.verified? when email is not verified example at ./spec/models/spree/newsletter_subscriber_spec.rb:108.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1:1\"}}","Spree::NewsletterSubscriber at ./spec/models/spree/newsletter_subscriber_spec.rb.verified? when email is verified example at ./spec/models/spree/newsletter_subscriber_spec.rb:114.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2:1\"}}","Spree::NewsletterSubscriber at ./spec/models/spree/newsletter_subscriber_spec.rb.verify when subscriber is found calls verify service.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1:1\"}}","Spree::NewsletterSubscriber at ./spec/models/spree/newsletter_subscriber_spec.rb.verify when subscriber is not found returns ActiveRecord::RecordNotFound.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2:1\"}}","Spree::OptionType at ./spec/models/spree/option_type_spec.rb.#filter_param returns filtered name param.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","Spree::OptionType at ./spec/models/spree/option_type_spec.rb.#filterable example at ./spec/models/spree/option_type_spec.rb:7.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","Spree::OptionType at ./spec/models/spree/option_type_spec.rb.#self.color finds color option type.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1\"}}","Spree::OptionType at ./spec/models/spree/option_type_spec.rb.behaves like metadata can query records by metadata properties.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:10\"}}","Spree::OptionType at ./spec/models/spree/option_type_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:10.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","Spree::OptionType at ./spec/models/spree/option_type_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:11.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","Spree::OptionType at ./spec/models/spree/option_type_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:4.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::OptionType at ./spec/models/spree/option_type_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:5.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","Spree::OptionType at ./spec/models/spree/option_type_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:7.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","Spree::OptionType at ./spec/models/spree/option_type_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:8.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","Spree::OptionType at ./spec/models/spree/option_type_spec.rb.behaves like metadata reads data as not symbolized keys.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8\"}}","Spree::OptionType at ./spec/models/spree/option_type_spec.rb.behaves like metadata reads data as symbolized keys.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7\"}}","Spree::OptionType at ./spec/models/spree/option_type_spec.rb.callbacks #normalize_name should parameterize the name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","Spree::OptionType at ./spec/models/spree/option_type_spec.rb.color methods #color? should return false if the name is not \"color\" or \"colour\".{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:2\"}}","Spree::OptionType at ./spec/models/spree/option_type_spec.rb.color methods #color? should return true if the name is \"color\" or \"colour\".{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1\"}}","Spree::OptionType at ./spec/models/spree/option_type_spec.rb.color methods .color should return the first option type with name \"color\".{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:1\"}}","Spree::OptionType at ./spec/models/spree/option_type_spec.rb.touching touches a product on touch.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","Spree::OptionType at ./spec/models/spree/option_type_spec.rb.touching touches a product on update.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2\"}}","Spree::OptionType at ./spec/models/spree/option_type_spec.rb.translations translates option type fields.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","Spree::OptionType at ./spec/models/spree/option_type_spec.rb.translations with always_use_translations enabled creates option type with normalized presentation without NotNullViolation.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1\"}}","Spree::OptionType at ./spec/models/spree/option_type_spec.rb.translations with always_use_translations enabled normalizes translated presentations across locales.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:2\"}}","Spree::OptionValue at ./spec/models/spree/option_value_spec.rb.#display_presentation returns the presentation with the option type presentation.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","Spree::OptionValue at ./spec/models/spree/option_value_spec.rb..to_tom_select_json returns the option values in the correct format.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","Spree::OptionValue at ./spec/models/spree/option_value_spec.rb.behaves like metadata can query records by metadata properties.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:10\"}}","Spree::OptionValue at ./spec/models/spree/option_value_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:10.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","Spree::OptionValue at ./spec/models/spree/option_value_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:11.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","Spree::OptionValue at ./spec/models/spree/option_value_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:4.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::OptionValue at ./spec/models/spree/option_value_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:5.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","Spree::OptionValue at ./spec/models/spree/option_value_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:7.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","Spree::OptionValue at ./spec/models/spree/option_value_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:8.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","Spree::OptionValue at ./spec/models/spree/option_value_spec.rb.behaves like metadata reads data as not symbolized keys.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8\"}}","Spree::OptionValue at ./spec/models/spree/option_value_spec.rb.behaves like metadata reads data as symbolized keys.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7\"}}","Spree::OptionValue at ./spec/models/spree/option_value_spec.rb.callbacks #normalize_name should parameterize the name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","Spree::OptionValue at ./spec/models/spree/option_value_spec.rb.callbacks #touch_all_products touches all products associated with the option value.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:1\"}}","Spree::OptionValue at ./spec/models/spree/option_value_spec.rb.callbacks #touch_all_variants touches all variants associated with the option value.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","Spree::OptionValue at ./spec/models/spree/option_value_spec.rb.translations translates option value fields.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","Spree::OptionValueVariant at ./spec/models/spree/option_value_variant_spec.rb.touching touches a variant.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::OptionValues::FindAvailable at ./spec/finders/spree/option_values/find_available_spec.rb.#execute finds available Option Values.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::OptionValues::FindAvailable at ./spec/finders/spree/option_values/find_available_spec.rb.#execute ordering orders the option values by option type position and option value position.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1\"}}","Spree::OptionValues::FindAvailable at ./spec/finders/spree/option_values/find_available_spec.rb.#execute when given a predefined products scope finds filterable Option Values with respect to a predefined Products scope.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","Spree::OptionValues::FindAvailable at ./spec/finders/spree/option_values/find_available_spec.rb.#execute when given a predefined scope finds available Option Values with respect to a predefined scope.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","Spree::Order at ./spec/models/spree/order/address_spec.rb.address book Create order with the same bill & ship addresses has equal ids when option use_billing is active.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:2\"}}","Spree::Order at ./spec/models/spree/order/address_spec.rb.address book Create order with the same bill & ship addresses has equal ids when set ids.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","Spree::Order at ./spec/models/spree/order/address_spec.rb.address book mass attribute assignment for bill_address_id, ship_address_id is able to mass assign bill_address_id.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","Spree::Order at ./spec/models/spree/order/address_spec.rb.address book mass attribute assignment for bill_address_id, ship_address_id is able to mass assign ship_address_id.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:2\"}}","Spree::Order at ./spec/models/spree/order/address_spec.rb.address book when user wants to update firstname of the address with already completed order creates new address with updated attributes.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:1\"}}","Spree::Order at ./spec/models/spree/order/address_spec.rb.validation when @use_billing is populated with '1' clones the bill address to the shipping.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:1\"}}","Spree::Order at ./spec/models/spree/order/address_spec.rb.validation when @use_billing is populated with 'true' clones the bill address to the shipping.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","Spree::Order at ./spec/models/spree/order/address_spec.rb.validation when @use_billing is populated with something other than a 'truthful' value does not clone the bill address to the shipping.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:4:1\"}}","Spree::Order at ./spec/models/spree/order/address_spec.rb.validation when @use_billing is populated with true clones the bill address to the ship address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","Spree::Order at ./spec/models/spree/order/adjustments_spec.rb.when an order has an adjustment that zeroes the total, but another adjustment for shipping that raises it above zero transitions from delivery to payment.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::Order at ./spec/models/spree/order/adjustments_spec.rb.when an order has an taxed shipment with tax included_in_price and apply free_shipping_promotion removes the shipment tax adjustment.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","Spree::Order at ./spec/models/spree/order/callbacks_spec.rb.#save when associated with a registered user assigns the email address of the user.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","Spree::Order at ./spec/models/spree/order/callbacks_spec.rb.in the cart state does not validate email address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","Spree::Order at ./spec/models/spree/order/callbacks_spec.rb.validations email validation o'brien@gmail.com is a valid email address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","Spree::Order at ./spec/models/spree/order/checkout_spec.rb.insert checkout step after example at ./spec/models/spree/order/checkout_spec.rb:696.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:3:1\"}}","Spree::Order at ./spec/models/spree/order/checkout_spec.rb.insert checkout step after goes through checkout without raising error.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:3:2\"}}","Spree::Order at ./spec/models/spree/order/checkout_spec.rb.insert checkout step before example at ./spec/models/spree/order/checkout_spec.rb:679.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2:1\"}}","Spree::Order at ./spec/models/spree/order/checkout_spec.rb.insert checkout step before goes through checkout without raising error.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2:2\"}}","Spree::Order at ./spec/models/spree/order/checkout_spec.rb.insert checkout step maintains removed transitions.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","Spree::Order at ./spec/models/spree/order/checkout_spec.rb.re-define checkout flow does not keep old event transitions when checkout_flow is redefined.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","Spree::Order at ./spec/models/spree/order/checkout_spec.rb.re-define checkout flow does not keep old events when checkout_flow is redefined.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2\"}}","Spree::Order at ./spec/models/spree/order/checkout_spec.rb.remove checkout step example at ./spec/models/spree/order/checkout_spec.rb:724.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2\"}}","Spree::Order at ./spec/models/spree/order/checkout_spec.rb.remove checkout step maintains removed transitions.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","Spree::Order at ./spec/models/spree/order/checkout_spec.rb.to complete default credit card creates a digital_link for the digital line_item.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:3\"}}","Spree::Order at ./spec/models/spree/order/checkout_spec.rb.to complete default credit card creates a digital_link for the physical line_item if it has a digital asset.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:4\"}}","Spree::Order at ./spec/models/spree/order/checkout_spec.rb.to complete default credit card does not assign a default credit card if temporary_credit_card is set.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:5\"}}","Spree::Order at ./spec/models/spree/order/checkout_spec.rb.to complete default credit card makes the current credit card a user's default credit card.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:2\"}}","Spree::Order at ./spec/models/spree/order/checkout_spec.rb.to complete default credit card newsletter subscription when newsletter is accepted for the order subscribes to newsletter.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1:1:1\"}}","Spree::Order at ./spec/models/spree/order/checkout_spec.rb.to complete default credit card newsletter subscription when newsletter is not accepted for the order does not subscribe to newsletter.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1:2:1\"}}","Spree::Order at ./spec/models/spree/order/checkout_spec.rb.to complete default credit card when gift card is present redeems the gift card.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:6:1\"}}","Spree::Order at ./spec/models/spree/order/checkout_spec.rb.to complete default credit card when gift card is present when gift card has amount bigger than order total partially redeems the gift card.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:6:2:1\"}}","Spree::Order at ./spec/models/spree/order/checkout_spec.rb.to complete default credit card when user is not present with signup_for_an_account set to false does not create a new user.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:7:2:1\"}}","Spree::Order at ./spec/models/spree/order/checkout_spec.rb.to complete default credit card when user is not present with signup_for_an_account set to true creates a new user.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:7:1:1\"}}","Spree::Order at ./spec/models/spree/order/checkout_spec.rb.update_from_params calls update_attributes without order params.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1\"}}","Spree::Order at ./spec/models/spree/order/checkout_spec.rb.update_from_params has params does not let through unpermitted attributes.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:4:1\"}}","Spree::Order at ./spec/models/spree/order/checkout_spec.rb.update_from_params has params has allowed params accepts permitted attributes.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:4:3:1\"}}","Spree::Order at ./spec/models/spree/order/checkout_spec.rb.update_from_params has params has existing_card param does not attempt to permit existing_card.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:4:2:1\"}}","Spree::Order at ./spec/models/spree/order/checkout_spec.rb.update_from_params passing a credit card dont let users mess with others users cards.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:3:4\"}}","Spree::Order at ./spec/models/spree/order/checkout_spec.rb.update_from_params passing a credit card sets confirmation value when its available via :cvc_confirm.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:3:1\"}}","Spree::Order at ./spec/models/spree/order/checkout_spec.rb.update_from_params passing a credit card sets existing card as source for new payment.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:3:2\"}}","Spree::Order at ./spec/models/spree/order/checkout_spec.rb.update_from_params passing a credit card sets request_env on payment.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:3:3\"}}","Spree::Order at ./spec/models/spree/order/checkout_spec.rb.update_from_params runs the callbacks.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2\"}}","Spree::Order at ./spec/models/spree/order/checkout_spec.rb.with default state machine #checkout_steps when confirmation not required example at ./spec/models/spree/order/checkout_spec.rb:81.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8:1:1\"}}","Spree::Order at ./spec/models/spree/order/checkout_spec.rb.with default state machine #checkout_steps when confirmation required example at ./spec/models/spree/order/checkout_spec.rb:92.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8:2:1\"}}","Spree::Order at ./spec/models/spree/order/checkout_spec.rb.with default state machine #checkout_steps when delivery not required example at ./spec/models/spree/order/checkout_spec.rb:100.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8:3:1\"}}","Spree::Order at ./spec/models/spree/order/checkout_spec.rb.with default state machine #checkout_steps when payment not required example at ./spec/models/spree/order/checkout_spec.rb:108.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8:4:1\"}}","Spree::Order at ./spec/models/spree/order/checkout_spec.rb.with default state machine #checkout_steps when payment required example at ./spec/models/spree/order/checkout_spec.rb:116.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8:5:1\"}}","Spree::Order at ./spec/models/spree/order/checkout_spec.rb.with default state machine .find_transition when contract was broken.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","Spree::Order at ./spec/models/spree/order/checkout_spec.rb.with default state machine .remove_transition when contract was broken.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","Spree::Order at ./spec/models/spree/order/checkout_spec.rb.with default state machine .remove_transition.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","Spree::Order at ./spec/models/spree/order/checkout_spec.rb.with default state machine always return integer on checkout_step_index.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","Spree::Order at ./spec/models/spree/order/checkout_spec.rb.with default state machine does not have a transition from delivery to confirm.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","Spree::Order at ./spec/models/spree/order/checkout_spec.rb.with default state machine from address cannot transition to delivery with an existing shipment if there are no shipping rates for any shipment deletes all the shipments.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:11:4:1:1:2\"}}","Spree::Order at ./spec/models/spree/order/checkout_spec.rb.with default state machine from address cannot transition to delivery with an existing shipment if there are no shipping rates for any shipment raises an InvalidTransitionError.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:11:4:1:1:1\"}}","Spree::Order at ./spec/models/spree/order/checkout_spec.rb.with default state machine from address transitions to delivery.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:11:3\"}}","Spree::Order at ./spec/models/spree/order/checkout_spec.rb.with default state machine from address updates prices.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:11:2\"}}","Spree::Order at ./spec/models/spree/order/checkout_spec.rb.with default state machine from address updates totals.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:11:1\"}}","Spree::Order at ./spec/models/spree/order/checkout_spec.rb.with default state machine from delivery attempts to apply free shipping promotions.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:13:1\"}}","Spree::Order at ./spec/models/spree/order/checkout_spec.rb.with default state machine from delivery correctly determining payment required based on shipping information with a shipment that has a price transitions to payment.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:13:4:1:1\"}}","Spree::Order at ./spec/models/spree/order/checkout_spec.rb.with default state machine from delivery correctly determining payment required based on shipping information with a shipment that is free skips payment, transitions to complete.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:13:4:2:1\"}}","Spree::Order at ./spec/models/spree/order/checkout_spec.rb.with default state machine from delivery with payment required transitions to payment.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:13:2:1\"}}","Spree::Order at ./spec/models/spree/order/checkout_spec.rb.with default state machine from delivery without payment required transitions to complete.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:13:3:1\"}}","Spree::Order at ./spec/models/spree/order/checkout_spec.rb.with default state machine from payment when payment is not required does not call process payments.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:14:3:1\"}}","Spree::Order at ./spec/models/spree/order/checkout_spec.rb.with default state machine from payment with confirmation required transitions to confirm.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:14:1:1\"}}","Spree::Order at ./spec/models/spree/order/checkout_spec.rb.with default state machine from payment without confirmation required when there is at least one valid payment line_items are in stock transitions to complete.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:14:2:1:1:1\"}}","Spree::Order at ./spec/models/spree/order/checkout_spec.rb.with default state machine from payment without confirmation required when there is at least one valid payment line_items are not in stock does not receive process_payments!.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:14:2:1:2:1\"}}","Spree::Order at ./spec/models/spree/order/checkout_spec.rb.with default state machine from payment without confirmation required when there is at least one valid payment line_items are not in stock does not transition to complete.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:14:2:1:2:2\"}}","Spree::Order at ./spec/models/spree/order/checkout_spec.rb.with default state machine from payment without confirmation required when there is only an invalid payment raises a StateMachine::InvalidTransition.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:14:2:2:1\"}}","Spree::Order at ./spec/models/spree/order/checkout_spec.rb.with default state machine has the following transitions.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::Order at ./spec/models/spree/order/checkout_spec.rb.with default state machine passes delivery state when transitioning from address over delivery to payment.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7\"}}","Spree::Order at ./spec/models/spree/order/checkout_spec.rb.with default state machine starts out at cart.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:9\"}}","Spree::Order at ./spec/models/spree/order/checkout_spec.rb.with default state machine to address cannot transition to address without any line items.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:10:2\"}}","Spree::Order at ./spec/models/spree/order/checkout_spec.rb.with default state machine to address with a line item doesn't raise an error if the default address is invalid.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:10:1:2\"}}","Spree::Order at ./spec/models/spree/order/checkout_spec.rb.with default state machine to address with a line item transitions to address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:10:1:1\"}}","Spree::Order at ./spec/models/spree/order/checkout_spec.rb.with default state machine to address with a line item with default addresses behaves like it cloned the default address example at ./spec/models/spree/order/checkout_spec.rb:160.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:10:1:3:1:1\"}}","Spree::Order at ./spec/models/spree/order/checkout_spec.rb.with default state machine to address with a line item with default addresses behaves like it cloned the default address example at ./spec/models/spree/order/checkout_spec.rb:160.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:10:1:3:2:1\"}}","Spree::Order at ./spec/models/spree/order/checkout_spec.rb.with default state machine to delivery when order has default selected_shipping_rate_id invokes set_shipment_cost.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:12:1:1\"}}","Spree::Order at ./spec/models/spree/order/checkout_spec.rb.with default state machine to delivery when order has default selected_shipping_rate_id updates shipment_total.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:12:1:2\"}}","Spree::Order at ./spec/models/spree/order/checkout_spec.rb.with only a complete step does not attempt to process payments.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","Spree::Order at ./spec/models/spree/order/currency_updater_spec.rb.CurrencyUpdater when changing order currency #homogenize_line_item_currencies calculates the item total in the order.currency.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:4\"}}","Spree::Order at ./spec/models/spree/order/currency_updater_spec.rb.CurrencyUpdater when changing order currency #homogenize_line_item_currencies changes the line_item amounts.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:3\"}}","Spree::Order at ./spec/models/spree/order/currency_updater_spec.rb.CurrencyUpdater when changing order currency #homogenize_line_item_currencies changes the line_item currencies.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:2\"}}","Spree::Order at ./spec/models/spree/order/currency_updater_spec.rb.CurrencyUpdater when changing order currency #homogenize_line_item_currencies succeeds without error.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","Spree::Order at ./spec/models/spree/order/currency_updater_spec.rb.CurrencyUpdater when changing order currency #homogenize_line_item_currencies when there is a price with nil amount destroys the line item when we switch to that price's currency.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:5:1\"}}","Spree::Order at ./spec/models/spree/order/digital_spec.rb.#digital?/#some_digital? returns false/false for an exclusively non-digital order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3\"}}","Spree::Order at ./spec/models/spree/order/digital_spec.rb.#digital?/#some_digital? returns false/true for a mixed order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","Spree::Order at ./spec/models/spree/order/digital_spec.rb.#digital?/#some_digital? returns true/true for a digital order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","Spree::Order at ./spec/models/spree/order/digital_spec.rb.#digital_links correctly loads the links.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","Spree::Order at ./spec/models/spree/order/digital_spec.rb.Spree::Cart::AddItem.call adds digital Variants of quantity 1 to an order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","Spree::Order at ./spec/models/spree/order/digital_spec.rb.Spree::Cart::AddItem.call handles quantity higher than 1 when adding one specific digital Variant.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","Spree::Order at ./spec/models/spree/order/digital_spec.rb.line_item analysis understands that all products are digital.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::Order at ./spec/models/spree/order/digital_spec.rb.line_item analysis understands that empty order is not digital.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","Spree::Order at ./spec/models/spree/order/digital_spec.rb.line_item analysis understands that no products are digital.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","Spree::Order at ./spec/models/spree/order/digital_spec.rb.line_item analysis understands that not all products are digital.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","Spree::Order at ./spec/models/spree/order/finalizing_spec.rb.#finalize! changes the shipment state to ready if order is paid.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","Spree::Order at ./spec/models/spree/order/finalizing_spec.rb.#finalize! decreases the stock for each variant in the shipment.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","Spree::Order at ./spec/models/spree/order/finalizing_spec.rb.#finalize! does not sell inventory units if track_inventory_levels is false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","Spree::Order at ./spec/models/spree/order/finalizing_spec.rb.#finalize! freezes all adjustments.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","Spree::Order at ./spec/models/spree/order/finalizing_spec.rb.#finalize! order is considered risky and order is approved leaves order in complete state.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7:2:1\"}}","Spree::Order at ./spec/models/spree/order/finalizing_spec.rb.#finalize! order is considered risky changes state to risky.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7:1\"}}","Spree::Order at ./spec/models/spree/order/finalizing_spec.rb.#finalize! order is not considered risky sets completed_at.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8:1\"}}","Spree::Order at ./spec/models/spree/order/finalizing_spec.rb.#finalize! sells inventory units.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","Spree::Order at ./spec/models/spree/order/finalizing_spec.rb.#finalize! sets completed_at.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::Order at ./spec/models/spree/order/payment_spec.rb.#authorize_payments! example at ./spec/models/spree/order/payment_spec.rb:236.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2\"}}","Spree::Order at ./spec/models/spree/order/payment_spec.rb.#authorize_payments! processes payments with attempt_authorization!.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","Spree::Order at ./spec/models/spree/order/payment_spec.rb.#capture_payments! example at ./spec/models/spree/order/payment_spec.rb:251.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2\"}}","Spree::Order at ./spec/models/spree/order/payment_spec.rb.#capture_payments! processes payments with attempt_authorization!.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","Spree::Order at ./spec/models/spree/order/payment_spec.rb.#outstanding_balance does not incorporate refunds without a reimbursement.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:4\"}}","Spree::Order at ./spec/models/spree/order/payment_spec.rb.#outstanding_balance incorporates refund reimbursements.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:3\"}}","Spree::Order at ./spec/models/spree/order/payment_spec.rb.#outstanding_balance returns negative amount when payment_total is greater than total.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2\"}}","Spree::Order at ./spec/models/spree/order/payment_spec.rb.#outstanding_balance returns positive amount when payment_total is less than total.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","Spree::Order at ./spec/models/spree/order/payment_spec.rb.#outstanding_balance? is false when total equals payment_total.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:3\"}}","Spree::Order at ./spec/models/spree/order/payment_spec.rb.#outstanding_balance? is true when total greater than payment_total.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","Spree::Order at ./spec/models/spree/order/payment_spec.rb.#outstanding_balance? is true when total less than payment_total.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2\"}}","Spree::Order at ./spec/models/spree/order/payment_spec.rb.#process_payments! processes the payments.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","Spree::Order at ./spec/models/spree/order/payment_spec.rb.#process_payments! raises an error if there are no payments to process.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","Spree::Order at ./spec/models/spree/order/payment_spec.rb.#process_payments! updates order with correct payment total.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:5\"}}","Spree::Order at ./spec/models/spree/order/payment_spec.rb.#process_payments! when a payment raises a GatewayError returns false when not configured to allow checkout on gateway failures.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4:2\"}}","Spree::Order at ./spec/models/spree/order/payment_spec.rb.#process_payments! when a payment raises a GatewayError returns true when configured to allow checkout on gateway failures.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4:1\"}}","Spree::Order at ./spec/models/spree/order/payment_spec.rb.#process_payments! when there are pending payments skips processing the payments.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3:1\"}}","Spree::Order at ./spec/models/spree/order/payment_spec.rb.#process_payments! when there are pending payments when there is other unprocessed payment processes only the other payment.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3:2:1\"}}","Spree::Order at ./spec/models/spree/order/payment_spec.rb.ensure source attributes stick around does not have inverse_of defined.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","Spree::Order at ./spec/models/spree/order/payment_spec.rb.ensure source attributes stick around keeps source attributes after updating.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","Spree::Order at ./spec/models/spree/order/payment_spec.rb.payment required? total > zero example at ./spec/models/spree/order/payment_spec.rb:332.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2:1\"}}","Spree::Order at ./spec/models/spree/order/payment_spec.rb.payment required? total is zero example at ./spec/models/spree/order/payment_spec.rb:326.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1:1\"}}","Spree::Order at ./spec/models/spree/order/payment_spec.rb.processing payments does not go over total for order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","Spree::Order at ./spec/models/spree/order/payment_spec.rb.processing payments does not use failed payments.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","Spree::Order at ./spec/models/spree/order/payment_spec.rb.processing payments processes all checkout payments along with store credits with store credits payment method auto capture turned off order payment state should be balance due example at ./spec/models/spree/order/payment_spec.rb:66.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:1:1\"}}","Spree::Order at ./spec/models/spree/order/payment_spec.rb.processing payments processes all checkout payments along with store credits with store credits payment method auto capture turned off order payment state should be balance due example at ./spec/models/spree/order/payment_spec.rb:76.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:2:1\"}}","Spree::Order at ./spec/models/spree/order/payment_spec.rb.processing payments processes all checkout payments along with store credits with store credits payment method auto capture turned on order should be paid.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1:1\"}}","Spree::Order at ./spec/models/spree/order/payment_spec.rb.processing payments processes the checkout payment.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::Order at ./spec/models/spree/order/risk_assessment_spec.rb..is_risky? Not risky order with avs_response == '' is not considered risky.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:1\"}}","Spree::Order at ./spec/models/spree/order/risk_assessment_spec.rb..is_risky? Not risky order with avs_response == D is not considered risky.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","Spree::Order at ./spec/models/spree/order/risk_assessment_spec.rb..is_risky? Not risky order with avs_response == M is not considered risky.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","Spree::Order at ./spec/models/spree/order/risk_assessment_spec.rb..is_risky? Not risky order with cvv_response_code == M is not considered risky.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:4:1\"}}","Spree::Order at ./spec/models/spree/order/risk_assessment_spec.rb..is_risky? Not risky order with cvv_response_message == '' is not considered risky.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:5:1\"}}","Spree::Order at ./spec/models/spree/order/risk_assessment_spec.rb..is_risky? Risky order AVS response message returns true if the order has an avs_response.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1:1\"}}","Spree::Order at ./spec/models/spree/order/risk_assessment_spec.rb..is_risky? Risky order CVV response code returns true if the order has an cvv_response_code.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:1\"}}","Spree::Order at ./spec/models/spree/order/risk_assessment_spec.rb..is_risky? Risky order state == 'failed' returns true if the order has state == 'failed'.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:3:1\"}}","Spree::Order at ./spec/models/spree/order/risk_assessment_spec.rb.is considered risky can be approved by a user.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","Spree::Order at ./spec/models/spree/order/shipments_spec.rb.ensure shipments will be updated destroys current shipments.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::Order at ./spec/models/spree/order/shipments_spec.rb.ensure shipments will be updated except when order is completed, that's OrderInventory job doesn't touch anything.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1\"}}","Spree::Order at ./spec/models/spree/order/shipments_spec.rb.ensure shipments will be updated puts order back in address state.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","Spree::Order at ./spec/models/spree/order/shipments_spec.rb.ensure shipments will be updated resets shipment_total.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","Spree::Order at ./spec/models/spree/order/state_machine_spec.rb.#can_cancel? should be false if shipment_state is shipped.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:4\"}}","Spree::Order at ./spec/models/spree/order/state_machine_spec.rb.#can_cancel? should be true if shipment_state is backorder.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","Spree::Order at ./spec/models/spree/order/state_machine_spec.rb.#can_cancel? should be true if shipment_state is pending.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","Spree::Order at ./spec/models/spree/order/state_machine_spec.rb.#can_cancel? should be true if shipment_state is ready.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3\"}}","Spree::Order at ./spec/models/spree/order/state_machine_spec.rb.#cancel resets payment state with payments automatically refunds all payments.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:3:1\"}}","Spree::Order at ./spec/models/spree/order/state_machine_spec.rb.#cancel resets payment state with shipped items does not alter the payment state.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:2:1\"}}","Spree::Order at ./spec/models/spree/order/state_machine_spec.rb.#cancel resets payment state without shipped items sets payment state to 'void'.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1:1\"}}","Spree::Order at ./spec/models/spree/order/state_machine_spec.rb.#next! when current state is confirm when payment processing fails cannot transition to complete.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","Spree::Order at ./spec/models/spree/order/state_machine_spec.rb.#next! when current state is confirm when payment processing succeeds finalizes order when transitioning to complete state.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","Spree::Order at ./spec/models/spree/order/state_machine_spec.rb.#next! when current state is confirm when payment processing succeeds when credit card processing fails does not complete the order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:2:1\"}}","Spree::Order at ./spec/models/spree/order/state_machine_spec.rb.#next! when current state is delivery adjusts tax rates twice if there are any shipments.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2\"}}","Spree::Order at ./spec/models/spree/order/state_machine_spec.rb.#next! when current state is delivery adjusts tax rates when transitioning to delivery.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","Spree::Order at ./spec/models/spree/order/tax_spec.rb.#tax_zone when no default tax zone when there is a matching zone returns the matching zone.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5:1:1\"}}","Spree::Order at ./spec/models/spree/order/tax_spec.rb.#tax_zone when no default tax zone when there is no matching zone returns nil.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5:2:1\"}}","Spree::Order at ./spec/models/spree/order/tax_spec.rb.#tax_zone when no zones exist returns nil.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","Spree::Order at ./spec/models/spree/order/tax_spec.rb.#tax_zone when tax_using_ship_address: false calculates using bill_address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","Spree::Order at ./spec/models/spree/order/tax_spec.rb.#tax_zone when tax_using_ship_address: true calculates using ship_address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","Spree::Order at ./spec/models/spree/order/tax_spec.rb.#tax_zone when there is a default tax zone when there is a matching zone returns the matching zone.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1:1\"}}","Spree::Order at ./spec/models/spree/order/tax_spec.rb.#tax_zone when there is a default tax zone when there is no matching zone returns the default tax zone.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:2:1\"}}","Spree::Order at ./spec/models/spree/order/totals_spec.rb.adds item to cart and activates promo item quantity changes recalculates order adjustments.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","Spree::Order at ./spec/models/spree/order/updating_spec.rb.#update_with_updater! when there are update hooks calls each of the update hooks.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","Spree::Order at ./spec/models/spree/order/validations_spec.rb.validations does not return two error messages when email is blank.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#after_cancel events publishes order.canceled event.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:3:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#after_cancel when gift card is present handles additional actions.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#after_cancel when no gift card handles additional actions.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:2:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#after_resume publishes order.resumed event.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#all_inventory_units_returned? all inventory units are returned is true.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:57:1:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#all_inventory_units_returned? no inventory units are returned is false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:57:3:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#all_inventory_units_returned? some inventory units are returned is false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:57:2:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#allow_cancel? when all shipments are canceled or ready returns true.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#allow_checkout? is false if there are no line_items in the order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:43:2\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#allow_checkout? is true if there are line_items in the order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:43:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#amount returns the correct sum of items.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:44:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#analytics_subtotal returns the subtotal used for analytics integrations.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:53:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#apply_free_shipping_promotions calls out to the FreeShipping promotion handler.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:31:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#approve! events publishes order.approved event.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:37:2:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#approve! sets considered_risky to false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:37:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#approved_by calls approve!.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:35:3\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#approved_by events publishes order.approved event.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:35:4:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#approved_by sets approved_at.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:35:2\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#approved_by sets approver_id.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:35:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#associate_user! events publishes order.updated event.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:33:7:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#associate_user! when bill_address is set behaves like #associate_user! associates a user to an order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:33:3:1:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#associate_user! when bill_address is set behaves like #associate_user! does not persist the order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:33:3:1:2\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#associate_user! when created_by is set behaves like #associate_user! associates a user to an order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:33:2:1:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#associate_user! when created_by is set behaves like #associate_user! does not persist the order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:33:2:1:2\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#associate_user! when email is set when email should be overridden behaves like #associate_user! associates a user to an order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:33:1:1:1:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#associate_user! when email is set when email should be overridden behaves like #associate_user! does not persist the order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:33:1:1:1:2\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#associate_user! when email is set when email should not be overridden behaves like #associate_user! associates a user to an order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:33:1:2:1:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#associate_user! when email is set when email should not be overridden behaves like #associate_user! does not persist the order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:33:1:2:1:2\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#associate_user! when ship_address is set behaves like #associate_user! associates a user to an order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:33:4:1:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#associate_user! when ship_address is set behaves like #associate_user! does not persist the order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:33:4:1:2\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#associate_user! when the order is persisted associates a user to a persisted order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:33:6:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#associate_user! when the order is persisted behaves like #associate_user! associates a user to an order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:33:6:5:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#associate_user! when the order is persisted does not change any other orders.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:33:6:3\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#associate_user! when the order is persisted does not persist other changes to the order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:33:6:2\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#associate_user! when the order is persisted is not affected by scoping.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:33:6:4\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#associate_user! when the user is not persisted behaves like #associate_user! associates a user to an order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:33:5:2:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#associate_user! when the user is not persisted behaves like #associate_user! does not persist the order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:33:5:2:2\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#associate_user! when the user is not persisted does not persist the user.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:33:5:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#backordered? is backordered if one of the shipments is backordered.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:45:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#backordered_variants returns the backordered variants.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:81:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#bill_address_attributes= when user does not have any addresses changes user default bill addresss.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:71:3:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#bill_address_attributes= when user has address but without default bill address changes user default bill addresss.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:71:4:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#bill_address_attributes= when user has default bill address changes user default bill address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:71:1:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#bill_address_attributes= when user has no default address assigns a new default address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:71:2:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#can_be_deleted? when order has finalized payments behaves like cannot be destroyed example at ./spec/models/spree/order_spec.rb:1140.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:40:2:1:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#can_be_deleted? when order is completed behaves like cannot be destroyed example at ./spec/models/spree/order_spec.rb:1140.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:40:1:1:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#can_be_deleted? when order is not completed and does not have finalized payments can be destroyed.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:40:3:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#can_cancel? is false for completed order in the canceled state.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:46:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#can_cancel? is true for completed order with no shipment.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:46:2\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#can_ship? is false if the order is neither in the 'complete' nor 'resumed' state.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:39:5\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#can_ship? is true for an order in the 'awaiting return' state.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:39:3\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#can_ship? is true for an order in the 'returned' state.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:39:4\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#can_ship? is true for order in the 'complete' state.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:39:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#can_ship? is true for order in the 'resumed' state.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:39:2\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#cancel marks the payments as void.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#cancel with incomplete payments marks the incomplete payments as void.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#cancel with incomplete payments voids transactions for incomplete payments.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2:2\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#canceled_by cancels the order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#canceled_by events publishes order.canceled event.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:6:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#canceled_by has canceler.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:3\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#canceled_by saves canceler_id.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#canceled_by when canceled_at is given saves canceled_at to given time.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:5:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#canceled_by when canceled_at is not given saves canceled_at to Time.current.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:4:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#cart_promo_total with promotions free shipping includes free shipping prromo.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:67:2:1:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#cart_promo_total with promotions free shipping returns 0.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:67:2:1:2\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#cart_promo_total with promotions line item discount includes line item promo.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:67:2:2:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#cart_promo_total with promotions line item discount reeturns -100.0.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:67:2:2:2\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#cart_promo_total with promotions multiple promotions includes all promotions.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:67:2:4:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#cart_promo_total with promotions multiple promotions returns -110.00.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:67:2:4:2\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#cart_promo_total with promotions order discount includes order promo.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:67:2:3:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#cart_promo_total with promotions order discount reeturns -10.0.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:67:2:3:2\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#cart_promo_total without promotions returns 0.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:67:1:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#collect_backend_payment_methods example at ./spec/models/spree/order_spec.rb:1608.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:62:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#collect_backend_payment_methods example at ./spec/models/spree/order_spec.rb:1609.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:62:2\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#collect_backend_payment_methods example at ./spec/models/spree/order_spec.rb:1610.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:62:3\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#collect_frontend_payment_methods does not include a payment method from different stores.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:30:6\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#collect_frontend_payment_methods does not include a payment method that is not suitable for this order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:30:5\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#collect_frontend_payment_methods does not include backend payment method.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:30:3\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#collect_frontend_payment_methods does not include inactive payment methods.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:30:4\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#collect_frontend_payment_methods includes 'both' payment methods.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:30:2\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#collect_frontend_payment_methods includes frontend payment methods.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:30:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#completed? indicates if order is completed.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:42:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#confirmation_required? Spree::Config[:always_include_confirm_step] == false does not bomb out when an order has an unpersisted payment.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:25:3:2\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#confirmation_required? Spree::Config[:always_include_confirm_step] == false returns false if payments empty and Spree::Config[:always_include_confirm_step] == false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:25:3:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#confirmation_required? Spree::Config[:always_include_confirm_step] == true returns true if payments empty.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:25:2:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#confirmation_required? is required if the state is currently 'confirm'.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:25:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#confirmation_required? when at least one payment method requires confirmation example at ./spec/models/spree/order_spec.rb:627.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:25:5:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#confirmation_required? when the payment does not require confirmation example at ./spec/models/spree/order_spec.rb:618.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:25:4:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#considered_risky! events publishes order.updated event.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:36:2:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#considered_risky! sets considered_risky to true.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:36:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#create assigns an order number.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#create creates a randomized 35 character token.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:2\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#create_proposed_shipments assigns the coordinator returned shipments to its shipments.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:56:2\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#create_proposed_shipments has unassociated inventory units when backordered deletes inventory_unit.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:56:1:4:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#create_proposed_shipments has unassociated inventory units when on_hand deletes inventory_unit.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:56:1:3:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#create_proposed_shipments has unassociated inventory units when returned does not delete inventory_unit.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:56:1:2:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#create_proposed_shipments has unassociated inventory units when shipped does not delete inventory_unit.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:56:1:1:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#create_shipment_tax_charge! when order has no shipments example at ./spec/models/spree/order_spec.rb:1635.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:63:2:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#create_shipment_tax_charge! when order has shipments example at ./spec/models/spree/order_spec.rb:1625.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:63:1:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#create_shipment_tax_charge! when order has shipments example at ./spec/models/spree/order_spec.rb:1626.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:63:1:2\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#create_shipment_tax_charge! when order has shipments example at ./spec/models/spree/order_spec.rb:1627.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:63:1:3\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#credit_card_nil_payment when valid-amount(>0) creditcard payment expect not to build a new payment.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:61:2:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#credit_card_nil_payment when zero amount credit-card payment expect not to build a new payment.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:61:1:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#currency when object currency is ABC returns the currency from the object.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:24:1:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#destroying order will trigger ship and bill addresses destroy example at ./spec/models/spree/order_spec.rb:1668.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:65:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#disassociate_user! disassociates a user from an order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:34:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#display_adjustment_total returns the value as a spree money.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:21:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#display_item_total returns the value as a spree money.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:20:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#display_outstanding_balance returns the value as a spree money.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#display_pre_tax_item_amount returns the value as a spree money.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:50:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#display_pre_tax_total returns the value as a spree money.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:52:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#display_promo_total returns the value as a spree money.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:22:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#display_total returns the value as a spree money.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:23:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#ensure_available_shipping_rates when order has no shipments returns false and adds an error to the order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:83:1:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#ensure_available_shipping_rates when order has shipments with no shipping rates deletes all the shipments.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:83:2:2\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#ensure_available_shipping_rates when order has shipments with no shipping rates returns false and adds an error to the order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:83:2:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#ensure_available_shipping_rates when order has shipments with shipping rates returns nil and does not add an error to the order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:83:3:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#ensure_line_item_variants_are_not_discontinued when no variants are destroyed does not restart checkout.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:2:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#ensure_line_item_variants_are_not_discontinued when no variants are destroyed is true.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:2:2\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#ensure_line_item_variants_are_not_discontinued when variant is destroyed has error message.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:1:2\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#ensure_line_item_variants_are_not_discontinued when variant is destroyed is false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:1:3\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#ensure_line_item_variants_are_not_discontinued when variant is destroyed restarts checkout flow.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:1:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#ensure_line_items_are_in_stock has error message.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:17:2\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#ensure_line_items_are_in_stock is false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:17:3\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#ensure_line_items_are_in_stock restarts checkout flow.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:17:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#ensure_updated_shipments when order has shipments and is not completed destroys all shipments.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:38:1:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#ensure_updated_shipments when order has shipments and is not completed events publishes order.updated event.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:38:1:4:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#ensure_updated_shipments when order has shipments and is not completed resets shipment_total to 0.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:38:1:2\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#ensure_updated_shipments when order has shipments and is not completed restarts checkout flow.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:38:1:3\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#ensure_updated_shipments when order is completed does not destroy shipments.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:38:2:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#finalize! changes the shipment state to ready if order is paid.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:4\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#finalize! decreases the stock for each variant in the shipment.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:3\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#finalize! does not sell inventory units if track_inventory_levels is false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:5\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#finalize! events publishes order.completed event.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:8:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#finalize! freezes all adjustments.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:6\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#finalize! order is considered risky and order is approved leaves order in complete state.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:7:2:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#finalize! order is considered risky changes state to risky.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:7:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#finalize! sells inventory units.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:2\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#finalize! sets completed_at.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#full_name for a guest order example at ./spec/models/spree/order_spec.rb:118.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#full_name for a guest order with billing address example at ./spec/models/spree/order_spec.rb:123.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:2:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#full_name for an order with user example at ./spec/models/spree/order_spec.rb:106.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#full_name for an order with user without name example at ./spec/models/spree/order_spec.rb:111.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:2:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#fully_discounted? the order had inventory-related cost example at ./spec/models/spree/order_spec.rb:1507.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:58:2:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#fully_discounted? the order had no inventory-related cost example at ./spec/models/spree/order_spec.rb:1493.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:58:1:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#fully_shipped? when all order shipments were shipped example at ./spec/models/spree/order_spec.rb:2209.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:75:1:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#fully_shipped? when not all order shipments were shipped example at ./spec/models/spree/order_spec.rb:2213.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:75:2:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#has_free_shipping? when promotion is applied example at ./spec/models/spree/order_spec.rb:1823.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:68:1:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#has_free_shipping? when promotion is applied when free shipping promotion has item total rule when order total is in defined range example at ./spec/models/spree/order_spec.rb:1835.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:68:1:2:1:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#has_free_shipping? when promotion is applied when free shipping promotion has item total rule when order total is not in defined range example at ./spec/models/spree/order_spec.rb:1841.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:68:1:2:2:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#has_free_shipping? when promotion is not applied example at ./spec/models/spree/order_spec.rb:1847.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:68:2:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#has_non_reimbursement_related_refunds? a non-reimbursement related refund exists example at ./spec/models/spree/order_spec.rb:1355.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:55:2:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#has_non_reimbursement_related_refunds? a reimbursement related refund exists example at ./spec/models/spree/order_spec.rb:1377.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:55:4:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#has_non_reimbursement_related_refunds? an old-style refund exists example at ./spec/models/spree/order_spec.rb:1369.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:55:3:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#has_non_reimbursement_related_refunds? no refunds exist example at ./spec/models/spree/order_spec.rb:1348.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:55:1:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#line_items_without_shipping_rates when order has no shipments returns an empty array.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:82:1:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#line_items_without_shipping_rates when order has shipments with no shipping rates returns the line items without shipping rates.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:82:2:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#line_items_without_shipping_rates when order has shipments with shipping rates returns an empty array.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:82:3:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#order_refunded? when order does not have refunds returns false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:78:2:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#order_refunded? when orders has refunds when payment is void returns true.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:78:1:3:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#order_refunded? when orders has refunds when sum of refunds is equal to max amount which could be refunded returns true.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:78:1:2:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#order_refunded? when orders has refunds when sum of refunds is less than max amount which could be refunded returns false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:78:1:1:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#paid? when all order valid payments are completed when the amount of the valid payments < the order total example at ./spec/models/spree/order_spec.rb:2086.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:74:1:1:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#paid? when all order valid payments are completed when the amount of the valid payments == the order total example at ./spec/models/spree/order_spec.rb:2092.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:74:1:2:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#paid? when all order valid payments are completed when the amount of the valid payments > the order total example at ./spec/models/spree/order_spec.rb:2098.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:74:1:3:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#paid? when not all order payments are completed one is failed when the amount of the valid payments < the order total example at ./spec/models/spree/order_spec.rb:2140.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:74:3:1:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#paid? when not all order payments are completed one is failed when the amount of the valid payments == the order total example at ./spec/models/spree/order_spec.rb:2146.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:74:3:2:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#paid? when not all order payments are completed one is failed when the amount of the valid payments > the order total example at ./spec/models/spree/order_spec.rb:2152.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:74:3:3:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#paid? when not all order payments are completed one is invalid when the amount of the valid payments < the order total example at ./spec/models/spree/order_spec.rb:2168.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:74:4:1:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#paid? when not all order payments are completed one is invalid when the amount of the valid payments == the order total example at ./spec/models/spree/order_spec.rb:2174.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:74:4:2:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#paid? when not all order payments are completed one is invalid when the amount of the valid payments > the order total example at ./spec/models/spree/order_spec.rb:2180.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:74:4:3:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#paid? when not all order payments are completed one is void when the amount of the valid payments < the order total example at ./spec/models/spree/order_spec.rb:2112.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:74:2:1:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#paid? when not all order payments are completed one is void when the amount of the valid payments == the order total example at ./spec/models/spree/order_spec.rb:2118.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:74:2:2:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#paid? when not all order payments are completed one is void when the amount of the valid payments > the order total example at ./spec/models/spree/order_spec.rb:2124.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:74:2:3:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#partially_refunded? when order does not have refunds returns false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:77:2:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#partially_refunded? when orders has refunds when payment is failed returns false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:77:1:5:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#partially_refunded? when orders has refunds when payment is void returns false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:77:1:4:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#partially_refunded? when orders has refunds when sum of refunds is equal to max amount which could be refunded returns false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:77:1:2:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#partially_refunded? when orders has refunds when sum of refunds is greater than max amount which could be refunded returns false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:77:1:3:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#partially_refunded? when orders has refunds when sum of refunds is less than max amount which could be refunded returns true.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:77:1:1:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#payment_method returns the payment method.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:79:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#payment_source returns the payment source.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:80:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#pre_tax_item_amount sums all of the line items' pre tax amounts.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:49:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#pre_tax_total sums all of the line items' and shipments pre tax amounts.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:51:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#products can find a line item matching a given variant.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:32:2\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#products gets the quantity of a given variant.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:32:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#products match line item with options does not match line item without options.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:32:3:2\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#products match line item with options matches line item when options match.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:32:3:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#promo_code with promo code with coupon code batches returns the promotion code.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:59:2:2:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#promo_code with promo code with coupon code batches returns the same promotion code after line item removal.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:59:2:2:2\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#promo_code with promo code with single coupon code returns the promotion code.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:59:2:1:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#promo_code without promo code returns nil.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:59:1:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#quantity sums the quantity of all line items.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:54:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#restart_checkout_flow events publishes order.updated event.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:28:3:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#restart_checkout_flow updates the state column to the first checkout_steps value.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:28:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#restart_checkout_flow without line items updates the state column to cart.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:28:2:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#ship_address_attributes= when user does not have any addresses changes user default ship address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:73:3:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#ship_address_attributes= when user has address but without default ship address changes user default ship address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:73:4:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#ship_address_attributes= when user has default ship address changes user default ship addresss.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:73:1:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#ship_address_attributes= when user has no default address assigns a new default address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:73:2:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#shipping_eq_billing_address blank addresses example at ./spec/models/spree/order_spec.rb:1652.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:64:2:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#shipping_eq_billing_address no addresses example at ./spec/models/spree/order_spec.rb:1661.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:64:3:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#shipping_eq_billing_address with only bill address example at ./spec/models/spree/order_spec.rb:1643.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:64:1:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#state_changed does not do anything if state does not change.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:2\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#state_changed logs state changes.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#tax_address when tax_using_ship_address is not true returns bill_address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:27:2:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#tax_address when tax_using_ship_address is true returns ship_address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:27:1:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#tax_total adds included tax and additional tax.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:47:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#to_csv when order has line items returns the csv lines.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:84:2:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#to_csv when order has no line items returns no csv lines.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:84:1:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#total_weight example at ./spec/models/spree/order_spec.rb:2230.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:76:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#uneditable? returns false when order is during checkout.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:41:4\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#uneditable? returns true when order is canceled.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:41:2\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#uneditable? returns true when order is completed.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:41:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#uneditable? returns true when order is returned.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:41:3\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#update_with_updater! expects to update order with order updater.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#uppercase_number example at ./spec/models/spree/order_spec.rb:1854.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:69:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#valid_promotions with promotions expect return valid order promotions.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:66:2:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.#valid_promotions without promotions expect to return an empty array.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:66:1:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.Callbacks #clone_shipping_address clones the shipping address when use_shipping is true.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.Callbacks #clone_shipping_address does not clone the shipping address when use_shipping is false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:2\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.Scopes .complete example at ./spec/models/spree/order_spec.rb:27.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.Scopes .complete example at ./spec/models/spree/order_spec.rb:28.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:2\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.Scopes .incomplete example at ./spec/models/spree/order_spec.rb:32.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.Scopes .incomplete example at ./spec/models/spree/order_spec.rb:33.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:2\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.Scopes .multi_search returns orders based on an email.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.Scopes .multi_search returns orders based on the first name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4:2\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.Scopes .multi_search returns orders based on the full name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4:4\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.Scopes .multi_search returns orders based on the last name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4:3\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.Scopes .not_canceled example at ./spec/models/spree/order_spec.rb:37.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.add_update_hook calls hook during finalize.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:26:2\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.add_update_hook calls hook during update.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:26:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.behaves like lifecycle events lifecycle events order.created publishes created event when record is created.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.behaves like lifecycle events lifecycle events order.deleted publishes deleted event when record is deleted.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.behaves like lifecycle events lifecycle events order.updated publishes updated event when record is updated.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.behaves like metadata can query records by metadata properties.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:10\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:10.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:5\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:11.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:6\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:4.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:5.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:7.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:8.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:4\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.behaves like metadata reads data as not symbolized keys.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:8\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.behaves like metadata reads data as symbolized keys.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:7\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.bill_address_id= when assigned address does not belong to user sets order bill address to nil.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:70:2:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.bill_address_id= when assigned address exist when assigned address belongs to user assigns address to order as bill address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:70:1:1:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.bill_address_id= when assigned address exist when assigned address belongs to user does not set address as user default bill address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:70:1:1:2\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.bill_address_id= with guest user when assigning a different existing address sets order bill address to nil.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:70:3:2:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.bill_address_id= with guest user when assigning the same existing address does nothing.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:70:3:1:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.creates shipments cost update and persist totals.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.empty! completed order raises an exception.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:1:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.empty! incomplete order clears out line items, adjustments and update totals.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:2:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.insufficient_stock_lines returns line_item that has insufficient stock on hand.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.locking can lock.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:48:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.order transit to returned state from resumed state when all inventory_units returned example at ./spec/models/spree/order_spec.rb:1568.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:60:1:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.order transit to returned state from resumed state when some inventory_units returned example at ./spec/models/spree/order_spec.rb:1577.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:60:2:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.quick checkout #quick_checkout? returns false if the order has a shipping address but it is not a quick checkout address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:85:1:2\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.quick checkout #quick_checkout? returns false if the order has no shipping address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:85:1:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.quick checkout #quick_checkout? returns true if the order has a quick checkout shipping address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:85:1:3\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.quick checkout #quick_checkout_available? returns false if order does not require payment.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:85:2:5\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.quick checkout #quick_checkout_available? returns false if order has many shipments.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:85:2:4\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.quick checkout #quick_checkout_available? returns false if the order has physical products and some digital products.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:85:2:3\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.quick checkout #quick_checkout_available? returns true if the order has no digital products at all.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:85:2:2\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.quick checkout #quick_checkout_available? returns true if the order is fully digital.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:85:2:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.quick checkout #quick_checkout_require_address? returns false if the order does not require delivery.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:85:3:3\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.quick checkout #quick_checkout_require_address? returns false if the order is digital.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:85:3:2\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.quick checkout #quick_checkout_require_address? returns true if the order is not digital and delivery is required.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:85:3:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.ship_address_id= when assigned address does not belong to user sets order ship address to nil.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:72:2:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.ship_address_id= when assigned address exist when assigned address belongs to user assigns address to order as ship address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:72:1:1:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.ship_address_id= when assigned address exist when assigned address belongs to user does not set address as user default ship address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:72:1:1:2\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.ship_address_id= with guest user when assigning a different existing address sets order ship address to nil.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:72:3:2:1\"}}","Spree::Order at ./spec/models/spree/order_spec.rb.ship_address_id= with guest user when assigning the same existing address does nothing.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:72:3:1:1\"}}","Spree::OrderContents at ./spec/models/spree/order_contents_spec.rb.#add adds line item if one does not exist.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","Spree::OrderContents at ./spec/models/spree/order_contents_spec.rb.#add given a shipment ensure shipment calls update_amounts instead of order calling ensure_updated_shipments.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","Spree::OrderContents at ./spec/models/spree/order_contents_spec.rb.#add given quantity is not explicitly provided adds one line item.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","Spree::OrderContents at ./spec/models/spree/order_contents_spec.rb.#add not given a shipment ensures updated shipments.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","Spree::OrderContents at ./spec/models/spree/order_contents_spec.rb.#add running promotions one active line item promotion creates valid discount on order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8:2:1\"}}","Spree::OrderContents at ./spec/models/spree/order_contents_spec.rb.#add running promotions one active line item promotion example at ./spec/models/spree/order_contents_spec.rb:75.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8:2:2\"}}","Spree::OrderContents at ./spec/models/spree/order_contents_spec.rb.#add running promotions one active order promotion creates valid discount on order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8:1:1\"}}","Spree::OrderContents at ./spec/models/spree/order_contents_spec.rb.#add running promotions one active order promotion example at ./spec/models/spree/order_contents_spec.rb:75.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8:1:2\"}}","Spree::OrderContents at ./spec/models/spree/order_contents_spec.rb.#add updates line item if one exists.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","Spree::OrderContents at ./spec/models/spree/order_contents_spec.rb.#add updates order totals.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","Spree::OrderContents at ./spec/models/spree/order_contents_spec.rb.#add when store_credits payment example at ./spec/models/spree/order_contents_spec.rb:65.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7:1\"}}","Spree::OrderContents at ./spec/models/spree/order_contents_spec.rb.#remove given a shipment ensure shipment calls update_amounts instead of order calling ensure_updated_shipments.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:1\"}}","Spree::OrderContents at ./spec/models/spree/order_contents_spec.rb.#remove given an invalid variant raises an exception.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","Spree::OrderContents at ./spec/models/spree/order_contents_spec.rb.#remove given quantity is not explicitly provided removes one line item.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","Spree::OrderContents at ./spec/models/spree/order_contents_spec.rb.#remove not given a shipment ensures updated shipments.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:4:1\"}}","Spree::OrderContents at ./spec/models/spree/order_contents_spec.rb.#remove reduces line_item quantity if quantity is less the line_item quantity.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:5\"}}","Spree::OrderContents at ./spec/models/spree/order_contents_spec.rb.#remove removes line_item if quantity matches line_item quantity.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:7\"}}","Spree::OrderContents at ./spec/models/spree/order_contents_spec.rb.#remove updates order totals.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:8\"}}","Spree::OrderContents at ./spec/models/spree/order_contents_spec.rb.#remove when store_credits payment example at ./spec/models/spree/order_contents_spec.rb:184.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:6:1\"}}","Spree::OrderContents at ./spec/models/spree/order_contents_spec.rb.#remove_line_item given a shipment ensure shipment calls update_amounts instead of order calling ensure_updated_shipments.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","Spree::OrderContents at ./spec/models/spree/order_contents_spec.rb.#remove_line_item not given a shipment ensures updated shipments.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","Spree::OrderContents at ./spec/models/spree/order_contents_spec.rb.#remove_line_item removes line_item.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4\"}}","Spree::OrderContents at ./spec/models/spree/order_contents_spec.rb.#remove_line_item updates order totals.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:5\"}}","Spree::OrderContents at ./spec/models/spree/order_contents_spec.rb.#remove_line_item when store_credits payment example at ./spec/models/spree/order_contents_spec.rb:238.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3:1\"}}","Spree::OrderContents at ./spec/models/spree/order_contents_spec.rb.completed order updates order payment state.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","Spree::OrderContents at ./spec/models/spree/order_contents_spec.rb.update cart changes item quantity.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","Spree::OrderContents at ./spec/models/spree/order_contents_spec.rb.update cart ensures updated shipments.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:5\"}}","Spree::OrderContents at ./spec/models/spree/order_contents_spec.rb.update cart submits item quantity 0 does not filter if there is only one line item.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:4:3\"}}","Spree::OrderContents at ./spec/models/spree/order_contents_spec.rb.update cart submits item quantity 0 doesnt try to update unexistent items.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:4:2\"}}","Spree::OrderContents at ./spec/models/spree/order_contents_spec.rb.update cart submits item quantity 0 removes item from order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:4:1\"}}","Spree::OrderContents at ./spec/models/spree/order_contents_spec.rb.update cart updates order totals.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2\"}}","Spree::OrderContents at ./spec/models/spree/order_contents_spec.rb.update cart when store_credits payment example at ./spec/models/spree/order_contents_spec.rb:287.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3:1\"}}","Spree::OrderInventory at ./spec/models/spree/order_inventory_spec.rb.#add_to_shipment creates stock_movement.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:5\"}}","Spree::OrderInventory at ./spec/models/spree/order_inventory_spec.rb.#add_to_shipment inventory units state sets inventory_units state as per stock location availability.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","Spree::OrderInventory at ./spec/models/spree/order_inventory_spec.rb.#add_to_shipment order is not completed doesn't unstock items.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","Spree::OrderInventory at ./spec/models/spree/order_inventory_spec.rb.#add_to_shipment store doesnt track inventory creates only on hand inventory units.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:1\"}}","Spree::OrderInventory at ./spec/models/spree/order_inventory_spec.rb.#add_to_shipment variant doesnt track inventory creates only on hand inventory units.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:4:1\"}}","Spree::OrderInventory at ./spec/models/spree/order_inventory_spec.rb.#determine_target_shipment selects first non-shipped shipment that already contains given variant.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","Spree::OrderInventory at ./spec/models/spree/order_inventory_spec.rb.#determine_target_shipment when no shipments already contain this varint selects first non-shipped shipment that leaves from same stock_location.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","Spree::OrderInventory at ./spec/models/spree/order_inventory_spec.rb.when order has too many inventory units #remove_from_shipment backordered items are removed doesn't create on_hand items from backordered items.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3:7:1\"}}","Spree::OrderInventory at ./spec/models/spree/order_inventory_spec.rb.when order has too many inventory units #remove_from_shipment destroys backordered units first.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3:2\"}}","Spree::OrderInventory at ./spec/models/spree/order_inventory_spec.rb.when order has too many inventory units #remove_from_shipment destroys self if not inventory units remain.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3:5\"}}","Spree::OrderInventory at ./spec/models/spree/order_inventory_spec.rb.when order has too many inventory units #remove_from_shipment destroys unshipped units first.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3:3\"}}","Spree::OrderInventory at ./spec/models/spree/order_inventory_spec.rb.when order has too many inventory units #remove_from_shipment inventory unit line item and variant points to different products completed order removes only units that match both line item and variant.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3:6:1:1\"}}","Spree::OrderInventory at ./spec/models/spree/order_inventory_spec.rb.when order has too many inventory units #remove_from_shipment only attempts to destroy as many units as are eligible, and return amount destroyed.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3:4\"}}","Spree::OrderInventory at ./spec/models/spree/order_inventory_spec.rb.when order has too many inventory units #remove_from_shipment order is not completed doesn't restock items.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3:1:1\"}}","Spree::OrderInventory at ./spec/models/spree/order_inventory_spec.rb.when order has too many inventory units decreases the number of inventory units.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2\"}}","Spree::OrderInventory at ./spec/models/spree/order_inventory_spec.rb.when order has too many inventory units is a messed up order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","Spree::OrderInventory at ./spec/models/spree/order_inventory_spec.rb.when order is missing inventory units creates the proper number of inventory units.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::OrderMerger at ./spec/models/spree/order_merger_spec.rb.destroys the other order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","Spree::OrderMerger at ./spec/models/spree/order_merger_spec.rb.merging an order with a gift card merges the gift card.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1\"}}","Spree::OrderMerger at ./spec/models/spree/order_merger_spec.rb.merging an order with addresses assigned to an other complete order destroys the other order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1\"}}","Spree::OrderMerger at ./spec/models/spree/order_merger_spec.rb.merging together orders with invalid line items creates errors with invalid line items.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1\"}}","Spree::OrderMerger at ./spec/models/spree/order_merger_spec.rb.merging together two orders with different line items example at ./spec/models/spree/order_merger_spec.rb:117.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","Spree::OrderMerger at ./spec/models/spree/order_merger_spec.rb.merging together two orders with line items for the same variant example at ./spec/models/spree/order_merger_spec.rb:48.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","Spree::OrderMerger at ./spec/models/spree/order_merger_spec.rb.merging using extension-specific line_item_comparison_hooks 2 different line items example at ./spec/models/spree/order_merger_spec.rb:94.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2:1\"}}","Spree::OrderMerger at ./spec/models/spree/order_merger_spec.rb.merging using extension-specific line_item_comparison_hooks 2 equal line items example at ./spec/models/spree/order_merger_spec.rb:75.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1:1\"}}","Spree::OrderMerger at ./spec/models/spree/order_merger_spec.rb.persist the merge.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3\"}}","Spree::OrderMerger at ./spec/models/spree/order_merger_spec.rb.user is provided assigns user to new order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","Spree::OrderMerger at ./spec/models/spree/order_merger_spec.rb.when `discard_merged` is false does not change the other order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","Spree::OrderMerger at ./spec/models/spree/order_merger_spec.rb.when `discard_merged` is false keeps the other order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","Spree::OrderPromotion at ./spec/models/spree/order_promotion_spec.rb.#amount equals sum of adjustments created by promotion.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","Spree::OrderPromotion at ./spec/models/spree/order_promotion_spec.rb.#description returns the same value as Promotion description.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","Spree::OrderPromotion at ./spec/models/spree/order_promotion_spec.rb.#display_amount different currency return same currency as order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1\"}}","Spree::OrderPromotion at ./spec/models/spree/order_promotion_spec.rb.#display_amount returns Spree::Money instance with amount value and proper currency.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","Spree::OrderPromotion at ./spec/models/spree/order_promotion_spec.rb.#name returns the same value as Promotion name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::OrderUpdater at ./spec/models/spree/order_updater_spec.rb.#update_with_updater! updates item count.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","Spree::OrderUpdater at ./spec/models/spree/order_updater_spec.rb.completed order #update updates payment state.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1:1\"}}","Spree::OrderUpdater at ./spec/models/spree/order_updater_spec.rb.completed order #update updates shipment state.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1:2\"}}","Spree::OrderUpdater at ./spec/models/spree/order_updater_spec.rb.completed order #update updates shipments total again after updating shipments.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1:3\"}}","Spree::OrderUpdater at ./spec/models/spree/order_updater_spec.rb.completed order #update_shipments refresh rates keeps the original shipping method.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2:4:1\"}}","Spree::OrderUpdater at ./spec/models/spree/order_updater_spec.rb.completed order #update_shipments refreshes shipment rates.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2:2\"}}","Spree::OrderUpdater at ./spec/models/spree/order_updater_spec.rb.completed order #update_shipments updates each shipment.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2:1\"}}","Spree::OrderUpdater at ./spec/models/spree/order_updater_spec.rb.completed order #update_shipments updates the shipment amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2:3\"}}","Spree::OrderUpdater at ./spec/models/spree/order_updater_spec.rb.incomplete order #update_shipments resets shipping method to frontend-available.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:4:1\"}}","Spree::OrderUpdater at ./spec/models/spree/order_updater_spec.rb.incomplete order doesnt update each shipment.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:3\"}}","Spree::OrderUpdater at ./spec/models/spree/order_updater_spec.rb.incomplete order doesnt update payment state.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","Spree::OrderUpdater at ./spec/models/spree/order_updater_spec.rb.incomplete order doesnt update shipment state.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2\"}}","Spree::OrderUpdater at ./spec/models/spree/order_updater_spec.rb.order totals update item total.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","Spree::OrderUpdater at ./spec/models/spree/order_updater_spec.rb.order totals update order adjustments.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","Spree::OrderUpdater at ./spec/models/spree/order_updater_spec.rb.order totals update shipment total.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","Spree::OrderUpdater at ./spec/models/spree/order_updater_spec.rb.order totals updates payment totals.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::OrderUpdater at ./spec/models/spree/order_updater_spec.rb.order totals with order promotion followed by line item addition updates promotion total.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1\"}}","Spree::OrderUpdater at ./spec/models/spree/order_updater_spec.rb.state change.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5\"}}","Spree::OrderUpdater at ./spec/models/spree/order_updater_spec.rb.updating payment state is failed if no valid payments.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","Spree::OrderUpdater at ./spec/models/spree/order_updater_spec.rb.updating payment state order is canceled and is paid is credit_owed.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:5:2:1\"}}","Spree::OrderUpdater at ./spec/models/spree/order_updater_spec.rb.updating payment state order is canceled and is still unpaid is void.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:5:1:1\"}}","Spree::OrderUpdater at ./spec/models/spree/order_updater_spec.rb.updating payment state order is canceled and payment is refunded is void.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:5:3:1\"}}","Spree::OrderUpdater at ./spec/models/spree/order_updater_spec.rb.updating payment state order total equals payment total is paid.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:4:1\"}}","Spree::OrderUpdater at ./spec/models/spree/order_updater_spec.rb.updating payment state order total is greater than payment total is balance_due.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3:1\"}}","Spree::OrderUpdater at ./spec/models/spree/order_updater_spec.rb.updating payment state payment total is greater than order total is credit_owed.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1\"}}","Spree::OrderUpdater at ./spec/models/spree/order_updater_spec.rb.updating shipment state is backordered.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","Spree::OrderUpdater at ./spec/models/spree/order_updater_spec.rb.updating shipment state is nil.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","Spree::OrderUpdater at ./spec/models/spree/order_updater_spec.rb.updating shipment state is partial.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:6\"}}","Spree::OrderUpdater at ./spec/models/spree/order_updater_spec.rb.updating shipment state is pending.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:5\"}}","Spree::OrderUpdater at ./spec/models/spree/order_updater_spec.rb.updating shipment state is ready.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4\"}}","Spree::OrderUpdater at ./spec/models/spree/order_updater_spec.rb.updating shipment state is shipped.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3\"}}","Spree::Orders::Approve at ./spec/services/spree/orders/approve_spec.rb.with approver passed behaves like approves order example at ./spec/services/spree/orders/approve_spec.rb:13.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","Spree::Orders::Approve at ./spec/services/spree/orders/approve_spec.rb.with approver passed behaves like approves order example at ./spec/services/spree/orders/approve_spec.rb:14.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2\"}}","Spree::Orders::Approve at ./spec/services/spree/orders/approve_spec.rb.with approver passed behaves like approves order example at ./spec/services/spree/orders/approve_spec.rb:15.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3\"}}","Spree::Orders::Approve at ./spec/services/spree/orders/approve_spec.rb.with approver passed example at ./spec/services/spree/orders/approve_spec.rb:21.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","Spree::Orders::Approve at ./spec/services/spree/orders/approve_spec.rb.without approver passed behaves like approves order example at ./spec/services/spree/orders/approve_spec.rb:13.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","Spree::Orders::Approve at ./spec/services/spree/orders/approve_spec.rb.without approver passed behaves like approves order example at ./spec/services/spree/orders/approve_spec.rb:14.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:2\"}}","Spree::Orders::Approve at ./spec/services/spree/orders/approve_spec.rb.without approver passed behaves like approves order example at ./spec/services/spree/orders/approve_spec.rb:15.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:3\"}}","Spree::Orders::CreateUserAccount at ./spec/services/spree/orders/create_user_account_spec.rb.when order has no user assigns the bill address to the user.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","Spree::Orders::CreateUserAccount at ./spec/services/spree/orders/create_user_account_spec.rb.when order has no user assigns the ship address to the user.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","Spree::Orders::CreateUserAccount at ./spec/services/spree/orders/create_user_account_spec.rb.when order has no user assigns the user to the order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","Spree::Orders::CreateUserAccount at ./spec/services/spree/orders/create_user_account_spec.rb.when order has no user creates a new user.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::Orders::CreateUserAccount at ./spec/services/spree/orders/create_user_account_spec.rb.when user with the given email already exists assigns the user to the order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","Spree::Orders::CreateUserAccount at ./spec/services/spree/orders/create_user_account_spec.rb.when user with the given email already exists does not create a new user.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","Spree::Orders::CreateUserAccount at ./spec/services/spree/orders/create_user_account_spec.rb.when user with the given email already exists returns success with the user.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3\"}}","Spree::Payment at ./spec/models/spree/payment_spec.rb.#add_gateway_processing_error adds a gateway processing error.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:32:1\"}}","Spree::Payment at ./spec/models/spree/payment_spec.rb.#add_gateway_processing_error when the metafield already exists adds a gateway processing error.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:32:2:1\"}}","Spree::Payment at ./spec/models/spree/payment_spec.rb.#amount= when the amount is a number #amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:24:2:1\"}}","Spree::Payment at ./spec/models/spree/payment_spec.rb.#amount= when the amount is a string amount contains a comma #amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:24:1:4:1\"}}","Spree::Payment at ./spec/models/spree/payment_spec.rb.#amount= when the amount is a string amount contains a dollar sign #amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:24:1:3:1\"}}","Spree::Payment at ./spec/models/spree/payment_spec.rb.#amount= when the amount is a string amount contains a negative sign #amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:24:1:5:1\"}}","Spree::Payment at ./spec/models/spree/payment_spec.rb.#amount= when the amount is a string amount is a decimal #amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:24:1:1:1\"}}","Spree::Payment at ./spec/models/spree/payment_spec.rb.#amount= when the amount is a string amount is an empty string #amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:24:1:7:1\"}}","Spree::Payment at ./spec/models/spree/payment_spec.rb.#amount= when the amount is a string amount is an integer #amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:24:1:2:1\"}}","Spree::Payment at ./spec/models/spree/payment_spec.rb.#amount= when the amount is a string amount is invalid #amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:24:1:6:1\"}}","Spree::Payment at ./spec/models/spree/payment_spec.rb.#amount= when the locale uses a coma as a decimal separator amount contains a $ sign #amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:24:3:2:1\"}}","Spree::Payment at ./spec/models/spree/payment_spec.rb.#amount= when the locale uses a coma as a decimal separator amount contains a negative sign #amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:24:3:4:1\"}}","Spree::Payment at ./spec/models/spree/payment_spec.rb.#amount= when the locale uses a coma as a decimal separator amount is a decimal #amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:24:3:1:1\"}}","Spree::Payment at ./spec/models/spree/payment_spec.rb.#amount= when the locale uses a coma as a decimal separator amount is a number #amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:24:3:3:1\"}}","Spree::Payment at ./spec/models/spree/payment_spec.rb.#amount= when the locale uses a coma as a decimal separator amount uses a dot as a decimal separator #amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:24:3:5:1\"}}","Spree::Payment at ./spec/models/spree/payment_spec.rb.#build_source assigns user and gateway to payment source.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:20:2\"}}","Spree::Payment at ./spec/models/spree/payment_spec.rb.#build_source builds the payment's source.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:20:1\"}}","Spree::Payment at ./spec/models/spree/payment_spec.rb.#build_source does not build a new source when duplicating the model with source_attributes set.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:20:4\"}}","Spree::Payment at ./spec/models/spree/payment_spec.rb.#build_source errors when payment source not valid.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:20:3\"}}","Spree::Payment at ./spec/models/spree/payment_spec.rb.#build_source existing card assigns the existing card.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:20:5:1\"}}","Spree::Payment at ./spec/models/spree/payment_spec.rb.#can_credit? is false if credit_allowed is 0.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:2\"}}","Spree::Payment at ./spec/models/spree/payment_spec.rb.#can_credit? is true if credit_allowed > 0.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:1\"}}","Spree::Payment at ./spec/models/spree/payment_spec.rb.#captured_amount calculates based on capture events with 0 capture events.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1:1\"}}","Spree::Payment at ./spec/models/spree/payment_spec.rb.#captured_amount calculates based on capture events with some capture events.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1:2\"}}","Spree::Payment at ./spec/models/spree/payment_spec.rb.#credit_allowed is the difference between offsets total and payment amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:17:1\"}}","Spree::Payment at ./spec/models/spree/payment_spec.rb.#currency returns the order currency.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:21:1\"}}","Spree::Payment at ./spec/models/spree/payment_spec.rb.#display_amount returns a Spree::Money for this amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:22:1\"}}","Spree::Payment at ./spec/models/spree/payment_spec.rb.#display_source_name for source with display_name returns the display name of the source class.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:30:1:1\"}}","Spree::Payment at ./spec/models/spree/payment_spec.rb.#display_source_name for source without display_name returns the display name of the source class.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:30:2:1\"}}","Spree::Payment at ./spec/models/spree/payment_spec.rb.#editable? when the state is 'checkout' example at ./spec/models/spree/payment_spec.rb:1164.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:27:1:1\"}}","Spree::Payment at ./spec/models/spree/payment_spec.rb.#editable? when the state is 'completed' example at ./spec/models/spree/payment_spec.rb:1177.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:27:4:1\"}}","Spree::Payment at ./spec/models/spree/payment_spec.rb.#editable? when the state is 'failed' example at ./spec/models/spree/payment_spec.rb:1177.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:27:5:1\"}}","Spree::Payment at ./spec/models/spree/payment_spec.rb.#editable? when the state is 'invalid' example at ./spec/models/spree/payment_spec.rb:1177.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:27:7:1\"}}","Spree::Payment at ./spec/models/spree/payment_spec.rb.#editable? when the state is 'pending' example at ./spec/models/spree/payment_spec.rb:1170.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:27:2:1\"}}","Spree::Payment at ./spec/models/spree/payment_spec.rb.#editable? when the state is 'processing' example at ./spec/models/spree/payment_spec.rb:1177.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:27:3:1\"}}","Spree::Payment at ./spec/models/spree/payment_spec.rb.#editable? when the state is 'void' example at ./spec/models/spree/payment_spec.rb:1177.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:27:6:1\"}}","Spree::Payment at ./spec/models/spree/payment_spec.rb.#gateway_dashboard_payment_url returns nil.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:31:1\"}}","Spree::Payment at ./spec/models/spree/payment_spec.rb.#gateway_dashboard_payment_url when implemented returns the url.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:31:2:1\"}}","Spree::Payment at ./spec/models/spree/payment_spec.rb.#gateway_options contains an IP.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:23:1\"}}","Spree::Payment at ./spec/models/spree/payment_spec.rb.#gateway_options contains the email address from a persisted order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:23:2\"}}","Spree::Payment at ./spec/models/spree/payment_spec.rb.#gateway_processing_error_messages returns the gateway processing error messages.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:34:1\"}}","Spree::Payment at ./spec/models/spree/payment_spec.rb.#has_invalid_state? when the state is invalid example at ./spec/models/spree/payment_spec.rb:1306.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:33:1:1\"}}","Spree::Payment at ./spec/models/spree/payment_spec.rb.#has_invalid_state? when the state is valid example at ./spec/models/spree/payment_spec.rb:1312.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:33:2:1\"}}","Spree::Payment at ./spec/models/spree/payment_spec.rb.#save captured payments update order payment total.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:1:1\"}}","Spree::Payment at ./spec/models/spree/payment_spec.rb.#save completed orders updates payment_state and shipments.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:4:1\"}}","Spree::Payment at ./spec/models/spree/payment_spec.rb.#save not completed payments doesn't update order payment total.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:2:1\"}}","Spree::Payment at ./spec/models/spree/payment_spec.rb.#save not completed payments requires a payment method.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:2:2\"}}","Spree::Payment at ./spec/models/spree/payment_spec.rb.#save when profiles are not supported does not create a payment profile.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:6:1\"}}","Spree::Payment at ./spec/models/spree/payment_spec.rb.#save when profiles are supported when successfully connecting to the gateway creates a payment profile.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:5:3:1\"}}","Spree::Payment at ./spec/models/spree/payment_spec.rb.#save when profiles are supported when there is an error connecting to the gateway calls gateway_error.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:5:1:1\"}}","Spree::Payment at ./spec/models/spree/payment_spec.rb.#save when profiles are supported with multiple payment attempts does not try to create profiles on old failed payment attempts.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:5:2:1\"}}","Spree::Payment at ./spec/models/spree/payment_spec.rb.#save when the payment was completed but now void updates order payment total.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:3:1\"}}","Spree::Payment at ./spec/models/spree/payment_spec.rb.#source with source required disabled example at ./spec/models/spree/payment_spec.rb:1224.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:2:1\"}}","Spree::Payment at ./spec/models/spree/payment_spec.rb.#source with source required enabled example at ./spec/models/spree/payment_spec.rb:1207.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:1:1\"}}","Spree::Payment at ./spec/models/spree/payment_spec.rb.#source with source required enabled example at ./spec/models/spree/payment_spec.rb:1208.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:1:2\"}}","Spree::Payment at ./spec/models/spree/payment_spec.rb.#source with source required enabled when credit card is removed example at ./spec/models/spree/payment_spec.rb:1216.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:1:3:1\"}}","Spree::Payment at ./spec/models/spree/payment_spec.rb.#source with source required enabled when credit card is removed example at ./spec/models/spree/payment_spec.rb:1217.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:1:3:2\"}}","Spree::Payment at ./spec/models/spree/payment_spec.rb.#uncaptured_amount calculates based on capture events with 0 capture events.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1:1\"}}","Spree::Payment at ./spec/models/spree/payment_spec.rb.#uncaptured_amount calculates based on capture events with some capture events.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1:2\"}}","Spree::Payment at ./spec/models/spree/payment_spec.rb..risky does not return successful responses.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","Spree::Payment at ./spec/models/spree/payment_spec.rb.Callbacks #create_payment_profile when payment method supports profiles when source is a credit card creates a payment profile.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:2:1:1:1\"}}","Spree::Payment at ./spec/models/spree/payment_spec.rb.Callbacks #create_payment_profile when payment method supports profiles when source is not a credit card creates a payment profile.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:2:1:2:1\"}}","Spree::Payment at ./spec/models/spree/payment_spec.rb.Callbacks #update_order when destroying completed payment updates the order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1:1:1\"}}","Spree::Payment at ./spec/models/spree/payment_spec.rb.Callbacks #update_order when voiding a payment updates the order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1:2:1\"}}","Spree::Payment at ./spec/models/spree/payment_spec.rb.Constants example at ./spec/models/spree/payment_spec.rb:55.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","Spree::Payment at ./spec/models/spree/payment_spec.rb.Scopes .valid example at ./spec/models/spree/payment_spec.rb:78.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1\"}}","Spree::Payment at ./spec/models/spree/payment_spec.rb.Scopes .valid example at ./spec/models/spree/payment_spec.rb:79.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:2\"}}","Spree::Payment at ./spec/models/spree/payment_spec.rb.Scopes .valid example at ./spec/models/spree/payment_spec.rb:80.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:3\"}}","Spree::Payment at ./spec/models/spree/payment_spec.rb.Scopes .valid example at ./spec/models/spree/payment_spec.rb:81.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:4\"}}","Spree::Payment at ./spec/models/spree/payment_spec.rb.Validations amount validation with an associated order when the amount is greater than the max amount is invalid.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:4:1:1:1\"}}","Spree::Payment at ./spec/models/spree/payment_spec.rb.Validations amount validation with an associated order when the amount is less than the max amount example at ./spec/models/spree/payment_spec.rb:211.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:4:1:2:1\"}}","Spree::Payment at ./spec/models/spree/payment_spec.rb.Validations returns useful error messages when source is invalid.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:3\"}}","Spree::Payment at ./spec/models/spree/payment_spec.rb.Validations when payment source is not required do not validate source presence.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1:1\"}}","Spree::Payment at ./spec/models/spree/payment_spec.rb.Validations with payment source required validate source presence.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:2:1\"}}","Spree::Payment at ./spec/models/spree/payment_spec.rb.Validations with payment source required when skip_source_requirement is set to true does not validate source presence.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:2:2:1\"}}","Spree::Payment at ./spec/models/spree/payment_spec.rb.after_initialize :set_amount when associated with an order sets the amount to the order total minus the payment total.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:1\"}}","Spree::Payment at ./spec/models/spree/payment_spec.rb.after_initialize :set_amount when associated with an order when the amount is already set does not set the amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:2:1\"}}","Spree::Payment at ./spec/models/spree/payment_spec.rb.after_initialize :set_amount when not associated with an order does not set the amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1\"}}","Spree::Payment at ./spec/models/spree/payment_spec.rb.behaves like lifecycle events lifecycle events payment.created publishes created event when record is created.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","Spree::Payment at ./spec/models/spree/payment_spec.rb.behaves like lifecycle events lifecycle events payment.deleted publishes deleted event when record is deleted.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:1\"}}","Spree::Payment at ./spec/models/spree/payment_spec.rb.behaves like lifecycle events lifecycle events payment.updated publishes updated event when record is updated.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","Spree::Payment at ./spec/models/spree/payment_spec.rb.behaves like metadata can query records by metadata properties.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:10\"}}","Spree::Payment at ./spec/models/spree/payment_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:10.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:5\"}}","Spree::Payment at ./spec/models/spree/payment_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:11.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:6\"}}","Spree::Payment at ./spec/models/spree/payment_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:4.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","Spree::Payment at ./spec/models/spree/payment_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:5.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","Spree::Payment at ./spec/models/spree/payment_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:7.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3\"}}","Spree::Payment at ./spec/models/spree/payment_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:8.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:4\"}}","Spree::Payment at ./spec/models/spree/payment_spec.rb.behaves like metadata reads data as not symbolized keys.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:8\"}}","Spree::Payment at ./spec/models/spree/payment_spec.rb.behaves like metadata reads data as symbolized keys.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:7\"}}","Spree::Payment at ./spec/models/spree/payment_spec.rb.events completed state transition publishes payment.completed event.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:35:1:1\"}}","Spree::Payment at ./spec/models/spree/payment_spec.rb.events voided state transition publishes payment.voided event.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:35:2:1\"}}","Spree::Payment at ./spec/models/spree/payment_spec.rb.failure transitions to failed from pending state.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1\"}}","Spree::Payment at ./spec/models/spree/payment_spec.rb.failure transitions to failed from processing state.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2\"}}","Spree::Payment at ./spec/models/spree/payment_spec.rb.invalidate transitions from checkout to invalid.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:1\"}}","Spree::Payment at ./spec/models/spree/payment_spec.rb.is_avs_risky? returns false if avs_response included in NON_RISKY_AVS_CODES.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:25:1\"}}","Spree::Payment at ./spec/models/spree/payment_spec.rb.is_avs_risky? returns false if avs_response.blank?.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:25:2\"}}","Spree::Payment at ./spec/models/spree/payment_spec.rb.is_avs_risky? returns true if avs_response in RISKY_AVS_CODES.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:25:3\"}}","Spree::Payment at ./spec/models/spree/payment_spec.rb.is_cvv_risky? returns false if cvv_response_code == 'M'.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:26:1\"}}","Spree::Payment at ./spec/models/spree/payment_spec.rb.is_cvv_risky? returns false if cvv_response_code == nil.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:26:2\"}}","Spree::Payment at ./spec/models/spree/payment_spec.rb.is_cvv_risky? returns false if cvv_response_message == ''.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:26:3\"}}","Spree::Payment at ./spec/models/spree/payment_spec.rb.is_cvv_risky? returns true if cvv_response_code == [A-Z], omitting D.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:26:4\"}}","Spree::Payment at ./spec/models/spree/payment_spec.rb.processing #authorize! calls authorize on the gateway with the currency code.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:2:2\"}}","Spree::Payment at ./spec/models/spree/payment_spec.rb.processing #authorize! calls authorize on the gateway with the payment amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:2:1\"}}","Spree::Payment at ./spec/models/spree/payment_spec.rb.processing #authorize! if successful makes payment pending.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:2:4:2\"}}","Spree::Payment at ./spec/models/spree/payment_spec.rb.processing #authorize! if successful stores the response_code, avs_response and cvv_response fields.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:2:4:1\"}}","Spree::Payment at ./spec/models/spree/payment_spec.rb.processing #authorize! if unsuccessful when response is returned from gateway marks payment as failed.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:2:5:1:1\"}}","Spree::Payment at ./spec/models/spree/payment_spec.rb.processing #authorize! if unsuccessful when there is an error connecting to the gateway raises ActiveMerchant::ConnectionError and marks payment as failed.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:2:5:2:1\"}}","Spree::Payment at ./spec/models/spree/payment_spec.rb.processing #authorize! logs the response.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:2:3\"}}","Spree::Payment at ./spec/models/spree/payment_spec.rb.processing #capture! when payment is completed does nothing.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:5:2:1\"}}","Spree::Payment at ./spec/models/spree/payment_spec.rb.processing #capture! when payment is pending if successful for entire amount logs capture events.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:5:1:1:1:2\"}}","Spree::Payment at ./spec/models/spree/payment_spec.rb.processing #capture! when payment is pending if successful for entire amount makes payment complete.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:5:1:1:1:1\"}}","Spree::Payment at ./spec/models/spree/payment_spec.rb.processing #capture! when payment is pending if successful for partial amount logs capture events.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:5:1:1:2:2\"}}","Spree::Payment at ./spec/models/spree/payment_spec.rb.processing #capture! when payment is pending if successful for partial amount makes payment complete & create pending payment for remaining amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:5:1:1:2:1\"}}","Spree::Payment at ./spec/models/spree/payment_spec.rb.processing #capture! when payment is pending if unsuccessful when response is returned from gateway does not make payment complete.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:5:1:2:1:1\"}}","Spree::Payment at ./spec/models/spree/payment_spec.rb.processing #capture! when payment is pending if unsuccessful when there is an error connecting to the gateway raises ActiveMerchant::ConnectionError and marks payment as failed.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:5:1:2:2:1\"}}","Spree::Payment at ./spec/models/spree/payment_spec.rb.processing #confirm! for automatically captured payments logs a capture event.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:4:1:2\"}}","Spree::Payment at ./spec/models/spree/payment_spec.rb.processing #confirm! for automatically captured payments makes the payment complete.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:4:1:1\"}}","Spree::Payment at ./spec/models/spree/payment_spec.rb.processing #confirm! for automatically captured payments when payment is already completed does not log a duplicated capture event.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:4:1:3:2\"}}","Spree::Payment at ./spec/models/spree/payment_spec.rb.processing #confirm! for automatically captured payments when payment is already completed keeps the payment completed.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:4:1:3:1\"}}","Spree::Payment at ./spec/models/spree/payment_spec.rb.processing #confirm! for manually captured payments makes the payment pending.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:4:2:1\"}}","Spree::Payment at ./spec/models/spree/payment_spec.rb.processing #confirm! for manually captured payments when payment is already pending keeps the payment pending.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:4:2:2:1\"}}","Spree::Payment at ./spec/models/spree/payment_spec.rb.processing #process! allows payments with a gateway_customer_profile_id.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:1:5\"}}","Spree::Payment at ./spec/models/spree/payment_spec.rb.processing #process! allows payments with a gateway_payment_profile_id.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:1:6\"}}","Spree::Payment at ./spec/models/spree/payment_spec.rb.processing #process! authorizes without auto_capture.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:1:2\"}}","Spree::Payment at ./spec/models/spree/payment_spec.rb.processing #process! invalidates if payment method doesnt support source.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:1:4\"}}","Spree::Payment at ./spec/models/spree/payment_spec.rb.processing #process! makes the state 'processing'.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:1:3\"}}","Spree::Payment at ./spec/models/spree/payment_spec.rb.processing #process! purchases if with auto_capture.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:1:1\"}}","Spree::Payment at ./spec/models/spree/payment_spec.rb.processing #purchase! calls purchase on the gateway with the payment amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:3:1\"}}","Spree::Payment at ./spec/models/spree/payment_spec.rb.processing #purchase! if successful logs a capture event.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:3:3:3\"}}","Spree::Payment at ./spec/models/spree/payment_spec.rb.processing #purchase! if successful makes payment complete.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:3:3:2\"}}","Spree::Payment at ./spec/models/spree/payment_spec.rb.processing #purchase! if successful sets the uncaptured amount to 0.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:3:3:4\"}}","Spree::Payment at ./spec/models/spree/payment_spec.rb.processing #purchase! if successful stores the response_code and avs_response.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:3:3:1\"}}","Spree::Payment at ./spec/models/spree/payment_spec.rb.processing #purchase! if unsuccessful when response is returned from gateway does not log a capture event.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:3:4:1:2\"}}","Spree::Payment at ./spec/models/spree/payment_spec.rb.processing #purchase! if unsuccessful when response is returned from gateway makes payment failed.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:3:4:1:1\"}}","Spree::Payment at ./spec/models/spree/payment_spec.rb.processing #purchase! if unsuccessful when there is an error connecting to the gateway raises ActiveMerchant::ConnectionError and marks payment as failed.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:3:4:2:1\"}}","Spree::Payment at ./spec/models/spree/payment_spec.rb.processing #purchase! logs the response.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:3:2\"}}","Spree::Payment at ./spec/models/spree/payment_spec.rb.processing #void_transaction! if payment is already voided does not void the payment.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:6:6:1\"}}","Spree::Payment at ./spec/models/spree/payment_spec.rb.processing #void_transaction! if response_code is blank voids the payment without calling the gateway.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:6:7:1\"}}","Spree::Payment at ./spec/models/spree/payment_spec.rb.processing #void_transaction! if successful updates the response_code with the authorization from the gateway.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:6:4:1\"}}","Spree::Payment at ./spec/models/spree/payment_spec.rb.processing #void_transaction! if unsuccessful when response is returned from gateway does not void the payment.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:6:5:1:1\"}}","Spree::Payment at ./spec/models/spree/payment_spec.rb.processing #void_transaction! if unsuccessful when there is an error connecting to the gateway raises ActiveMerchant::ConnectionError and marks payment as failed.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:6:5:2:1\"}}","Spree::Payment at ./spec/models/spree/payment_spec.rb.processing #void_transaction! logs the response.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:6:3\"}}","Spree::Payment at ./spec/models/spree/payment_spec.rb.processing #void_transaction! when profiles are not supported calls payment_gateway.void with the payment's response_code.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:6:2:1\"}}","Spree::Payment at ./spec/models/spree/payment_spec.rb.processing #void_transaction! when profiles are supported calls payment_gateway.void with the payment's response_code.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:6:1:1\"}}","Spree::Payment at ./spec/models/spree/payment_spec.rb.state changes are logged to the database.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:28:1\"}}","Spree::Payment at ./spec/models/spree/payment_spec.rb.when already processing returns nil without trying to process the source.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:1\"}}","Spree::Payment at ./spec/models/spree/payment_spec.rb.with source optional raises no error if source is not specified example at ./spec/models/spree/payment_spec.rb:740.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:1:1\"}}","Spree::Payment at ./spec/models/spree/payment_spec.rb.with source required raises an error if no source is specified example at ./spec/models/spree/payment_spec.rb:727.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:1:1\"}}","Spree::Payment::CustomEvents at ./spec/models/spree/payment/custom_events_spec.rb.order.paid event does not publish order.paid when order still has outstanding balance.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","Spree::Payment::CustomEvents at ./spec/models/spree/payment/custom_events_spec.rb.order.paid event publishes order.paid when payment completes and order is fully paid.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","Spree::Payment::CustomEvents at ./spec/models/spree/payment/custom_events_spec.rb.payment.paid event does not publish payment.paid when state changes to something other than completed.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","Spree::Payment::CustomEvents at ./spec/models/spree/payment/custom_events_spec.rb.payment.paid event does not publish when events are disabled.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","Spree::Payment::CustomEvents at ./spec/models/spree/payment/custom_events_spec.rb.payment.paid event publishes payment.paid when payment state changes to completed.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::Payment::GatewayOptions at ./spec/models/spree/payment/gateway_options_spec.rb.#billing_address example at ./spec/models/spree/payment/gateway_options_spec.rb:128.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:1\"}}","Spree::Payment::GatewayOptions at ./spec/models/spree/payment/gateway_options_spec.rb.#currency example at ./spec/models/spree/payment/gateway_options_spec.rb:122.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:1\"}}","Spree::Payment::GatewayOptions at ./spec/models/spree/payment/gateway_options_spec.rb.#customer example at ./spec/models/spree/payment/gateway_options_spec.rb:74.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","Spree::Payment::GatewayOptions at ./spec/models/spree/payment/gateway_options_spec.rb.#customer_id example at ./spec/models/spree/payment/gateway_options_spec.rb:80.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","Spree::Payment::GatewayOptions at ./spec/models/spree/payment/gateway_options_spec.rb.#discount example at ./spec/models/spree/payment/gateway_options_spec.rb:116.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:1\"}}","Spree::Payment::GatewayOptions at ./spec/models/spree/payment/gateway_options_spec.rb.#email example at ./spec/models/spree/payment/gateway_options_spec.rb:68.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","Spree::Payment::GatewayOptions at ./spec/models/spree/payment/gateway_options_spec.rb.#ip example at ./spec/models/spree/payment/gateway_options_spec.rb:86.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","Spree::Payment::GatewayOptions at ./spec/models/spree/payment/gateway_options_spec.rb.#order example at ./spec/models/spree/payment/gateway_options_spec.rb:50.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::Payment::GatewayOptions at ./spec/models/spree/payment/gateway_options_spec.rb.#order_id example at ./spec/models/spree/payment/gateway_options_spec.rb:92.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1\"}}","Spree::Payment::GatewayOptions at ./spec/models/spree/payment/gateway_options_spec.rb.#payment example at ./spec/models/spree/payment/gateway_options_spec.rb:56.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","Spree::Payment::GatewayOptions at ./spec/models/spree/payment/gateway_options_spec.rb.#payment_id example at ./spec/models/spree/payment/gateway_options_spec.rb:62.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","Spree::Payment::GatewayOptions at ./spec/models/spree/payment/gateway_options_spec.rb.#shipping example at ./spec/models/spree/payment/gateway_options_spec.rb:98.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1\"}}","Spree::Payment::GatewayOptions at ./spec/models/spree/payment/gateway_options_spec.rb.#shipping_address example at ./spec/models/spree/payment/gateway_options_spec.rb:134.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:1\"}}","Spree::Payment::GatewayOptions at ./spec/models/spree/payment/gateway_options_spec.rb.#subtotal example at ./spec/models/spree/payment/gateway_options_spec.rb:110.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1\"}}","Spree::Payment::GatewayOptions at ./spec/models/spree/payment/gateway_options_spec.rb.#tax example at ./spec/models/spree/payment/gateway_options_spec.rb:104.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1\"}}","Spree::Payment::GatewayOptions at ./spec/models/spree/payment/gateway_options_spec.rb.#to_hash example at ./spec/models/spree/payment/gateway_options_spec.rb:158.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:1\"}}","Spree::PaymentMethod at ./spec/models/spree/payment_method_spec.rb.#auto_capture? when auto_capture is nil and when Spree::Config[:auto_capture] is false is false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1:1\"}}","Spree::PaymentMethod at ./spec/models/spree/payment_method_spec.rb.#auto_capture? when auto_capture is nil and when Spree::Config[:auto_capture] is true is true.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:2:1\"}}","Spree::PaymentMethod at ./spec/models/spree/payment_method_spec.rb.#auto_capture? when auto_capture is not nil and is false is true.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:2:1\"}}","Spree::PaymentMethod at ./spec/models/spree/payment_method_spec.rb.#auto_capture? when auto_capture is not nil and is true is true.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1:1\"}}","Spree::PaymentMethod at ./spec/models/spree/payment_method_spec.rb.#available_for_order? when the order is fully covered by store credit example at ./spec/models/spree/payment_method_spec.rb:148.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3:1\"}}","Spree::PaymentMethod at ./spec/models/spree/payment_method_spec.rb.#available_for_order? when the order is not covered by store credit example at ./spec/models/spree/payment_method_spec.rb:136.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1\"}}","Spree::PaymentMethod at ./spec/models/spree/payment_method_spec.rb.#available_for_order? when the order is partially covered by store credit example at ./spec/models/spree/payment_method_spec.rb:142.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1\"}}","Spree::PaymentMethod at ./spec/models/spree/payment_method_spec.rb.#available_for_store? returns false if currenct store id is not included.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2\"}}","Spree::PaymentMethod at ./spec/models/spree/payment_method_spec.rb.#available_for_store? returns true if currenct store id is included.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3\"}}","Spree::PaymentMethod at ./spec/models/spree/payment_method_spec.rb.#available_for_store? returns true when passed a nil value.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","Spree::PaymentMethod at ./spec/models/spree/payment_method_spec.rb.#payment_icon_name example at ./spec/models/spree/payment_method_spec.rb:185.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1\"}}","Spree::PaymentMethod at ./spec/models/spree/payment_method_spec.rb.#payment_source_class example at ./spec/models/spree/payment_method_spec.rb:181.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","Spree::PaymentMethod at ./spec/models/spree/payment_method_spec.rb.#source_required? example at ./spec/models/spree/payment_method_spec.rb:175.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","Spree::PaymentMethod at ./spec/models/spree/payment_method_spec.rb.behaves like metadata can query records by metadata properties.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:10\"}}","Spree::PaymentMethod at ./spec/models/spree/payment_method_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:10.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","Spree::PaymentMethod at ./spec/models/spree/payment_method_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:11.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","Spree::PaymentMethod at ./spec/models/spree/payment_method_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:4.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::PaymentMethod at ./spec/models/spree/payment_method_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:5.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","Spree::PaymentMethod at ./spec/models/spree/payment_method_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:7.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","Spree::PaymentMethod at ./spec/models/spree/payment_method_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:8.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","Spree::PaymentMethod at ./spec/models/spree/payment_method_spec.rb.behaves like metadata reads data as not symbolized keys.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8\"}}","Spree::PaymentMethod at ./spec/models/spree/payment_method_spec.rb.behaves like metadata reads data as symbolized keys.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7\"}}","Spree::PaymentMethod at ./spec/models/spree/payment_method_spec.rb.visibility scopes #available returns all methods available to front-end/back-end.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","Spree::PaymentMethod at ./spec/models/spree/payment_method_spec.rb.visibility scopes #available_on_back_end returns all methods available to back-end.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:4:1\"}}","Spree::PaymentMethod at ./spec/models/spree/payment_method_spec.rb.visibility scopes #available_on_front_end returns all methods available to front-end.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:1\"}}","Spree::PaymentMethod at ./spec/models/spree/payment_method_spec.rb.visibility scopes #for_store returns all methods available to front-end/back-end for a store.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:5:1\"}}","Spree::PaymentMethod at ./spec/models/spree/payment_method_spec.rb.visibility scopes has 5 total methods.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","Spree::PaymentMethod at ./spec/models/spree/payment_method_spec.rb.when payment method is destroyed destroys the payment method.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1\"}}","Spree::PaymentMethod::StoreCredit at ./spec/models/spree/payment_method/store_credit_spec.rb.#authorize when the currency does not match the order currency declines the credit.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","Spree::PaymentMethod::StoreCredit at ./spec/models/spree/payment_method/store_credit_spec.rb.#authorize with a valid request authorizes a valid store credit.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1\"}}","Spree::PaymentMethod::StoreCredit at ./spec/models/spree/payment_method/store_credit_spec.rb.#authorize with a valid request with an originator passes the originator.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:2:1\"}}","Spree::PaymentMethod::StoreCredit at ./spec/models/spree/payment_method/store_credit_spec.rb.#authorize with insuffient funds declines a store credit.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","Spree::PaymentMethod::StoreCredit at ./spec/models/spree/payment_method/store_credit_spec.rb.#authorize without an invalid store credit declines an unknown store credit.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","Spree::PaymentMethod::StoreCredit at ./spec/models/spree/payment_method/store_credit_spec.rb.#available_for_order? when order has a gift card example at ./spec/models/spree/payment_method/store_credit_spec.rb:316.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:3:1\"}}","Spree::PaymentMethod::StoreCredit at ./spec/models/spree/payment_method/store_credit_spec.rb.#available_for_order? when user don't store credits example at ./spec/models/spree/payment_method/store_credit_spec.rb:309.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2:1\"}}","Spree::PaymentMethod::StoreCredit at ./spec/models/spree/payment_method/store_credit_spec.rb.#available_for_order? when user have store credits example at ./spec/models/spree/payment_method/store_credit_spec.rb:302.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1:1\"}}","Spree::PaymentMethod::StoreCredit at ./spec/models/spree/payment_method/store_credit_spec.rb.#cancel store credit event found creates a store credit for the same amount that was captured.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1:1\"}}","Spree::PaymentMethod::StoreCredit at ./spec/models/spree/payment_method/store_credit_spec.rb.#cancel store credit event found returns a valid store credit cancel request.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1:2\"}}","Spree::PaymentMethod::StoreCredit at ./spec/models/spree/payment_method/store_credit_spec.rb.#cancel store credit event not found returns an error response.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2:1\"}}","Spree::PaymentMethod::StoreCredit at ./spec/models/spree/payment_method/store_credit_spec.rb.#capture when the currency does not match the order currency declines the credit.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:1\"}}","Spree::PaymentMethod::StoreCredit at ./spec/models/spree/payment_method/store_credit_spec.rb.#capture when unable to authorize the amount declines a store credit.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","Spree::PaymentMethod::StoreCredit at ./spec/models/spree/payment_method/store_credit_spec.rb.#capture with a valid request captures the store credit.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:4:1\"}}","Spree::PaymentMethod::StoreCredit at ./spec/models/spree/payment_method/store_credit_spec.rb.#capture with a valid request with an originator passes the originator.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:4:2:1\"}}","Spree::PaymentMethod::StoreCredit at ./spec/models/spree/payment_method/store_credit_spec.rb.#capture with an invalid auth code declines an unknown store credit.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","Spree::PaymentMethod::StoreCredit at ./spec/models/spree/payment_method/store_credit_spec.rb.#credit when the store credit isn't credited successfully returns an error response.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1\"}}","Spree::PaymentMethod::StoreCredit at ./spec/models/spree/payment_method/store_credit_spec.rb.#credit with a valid credit request credits a valid store credit credit request.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3:1\"}}","Spree::PaymentMethod::StoreCredit at ./spec/models/spree/payment_method/store_credit_spec.rb.#credit with an invalid auth code declines an unknown store credit.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:1\"}}","Spree::PaymentMethod::StoreCredit at ./spec/models/spree/payment_method/store_credit_spec.rb.#credit with an originator passes the originator.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:4:1\"}}","Spree::PaymentMethod::StoreCredit at ./spec/models/spree/payment_method/store_credit_spec.rb.#payment_source_class example at ./spec/models/spree/payment_method/store_credit_spec.rb:329.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1\"}}","Spree::PaymentMethod::StoreCredit at ./spec/models/spree/payment_method/store_credit_spec.rb.#purchase captures a purchase if it can find a pending credit for the correct amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2\"}}","Spree::PaymentMethod::StoreCredit at ./spec/models/spree/payment_method/store_credit_spec.rb.#purchase declines a purchase if it can't find a pending credit for the correct amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","Spree::PaymentMethod::StoreCredit at ./spec/models/spree/payment_method/store_credit_spec.rb.#source_required? example at ./spec/models/spree/payment_method/store_credit_spec.rb:323.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1\"}}","Spree::PaymentMethod::StoreCredit at ./spec/models/spree/payment_method/store_credit_spec.rb.#void voids a valid store credit void request.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3\"}}","Spree::PaymentMethod::StoreCredit at ./spec/models/spree/payment_method/store_credit_spec.rb.#void when the store credit is not voided successfully returns an error response.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","Spree::PaymentMethod::StoreCredit at ./spec/models/spree/payment_method/store_credit_spec.rb.#void with an invalid auth code declines an unknown store credit.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","Spree::PaymentMethod::StoreCredit at ./spec/models/spree/payment_method/store_credit_spec.rb.#void with an originator passes the originator.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4:1\"}}","Spree::PaymentSource at ./spec/models/spree/payment_source_spec.rb.#gateway_customer when user is not present returns nil.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","Spree::PaymentSource at ./spec/models/spree/payment_source_spec.rb.#gateway_customer when user is present returns the gateway customer for the user.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","Spree::Payments::Create at ./spec/services/spree/payments/create_spec.rb.invalid attributes example at ./spec/services/spree/payments/create_spec.rb:151.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","Spree::Payments::Create at ./spec/services/spree/payments/create_spec.rb.invalid attributes example at ./spec/services/spree/payments/create_spec.rb:152.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","Spree::Payments::Create at ./spec/services/spree/payments/create_spec.rb.missing payment method example at ./spec/services/spree/payments/create_spec.rb:131.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","Spree::Payments::Create at ./spec/services/spree/payments/create_spec.rb.missing payment method example at ./spec/services/spree/payments/create_spec.rb:132.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","Spree::Payments::Create at ./spec/services/spree/payments/create_spec.rb.valid attributes with existing source source assigned to a different user example at ./spec/services/spree/payments/create_spec.rb:93.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:1\"}}","Spree::Payments::Create at ./spec/services/spree/payments/create_spec.rb.valid attributes with existing source source assigned to a different user example at ./spec/services/spree/payments/create_spec.rb:94.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:2\"}}","Spree::Payments::Create at ./spec/services/spree/payments/create_spec.rb.valid attributes with existing source valid source creates new payment record.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1:1\"}}","Spree::Payments::Create at ./spec/services/spree/payments/create_spec.rb.valid attributes with existing source valid source example at ./spec/services/spree/payments/create_spec.rb:39.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1:2\"}}","Spree::Payments::Create at ./spec/services/spree/payments/create_spec.rb.valid attributes with existing source valid source example at ./spec/services/spree/payments/create_spec.rb:40.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1:3\"}}","Spree::Payments::Create at ./spec/services/spree/payments/create_spec.rb.valid attributes with existing source valid source example at ./spec/services/spree/payments/create_spec.rb:85.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1:4\"}}","Spree::Payments::Create at ./spec/services/spree/payments/create_spec.rb.valid attributes with new source attributes creates new payment record.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","Spree::Payments::Create at ./spec/services/spree/payments/create_spec.rb.valid attributes with new source attributes creates new payment source record.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:4\"}}","Spree::Payments::Create at ./spec/services/spree/payments/create_spec.rb.valid attributes with new source attributes example at ./spec/services/spree/payments/create_spec.rb:39.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2\"}}","Spree::Payments::Create at ./spec/services/spree/payments/create_spec.rb.valid attributes with new source attributes example at ./spec/services/spree/payments/create_spec.rb:40.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3\"}}","Spree::Payments::Create at ./spec/services/spree/payments/create_spec.rb.valid attributes with new source attributes with user assigns user example at ./spec/services/spree/payments/create_spec.rb:64.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:5:5:1\"}}","Spree::Payments::Create at ./spec/services/spree/payments/create_spec.rb.valid attributes with new source attributes with user creates new payment record.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:5:1\"}}","Spree::Payments::Create at ./spec/services/spree/payments/create_spec.rb.valid attributes with new source attributes with user creates new payment source record.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:5:4\"}}","Spree::Payments::Create at ./spec/services/spree/payments/create_spec.rb.valid attributes with new source attributes with user example at ./spec/services/spree/payments/create_spec.rb:39.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:5:2\"}}","Spree::Payments::Create at ./spec/services/spree/payments/create_spec.rb.valid attributes with new source attributes with user example at ./spec/services/spree/payments/create_spec.rb:40.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:5:3\"}}","Spree::Payments::Create at ./spec/services/spree/payments/create_spec.rb.valid attributes without source example at ./spec/services/spree/payments/create_spec.rb:110.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","Spree::Payments::Create at ./spec/services/spree/payments/create_spec.rb.valid attributes without source example at ./spec/services/spree/payments/create_spec.rb:111.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:2\"}}","Spree::PermissionConfiguration at ./spec/lib/spree/core/permission_configuration_spec.rb.#assign adds to existing permission sets when called multiple times.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","Spree::PermissionConfiguration at ./spec/lib/spree/core/permission_configuration_spec.rb.#assign assigns a single permission set to a role.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::PermissionConfiguration at ./spec/lib/spree/core/permission_configuration_spec.rb.#assign assigns multiple permission sets to a role.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","Spree::PermissionConfiguration at ./spec/lib/spree/core/permission_configuration_spec.rb.#assign does not duplicate permission sets.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","Spree::PermissionConfiguration at ./spec/lib/spree/core/permission_configuration_spec.rb.#assign normalizes role names to symbols.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","Spree::PermissionConfiguration at ./spec/lib/spree/core/permission_configuration_spec.rb.#clear removes all permission sets from a role.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","Spree::PermissionConfiguration at ./spec/lib/spree/core/permission_configuration_spec.rb.#clear returns nil for non-existent roles.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3\"}}","Spree::PermissionConfiguration at ./spec/lib/spree/core/permission_configuration_spec.rb.#clear returns the removed permission sets.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","Spree::PermissionConfiguration at ./spec/lib/spree/core/permission_configuration_spec.rb.#permission_sets_for normalizes role names.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3\"}}","Spree::PermissionConfiguration at ./spec/lib/spree/core/permission_configuration_spec.rb.#permission_sets_for returns an empty array for non-configured roles.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","Spree::PermissionConfiguration at ./spec/lib/spree/core/permission_configuration_spec.rb.#permission_sets_for returns the assigned permission sets.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","Spree::PermissionConfiguration at ./spec/lib/spree/core/permission_configuration_spec.rb.#permission_sets_for_roles combines permission sets from multiple roles.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","Spree::PermissionConfiguration at ./spec/lib/spree/core/permission_configuration_spec.rb.#permission_sets_for_roles deduplicates permission sets shared across roles.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2\"}}","Spree::PermissionConfiguration at ./spec/lib/spree/core/permission_configuration_spec.rb.#permission_sets_for_roles returns empty array when no roles have permission sets.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3\"}}","Spree::PermissionConfiguration at ./spec/lib/spree/core/permission_configuration_spec.rb.#reset! clears all role permissions.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","Spree::PermissionConfiguration at ./spec/lib/spree/core/permission_configuration_spec.rb.#role_configured? returns false for cleared roles.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:3\"}}","Spree::PermissionConfiguration at ./spec/lib/spree/core/permission_configuration_spec.rb.#role_configured? returns false for non-configured roles.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2\"}}","Spree::PermissionConfiguration at ./spec/lib/spree/core/permission_configuration_spec.rb.#role_configured? returns true for configured roles.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","Spree::PermissionConfiguration at ./spec/lib/spree/core/permission_configuration_spec.rb.#roles returns all configured roles.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","Spree::PermissionConfiguration at ./spec/lib/spree/core/permission_configuration_spec.rb.#roles returns empty array when no roles are configured.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2\"}}","Spree::PermissionSets::Base at ./spec/models/spree/permission_sets/base_spec.rb.#activate! raises NotImplementedError.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","Spree::PermissionSets::Base at ./spec/models/spree/permission_sets/base_spec.rb.#initialize stores the ability.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::PermissionSets::Base at ./spec/models/spree/permission_sets/base_spec.rb.delegation methods #can delegates to ability.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","Spree::PermissionSets::Base at ./spec/models/spree/permission_sets/base_spec.rb.delegation methods #can? delegates to ability.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3:1\"}}","Spree::PermissionSets::Base at ./spec/models/spree/permission_sets/base_spec.rb.delegation methods #cannot delegates to ability.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","Spree::PermissionSets::Base at ./spec/models/spree/permission_sets/base_spec.rb.delegation methods #store returns the store from the ability.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:5:1\"}}","Spree::PermissionSets::Base at ./spec/models/spree/permission_sets/base_spec.rb.delegation methods #user returns the user from the ability.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4:1\"}}","Spree::PermissionSets::DefaultCustomer at ./spec/models/spree/permission_sets/default_customer_spec.rb.#activate! address permissions allows managing own address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5:1\"}}","Spree::PermissionSets::DefaultCustomer at ./spec/models/spree/permission_sets/default_customer_spec.rb.#activate! address permissions prevents managing other user address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5:2\"}}","Spree::PermissionSets::DefaultCustomer at ./spec/models/spree/permission_sets/default_customer_spec.rb.#activate! address permissions with guest user (non-persisted) prevents guest user from editing other guest addresses (IDOR protection).{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5:3:2\"}}","Spree::PermissionSets::DefaultCustomer at ./spec/models/spree/permission_sets/default_customer_spec.rb.#activate! address permissions with guest user (non-persisted) prevents guest user from managing addresses with nil user_id (IDOR protection).{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5:3:1\"}}","Spree::PermissionSets::DefaultCustomer at ./spec/models/spree/permission_sets/default_customer_spec.rb.#activate! address permissions with guest user (non-persisted) prevents guest user from reading other guest addresses (IDOR protection).{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5:3:4\"}}","Spree::PermissionSets::DefaultCustomer at ./spec/models/spree/permission_sets/default_customer_spec.rb.#activate! address permissions with guest user (non-persisted) prevents guest user from updating other guest addresses (IDOR protection).{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5:3:3\"}}","Spree::PermissionSets::DefaultCustomer at ./spec/models/spree/permission_sets/default_customer_spec.rb.#activate! admin permissions does not grant admin access.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8:1\"}}","Spree::PermissionSets::DefaultCustomer at ./spec/models/spree/permission_sets/default_customer_spec.rb.#activate! admin permissions does not grant manage access to Product.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8:2\"}}","Spree::PermissionSets::DefaultCustomer at ./spec/models/spree/permission_sets/default_customer_spec.rb.#activate! catalog read access grants read access to Country.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","Spree::PermissionSets::DefaultCustomer at ./spec/models/spree/permission_sets/default_customer_spec.rb.#activate! catalog read access grants read access to Product.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2\"}}","Spree::PermissionSets::DefaultCustomer at ./spec/models/spree/permission_sets/default_customer_spec.rb.#activate! catalog read access grants read access to Store.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:5\"}}","Spree::PermissionSets::DefaultCustomer at ./spec/models/spree/permission_sets/default_customer_spec.rb.#activate! catalog read access grants read access to Taxon.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:4\"}}","Spree::PermissionSets::DefaultCustomer at ./spec/models/spree/permission_sets/default_customer_spec.rb.#activate! catalog read access grants read access to Variant.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3\"}}","Spree::PermissionSets::DefaultCustomer at ./spec/models/spree/permission_sets/default_customer_spec.rb.#activate! credit card permissions allows destroying own credit card.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6:2\"}}","Spree::PermissionSets::DefaultCustomer at ./spec/models/spree/permission_sets/default_customer_spec.rb.#activate! credit card permissions allows reading own credit card.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6:1\"}}","Spree::PermissionSets::DefaultCustomer at ./spec/models/spree/permission_sets/default_customer_spec.rb.#activate! credit card permissions prevents reading other user credit card.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6:3\"}}","Spree::PermissionSets::DefaultCustomer at ./spec/models/spree/permission_sets/default_customer_spec.rb.#activate! order permissions allows creating orders.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","Spree::PermissionSets::DefaultCustomer at ./spec/models/spree/permission_sets/default_customer_spec.rb.#activate! order permissions with token allows updating incomplete order with correct token.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:3:2\"}}","Spree::PermissionSets::DefaultCustomer at ./spec/models/spree/permission_sets/default_customer_spec.rb.#activate! order permissions with token allows viewing order with correct token.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:3:1\"}}","Spree::PermissionSets::DefaultCustomer at ./spec/models/spree/permission_sets/default_customer_spec.rb.#activate! order permissions with token prevents viewing order with incorrect token.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:3:3\"}}","Spree::PermissionSets::DefaultCustomer at ./spec/models/spree/permission_sets/default_customer_spec.rb.#activate! order permissions with user order allows updating own incomplete order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:2\"}}","Spree::PermissionSets::DefaultCustomer at ./spec/models/spree/permission_sets/default_customer_spec.rb.#activate! order permissions with user order allows viewing own order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:1\"}}","Spree::PermissionSets::DefaultCustomer at ./spec/models/spree/permission_sets/default_customer_spec.rb.#activate! order permissions with user order prevents updating own completed order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:3\"}}","Spree::PermissionSets::DefaultCustomer at ./spec/models/spree/permission_sets/default_customer_spec.rb.#activate! user account permissions allows creating new user.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:5\"}}","Spree::PermissionSets::DefaultCustomer at ./spec/models/spree/permission_sets/default_customer_spec.rb.#activate! user account permissions allows destroying own user.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:3\"}}","Spree::PermissionSets::DefaultCustomer at ./spec/models/spree/permission_sets/default_customer_spec.rb.#activate! user account permissions allows updating own user.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:2\"}}","Spree::PermissionSets::DefaultCustomer at ./spec/models/spree/permission_sets/default_customer_spec.rb.#activate! user account permissions allows viewing own user.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","Spree::PermissionSets::DefaultCustomer at ./spec/models/spree/permission_sets/default_customer_spec.rb.#activate! user account permissions prevents viewing other user.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:4\"}}","Spree::PermissionSets::DefaultCustomer at ./spec/models/spree/permission_sets/default_customer_spec.rb.#activate! wishlist permissions allows managing own wishlist.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7:1\"}}","Spree::PermissionSets::DefaultCustomer at ./spec/models/spree/permission_sets/default_customer_spec.rb.#activate! wishlist permissions allows viewing public wishlist.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7:2\"}}","Spree::PermissionSets::DefaultCustomer at ./spec/models/spree/permission_sets/default_customer_spec.rb.#activate! wishlist permissions prevents viewing private wishlist.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7:3\"}}","Spree::PermissionSets::DefaultCustomer at ./spec/models/spree/permission_sets/default_customer_spec.rb.#activate! with non-persisted user allows updating self.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:2\"}}","Spree::PermissionSets::DefaultCustomer at ./spec/models/spree/permission_sets/default_customer_spec.rb.#activate! with non-persisted user allows viewing self.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1\"}}","Spree::PermissionSets::OrderManagement at ./spec/models/spree/permission_sets/order_management_spec.rb.#activate! does not grant manage access to Product.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:10\"}}","Spree::PermissionSets::OrderManagement at ./spec/models/spree/permission_sets/order_management_spec.rb.#activate! grants manage access to Adjustment.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","Spree::PermissionSets::OrderManagement at ./spec/models/spree/permission_sets/order_management_spec.rb.#activate! grants manage access to CustomerReturn.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7\"}}","Spree::PermissionSets::OrderManagement at ./spec/models/spree/permission_sets/order_management_spec.rb.#activate! grants manage access to LineItem.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","Spree::PermissionSets::OrderManagement at ./spec/models/spree/permission_sets/order_management_spec.rb.#activate! grants manage access to Order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::PermissionSets::OrderManagement at ./spec/models/spree/permission_sets/order_management_spec.rb.#activate! grants manage access to Payment.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","Spree::PermissionSets::OrderManagement at ./spec/models/spree/permission_sets/order_management_spec.rb.#activate! grants manage access to Refund.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:9\"}}","Spree::PermissionSets::OrderManagement at ./spec/models/spree/permission_sets/order_management_spec.rb.#activate! grants manage access to Reimbursement.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8\"}}","Spree::PermissionSets::OrderManagement at ./spec/models/spree/permission_sets/order_management_spec.rb.#activate! grants manage access to ReturnAuthorization.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","Spree::PermissionSets::OrderManagement at ./spec/models/spree/permission_sets/order_management_spec.rb.#activate! grants manage access to Shipment.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","Spree::PermissionSets::OrderManagement at ./spec/models/spree/permission_sets/order_management_spec.rb.#activate! order restrictions allows canceling orders that allow cancellation.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:11:1\"}}","Spree::PermissionSets::OrderManagement at ./spec/models/spree/permission_sets/order_management_spec.rb.#activate! order restrictions allows destroying orders that can be deleted.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:11:3\"}}","Spree::PermissionSets::OrderManagement at ./spec/models/spree/permission_sets/order_management_spec.rb.#activate! order restrictions prevents canceling orders that do not allow cancellation.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:11:2\"}}","Spree::PermissionSets::OrderManagement at ./spec/models/spree/permission_sets/order_management_spec.rb.#activate! order restrictions prevents destroying orders that cannot be deleted.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:11:4\"}}","Spree::PermissionSets::ProductManagement at ./spec/models/spree/permission_sets/product_management_spec.rb.#activate! does not grant manage access to Order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:11\"}}","Spree::PermissionSets::ProductManagement at ./spec/models/spree/permission_sets/product_management_spec.rb.#activate! does not grant manage access to User.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:12\"}}","Spree::PermissionSets::ProductManagement at ./spec/models/spree/permission_sets/product_management_spec.rb.#activate! grants manage access to Classification.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:9\"}}","Spree::PermissionSets::ProductManagement at ./spec/models/spree/permission_sets/product_management_spec.rb.#activate! grants manage access to OptionType.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","Spree::PermissionSets::ProductManagement at ./spec/models/spree/permission_sets/product_management_spec.rb.#activate! grants manage access to OptionValue.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","Spree::PermissionSets::ProductManagement at ./spec/models/spree/permission_sets/product_management_spec.rb.#activate! grants manage access to Price.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:10\"}}","Spree::PermissionSets::ProductManagement at ./spec/models/spree/permission_sets/product_management_spec.rb.#activate! grants manage access to Product.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::PermissionSets::ProductManagement at ./spec/models/spree/permission_sets/product_management_spec.rb.#activate! grants manage access to ProductProperty.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","Spree::PermissionSets::ProductManagement at ./spec/models/spree/permission_sets/product_management_spec.rb.#activate! grants manage access to Property.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","Spree::PermissionSets::ProductManagement at ./spec/models/spree/permission_sets/product_management_spec.rb.#activate! grants manage access to Taxon.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7\"}}","Spree::PermissionSets::ProductManagement at ./spec/models/spree/permission_sets/product_management_spec.rb.#activate! grants manage access to Taxonomy.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8\"}}","Spree::PermissionSets::ProductManagement at ./spec/models/spree/permission_sets/product_management_spec.rb.#activate! grants manage access to Variant.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","Spree::PermissionSets::SuperUser at ./spec/models/spree/permission_sets/super_user_spec.rb.#activate! admin role protection allows destroying other roles.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6:4\"}}","Spree::PermissionSets::SuperUser at ./spec/models/spree/permission_sets/super_user_spec.rb.#activate! admin role protection allows updating other roles.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6:3\"}}","Spree::PermissionSets::SuperUser at ./spec/models/spree/permission_sets/super_user_spec.rb.#activate! admin role protection prevents destroying the admin role.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6:2\"}}","Spree::PermissionSets::SuperUser at ./spec/models/spree/permission_sets/super_user_spec.rb.#activate! admin role protection prevents updating the admin role.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6:1\"}}","Spree::PermissionSets::SuperUser at ./spec/models/spree/permission_sets/super_user_spec.rb.#activate! grants manage access to Order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","Spree::PermissionSets::SuperUser at ./spec/models/spree/permission_sets/super_user_spec.rb.#activate! grants manage access to Product.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","Spree::PermissionSets::SuperUser at ./spec/models/spree/permission_sets/super_user_spec.rb.#activate! grants manage access to all resources.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::PermissionSets::SuperUser at ./spec/models/spree/permission_sets/super_user_spec.rb.#activate! immutable types allows editing mutable refund reasons.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5:1\"}}","Spree::PermissionSets::SuperUser at ./spec/models/spree/permission_sets/super_user_spec.rb.#activate! immutable types prevents editing immutable refund reasons.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5:2\"}}","Spree::PermissionSets::SuperUser at ./spec/models/spree/permission_sets/super_user_spec.rb.#activate! order restrictions allows canceling orders that allow cancellation.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1\"}}","Spree::PermissionSets::SuperUser at ./spec/models/spree/permission_sets/super_user_spec.rb.#activate! order restrictions allows destroying orders that can be deleted.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:3\"}}","Spree::PermissionSets::SuperUser at ./spec/models/spree/permission_sets/super_user_spec.rb.#activate! order restrictions prevents canceling orders that do not allow cancellation.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:2\"}}","Spree::PermissionSets::SuperUser at ./spec/models/spree/permission_sets/super_user_spec.rb.#activate! order restrictions prevents destroying orders that cannot be deleted.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:4\"}}","Spree::Policy at ./spec/models/spree/policy_spec.rb.Scopes .for_store for policies with a different owner type returns policies for the store and the user policy.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:2:1\"}}","Spree::Policy at ./spec/models/spree/policy_spec.rb.Scopes .for_store returns policies for specific store.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1\"}}","Spree::Policy at ./spec/models/spree/policy_spec.rb.Scopes .with_matching_name does not find policy with partial match.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:2\"}}","Spree::Policy at ./spec/models/spree/policy_spec.rb.Scopes .with_matching_name finds policy by exact name match (case insensitive).{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1\"}}","Spree::Policy at ./spec/models/spree/policy_spec.rb.Scopes .with_matching_name returns empty when no match found.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:4\"}}","Spree::Policy at ./spec/models/spree/policy_spec.rb.Scopes .with_matching_name strips whitespace from search term.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:3\"}}","Spree::Policy at ./spec/models/spree/policy_spec.rb.Translations has translatable name field.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","Spree::Policy at ./spec/models/spree/policy_spec.rb.Translations supports translations for name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","Spree::Policy at ./spec/models/spree/policy_spec.rb.Translations when always_use_translations is enabled allows creating policies with translations.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3:1\"}}","Spree::Policy at ./spec/models/spree/policy_spec.rb.Validations owner presence is invalid without an owner.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","Spree::Policy at ./spec/models/spree/policy_spec.rb.Validations slug uniqueness allows same slug for different stores.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","Spree::Policy at ./spec/models/spree/policy_spec.rb.friendly_id generates friendly URLs from slug.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","Spree::Policy at ./spec/models/spree/policy_spec.rb.friendly_id maintains slug history.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","Spree::Policy at ./spec/models/spree/policy_spec.rb.friendly_id when the policy is destroyed fully destroys the slug.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:1\"}}","Spree::Post at ./spec/models/spree/post_spec.rb.#author_name returns the author name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","Spree::Post at ./spec/models/spree/post_spec.rb.#author_name when author is deleted returns the author name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","Spree::Post at ./spec/models/spree/post_spec.rb.Validations image validates content type.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","Spree::Post at ./spec/models/spree/post_spec.rb.Validations slug validates uniqueness.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","Spree::Post at ./spec/models/spree/post_spec.rb.behaves like lifecycle events lifecycle events post.created publishes created event when record is created.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","Spree::Post at ./spec/models/spree/post_spec.rb.behaves like lifecycle events lifecycle events post.deleted publishes deleted event when record is deleted.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:1\"}}","Spree::Post at ./spec/models/spree/post_spec.rb.behaves like lifecycle events lifecycle events post.updated publishes updated event when record is updated.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","Spree::PostCategory at ./spec/models/spree/post_category_spec.rb.Associations posts has many posts.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","Spree::PostCategory at ./spec/models/spree/post_category_spec.rb.Associations posts nullifies posts when destroyed.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:2\"}}","Spree::PostCategory at ./spec/models/spree/post_category_spec.rb.FriendlyId #should_generate_new_friendly_id? returns false when slug is present and title unchanged.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:3\"}}","Spree::PostCategory at ./spec/models/spree/post_category_spec.rb.FriendlyId #should_generate_new_friendly_id? returns true when slug is blank.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","Spree::PostCategory at ./spec/models/spree/post_category_spec.rb.FriendlyId #should_generate_new_friendly_id? returns true when title has changed.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:2\"}}","Spree::PostCategory at ./spec/models/spree/post_category_spec.rb.FriendlyId #slug_candidates returns correct slug candidates.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","Spree::PostCategory at ./spec/models/spree/post_category_spec.rb.behaves like lifecycle events lifecycle events post_category.created publishes created event when record is created.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","Spree::PostCategory at ./spec/models/spree/post_category_spec.rb.behaves like lifecycle events lifecycle events post_category.deleted publishes deleted event when record is deleted.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:1\"}}","Spree::PostCategory at ./spec/models/spree/post_category_spec.rb.behaves like lifecycle events lifecycle events post_category.updated publishes updated event when record is updated.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","Spree::Preference at ./spec/models/spree/preference_spec.rb.requires a key.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","Spree::Preference at ./spec/models/spree/preference_spec.rb.type conversion for values :any.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:8\"}}","Spree::Preference at ./spec/models/spree/preference_spec.rb.type conversion for values :boolean.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","Spree::Preference at ./spec/models/spree/preference_spec.rb.type conversion for values :decimal.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:4\"}}","Spree::Preference at ./spec/models/spree/preference_spec.rb.type conversion for values :integer.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3\"}}","Spree::Preference at ./spec/models/spree/preference_spec.rb.type conversion for values :password.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:7\"}}","Spree::Preference at ./spec/models/spree/preference_spec.rb.type conversion for values :string.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:5\"}}","Spree::Preference at ./spec/models/spree/preference_spec.rb.type conversion for values :text.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:6\"}}","Spree::Preference at ./spec/models/spree/preference_spec.rb.type conversion for values false :boolean.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","Spree::Preferences::Configuration at ./spec/models/spree/preferences/configuration_spec.rb.has named methods to access preferences.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","Spree::Preferences::Configuration at ./spec/models/spree/preferences/configuration_spec.rb.uses [ ] to access preferences.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2\"}}","Spree::Preferences::Configuration at ./spec/models/spree/preferences/configuration_spec.rb.uses set/get to access preferences.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3\"}}","Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb.persisted preferables clear preferences when record is deleted.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3\"}}","Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb.persisted preferables clear preferences.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb.persisted preferables pending preferences for new activerecord objects saves preferences after record is saved.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb.persisted preferables pending preferences for new activerecord objects saves preferences for serialized object.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:2\"}}","Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb.persisted preferables preference change tracking methods reports no changes when preference is set to same value.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4:3\"}}","Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb.persisted preferables preference change tracking methods tracks changes to array preferences.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4:4\"}}","Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb.persisted preferables preference change tracking methods tracks changes to preferences.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4:1\"}}","Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb.persisted preferables preference change tracking methods tracks previous changes after save.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4:2\"}}","Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb.preference access builds a array of deprecated preferences.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:6\"}}","Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb.preference access builds a hash of preference defaults.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:5\"}}","Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb.preference access builds a hash of preferences.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:4\"}}","Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb.preference access converts any preferences to any values with array.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:14:1\"}}","Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb.preference access converts any preferences to any values with hash.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:14:2\"}}","Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb.preference access converts array preferences to array values with arrays.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:12:1\"}}","Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb.preference access converts array preferences to array values with hash.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:12:3\"}}","Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb.preference access converts array preferences to array values with string.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:12:2\"}}","Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb.preference access converts boolean preferences to boolean values with an empty hash.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:11:4\"}}","Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb.preference access converts boolean preferences to boolean values with an empty string.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:11:3\"}}","Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb.preference access converts boolean preferences to boolean values with integers.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:11:2\"}}","Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb.preference access converts boolean preferences to boolean values with strings.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:11:1\"}}","Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb.preference access converts decimal preferences to BigDecimal values returns a BigDecimal.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:9:1\"}}","Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb.preference access converts decimal preferences to BigDecimal values with strings.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:9:2\"}}","Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb.preference access converts hash preferences to hash values with a nested array.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:13:6\"}}","Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb.preference access converts hash preferences to hash values with boolean.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:13:4\"}}","Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb.preference access converts hash preferences to hash values with hash and keys are integers.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:13:2\"}}","Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb.preference access converts hash preferences to hash values with hash.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:13:1\"}}","Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb.preference access converts hash preferences to hash values with simple array.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:13:5\"}}","Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb.preference access converts hash preferences to hash values with single array.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:13:7\"}}","Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb.preference access converts hash preferences to hash values with string.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:13:3\"}}","Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb.preference access converts integer preferences to integer values with strings.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:7:1\"}}","Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb.preference access converts nullable decimal preferences converts string to BigDecimal when present.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:10:3\"}}","Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb.preference access converts nullable decimal preferences preserves decimal values.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:10:4\"}}","Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb.preference access converts nullable decimal preferences stores nil when set to empty string.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:10:1\"}}","Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb.preference access converts nullable decimal preferences stores nil when set to nil.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:10:2\"}}","Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb.preference access converts nullable integer preferences converts string to integer when present.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:8:3\"}}","Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb.preference access converts nullable integer preferences preserves integer values.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:8:4\"}}","Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb.preference access converts nullable integer preferences stores nil when set to empty string.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:8:1\"}}","Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb.preference access converts nullable integer preferences stores nil when set to nil.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:8:2\"}}","Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb.preference access handles ghost methods for preferences.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb.preference access parent and child instances have their own prefs.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb.preference access raises when preference not defined.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3\"}}","Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb.preference definitions can be asked and raises.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb.preference definitions can be asked if it has a preference definition.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb.preference definitions can have a deprecation message.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8\"}}","Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb.preference definitions child should have parent and own definitions.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb.preference definitions has a default.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7\"}}","Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb.preference definitions has a type.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb.preference definitions instances have defaults.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb.preference definitions parent should not see child definitions.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb.preference definitions raises if not defined.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:9\"}}","Spree::Preferences::RuntimeConfiguration at ./spec/models/spree/preferences/runtime_configuration_spec.rb.#get returns default value if present.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::Preferences::RuntimeConfiguration at ./spec/models/spree/preferences/runtime_configuration_spec.rb.#get returns nil if not present.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","Spree::Preferences::RuntimeConfiguration at ./spec/models/spree/preferences/runtime_configuration_spec.rb.#get returns value via a hash accessor.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","Spree::Preferences::RuntimeConfiguration at ./spec/models/spree/preferences/runtime_configuration_spec.rb.#get returns value via an attribute accessor.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","Spree::Preferences::RuntimeConfiguration at ./spec/models/spree/preferences/runtime_configuration_spec.rb.#set overrides the default value.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","Spree::Preferences::RuntimeConfiguration at ./spec/models/spree/preferences/runtime_configuration_spec.rb.#set sets the value via an attribute accessor.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3\"}}","Spree::Preferences::RuntimeConfiguration at ./spec/models/spree/preferences/runtime_configuration_spec.rb.#set sets value if not set previously.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","Spree::Preferences::RuntimeConfiguration at ./spec/models/spree/preferences/runtime_configuration_spec.rb.#set sets value via a hash accessor.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:4\"}}","Spree::Preferences::ScopedStore at ./spec/models/spree/preferences/scoped_store_spec.rb.#store example at ./spec/models/spree/preferences/scoped_store_spec.rb:14.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::Preferences::ScopedStore at ./spec/models/spree/preferences/scoped_store_spec.rb.stubbed store with a prefix and suffix can assign.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:4:2\"}}","Spree::Preferences::ScopedStore at ./spec/models/spree/preferences/scoped_store_spec.rb.stubbed store with a prefix and suffix can delete.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:4:3\"}}","Spree::Preferences::ScopedStore at ./spec/models/spree/preferences/scoped_store_spec.rb.stubbed store with a prefix and suffix can fetch.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:4:1\"}}","Spree::Preferences::ScopedStore at ./spec/models/spree/preferences/scoped_store_spec.rb.stubbed store with a prefix can assign.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:2\"}}","Spree::Preferences::ScopedStore at ./spec/models/spree/preferences/scoped_store_spec.rb.stubbed store with a prefix can delete.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:3\"}}","Spree::Preferences::ScopedStore at ./spec/models/spree/preferences/scoped_store_spec.rb.stubbed store with a prefix can fetch.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","Spree::Preferences::Store at ./spec/models/spree/preferences/store_spec.rb.can set and get false values when cache return nil.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2\"}}","Spree::Preferences::Store at ./spec/models/spree/preferences/store_spec.rb.returns nil when key can't be found and fallback value is not supplied.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6\"}}","Spree::Preferences::Store at ./spec/models/spree/preferences/store_spec.rb.sets and gets a key.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","Spree::Price at ./spec/models/spree/price_spec.rb.#amount= is expected to equal to localized number.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","Spree::Price at ./spec/models/spree/price_spec.rb.#compare_at_amount= is expected to equal to localized number.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","Spree::Price at ./spec/models/spree/price_spec.rb.#compare_at_amount= with empty string being passed as value casts value to nil.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1\"}}","Spree::Price at ./spec/models/spree/price_spec.rb.#compare_at_price when amount is changed is expected to equal to price.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1:1\"}}","Spree::Price at ./spec/models/spree/price_spec.rb.#compare_at_price_including_vat_for(zone) when called from the default zone returns the correct price.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:2:1\"}}","Spree::Price at ./spec/models/spree/price_spec.rb.#compare_at_price_including_vat_for(zone) when called with a non-default zone returns the correct price including another VAT to two digits.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1:1\"}}","Spree::Price at ./spec/models/spree/price_spec.rb.#compare_at_price_including_vat_for(zone) when no default zone is set returns the correct price.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:3:1\"}}","Spree::Price at ./spec/models/spree/price_spec.rb.#discounted? when compare at amount is higher example at ./spec/models/spree/price_spec.rb:329.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:1:1\"}}","Spree::Price at ./spec/models/spree/price_spec.rb.#discounted? when compare at amount is lower example at ./spec/models/spree/price_spec.rb:334.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:2:1\"}}","Spree::Price at ./spec/models/spree/price_spec.rb.#discounted? when compare at amount is the same example at ./spec/models/spree/price_spec.rb:339.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:3:1\"}}","Spree::Price at ./spec/models/spree/price_spec.rb.#discounted? when there is no compare at amount example at ./spec/models/spree/price_spec.rb:344.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:4:1\"}}","Spree::Price at ./spec/models/spree/price_spec.rb.#display_compare_at_price_including_vat_for(zone) calls #price_including_vat_for.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1\"}}","Spree::Price at ./spec/models/spree/price_spec.rb.#display_price_including_vat_for(zone) calls #price_including_vat_for.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1\"}}","Spree::Price at ./spec/models/spree/price_spec.rb.#price when amount is changed is expected to equal to price.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:1\"}}","Spree::Price at ./spec/models/spree/price_spec.rb.#price_including_vat_for(zone) when called from the default zone returns the correct price.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2:1\"}}","Spree::Price at ./spec/models/spree/price_spec.rb.#price_including_vat_for(zone) when called with a non-default zone returns the correct price including another VAT to two digits.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1:1\"}}","Spree::Price at ./spec/models/spree/price_spec.rb.#price_including_vat_for(zone) when no default zone is set returns the correct price.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:3:1\"}}","Spree::Price at ./spec/models/spree/price_spec.rb.Callbacks after_commit :auto_match_taxons when price is discounted on create auto matches taxons.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1:1:1\"}}","Spree::Price at ./spec/models/spree/price_spec.rb.Callbacks after_commit :auto_match_taxons when price is discounted on update and changed to not be discounted auto matches taxons.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1:2:1:1\"}}","Spree::Price at ./spec/models/spree/price_spec.rb.Callbacks after_commit :auto_match_taxons when price is discounted on update and is still discounted does not touch shop product.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1:2:2:1\"}}","Spree::Price at ./spec/models/spree/price_spec.rb.Callbacks after_commit :auto_match_taxons when price is not discounted on create auto matches taxons.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:2:1:1\"}}","Spree::Price at ./spec/models/spree/price_spec.rb.Callbacks after_commit :auto_match_taxons when price is not discounted on update and changed to be discounted auto matches taxons.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:2:2:1:1\"}}","Spree::Price at ./spec/models/spree/price_spec.rb.Callbacks after_commit :auto_match_taxons when price is not discounted on update and is still not discounted does not touch shop product.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:2:2:2:1\"}}","Spree::Price at ./spec/models/spree/price_spec.rb.Callbacks when compare_at_amount is equal to amount sets compare_at_amount to nil.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","Spree::Price at ./spec/models/spree/price_spec.rb.behaves like lifecycle events lifecycle events price.created publishes created event when record is created.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","Spree::Price at ./spec/models/spree/price_spec.rb.behaves like lifecycle events lifecycle events price.deleted publishes deleted event when record is deleted.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:1\"}}","Spree::Price at ./spec/models/spree/price_spec.rb.behaves like lifecycle events lifecycle events price.updated publishes updated event when record is updated.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","Spree::Price at ./spec/models/spree/price_spec.rb.validations when the amount is between 0 and the maximum amount example at ./spec/models/spree/price_spec.rb:199.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:4:1\"}}","Spree::Price at ./spec/models/spree/price_spec.rb.validations when the amount is greater than maximum amount has 1 error on amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:3:1\"}}","Spree::Price at ./spec/models/spree/price_spec.rb.validations when the amount is greater than maximum amount populates errors.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:3:2\"}}","Spree::Price at ./spec/models/spree/price_spec.rb.validations when the amount is less than 0 has 1 error on amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2:1\"}}","Spree::Price at ./spec/models/spree/price_spec.rb.validations when the amount is less than 0 populates errors.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2:2\"}}","Spree::Price at ./spec/models/spree/price_spec.rb.validations when the amount is nil legacy behavior example at ./spec/models/spree/price_spec.rb:164.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1:1:1\"}}","Spree::Price at ./spec/models/spree/price_spec.rb.validations when the amount is nil new behavior example at ./spec/models/spree/price_spec.rb:168.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1:2:1\"}}","Spree::PriceList at ./spec/models/spree/price_list_spec.rb.#active? returns false when status is not active.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2\"}}","Spree::PriceList at ./spec/models/spree/price_list_spec.rb.#active? returns true when status is active.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","Spree::PriceList at ./spec/models/spree/price_list_spec.rb.#add_products creates prices for all supported currencies.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2\"}}","Spree::PriceList at ./spec/models/spree/price_list_spec.rb.#add_products creates prices for all variants of the given products.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","Spree::PriceList at ./spec/models/spree/price_list_spec.rb.#add_products creates prices with nil amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:3\"}}","Spree::PriceList at ./spec/models/spree/price_list_spec.rb.#add_products does not create duplicate prices for existing variants.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:4\"}}","Spree::PriceList at ./spec/models/spree/price_list_spec.rb.#add_products enqueues a job to touch affected variants.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:5\"}}","Spree::PriceList at ./spec/models/spree/price_list_spec.rb.#add_products handles empty product_ids.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:7\"}}","Spree::PriceList at ./spec/models/spree/price_list_spec.rb.#add_products handles nil product_ids.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:8\"}}","Spree::PriceList at ./spec/models/spree/price_list_spec.rb.#add_products touches the price list to bust cache.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:6\"}}","Spree::PriceList at ./spec/models/spree/price_list_spec.rb.#add_products when price already has amount set does not overwrite existing price with amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:11:1\"}}","Spree::PriceList at ./spec/models/spree/price_list_spec.rb.#add_products when price already has amount set only creates prices for missing currencies.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:11:2\"}}","Spree::PriceList at ./spec/models/spree/price_list_spec.rb.#add_products with deleted variants only creates prices for non-deleted variants.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:12:1\"}}","Spree::PriceList at ./spec/models/spree/price_list_spec.rb.#add_products with non-existent product IDs creates prices only for existing products.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:10:2\"}}","Spree::PriceList at ./spec/models/spree/price_list_spec.rb.#add_products with non-existent product IDs handles gracefully without error.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:10:1\"}}","Spree::PriceList at ./spec/models/spree/price_list_spec.rb.#add_products with products having multiple variants creates prices for all eligible variants.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:9:1\"}}","Spree::PriceList at ./spec/models/spree/price_list_spec.rb.#applicable? when price list is inactive returns false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1\"}}","Spree::PriceList at ./spec/models/spree/price_list_spec.rb.#applicable? when price list is outside date range returns false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1\"}}","Spree::PriceList at ./spec/models/spree/price_list_spec.rb.#applicable? with rules and match_policy = all returns false if any rule fails.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3:1\"}}","Spree::PriceList at ./spec/models/spree/price_list_spec.rb.#applicable? with rules and match_policy = any returns true if any rule passes.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:4:1\"}}","Spree::PriceList at ./spec/models/spree/price_list_spec.rb.#bulk_update_prices clears amount when user removes existing value.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:3\"}}","Spree::PriceList at ./spec/models/spree/price_list_spec.rb.#bulk_update_prices clears compare_at_amount when it equals amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2\"}}","Spree::PriceList at ./spec/models/spree/price_list_spec.rb.#bulk_update_prices enqueues a job to touch affected variants.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:6\"}}","Spree::PriceList at ./spec/models/spree/price_list_spec.rb.#bulk_update_prices returns true for empty attributes.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:7\"}}","Spree::PriceList at ./spec/models/spree/price_list_spec.rb.#bulk_update_prices skips entries without id.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:8\"}}","Spree::PriceList at ./spec/models/spree/price_list_spec.rb.#bulk_update_prices skips prices where nothing changed.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:4\"}}","Spree::PriceList at ./spec/models/spree/price_list_spec.rb.#bulk_update_prices updates prices in bulk using upsert_all.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1\"}}","Spree::PriceList at ./spec/models/spree/price_list_spec.rb.#bulk_update_prices updates when only compare_at_amount changed.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:5\"}}","Spree::PriceList at ./spec/models/spree/price_list_spec.rb.#remove_products does not remove prices for other products.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:3\"}}","Spree::PriceList at ./spec/models/spree/price_list_spec.rb.#remove_products enqueues a job to touch affected variants.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:7\"}}","Spree::PriceList at ./spec/models/spree/price_list_spec.rb.#remove_products handles empty product_ids.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:4\"}}","Spree::PriceList at ./spec/models/spree/price_list_spec.rb.#remove_products handles nil product_ids.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:5\"}}","Spree::PriceList at ./spec/models/spree/price_list_spec.rb.#remove_products removes all prices for the given products.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","Spree::PriceList at ./spec/models/spree/price_list_spec.rb.#remove_products removes prices for all currencies.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2\"}}","Spree::PriceList at ./spec/models/spree/price_list_spec.rb.#remove_products removes prices for multiple products at once.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:6\"}}","Spree::PriceList at ./spec/models/spree/price_list_spec.rb.#remove_products touches the price list to bust cache.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:8\"}}","Spree::PriceList at ./spec/models/spree/price_list_spec.rb.#remove_products when re-adding a previously removed product allows re-adding a product that had prices with amounts set.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:9:2\"}}","Spree::PriceList at ./spec/models/spree/price_list_spec.rb.#remove_products when re-adding a previously removed product allows re-adding a product with empty prices.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:9:1\"}}","Spree::PriceList at ./spec/models/spree/price_list_spec.rb.Validations date range validation validates starts_at is before ends_at.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","Spree::PriceList at ./spec/models/spree/price_list_spec.rb.scopes .by_position returns price lists ordered by position ascending.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4:1\"}}","Spree::PriceList at ./spec/models/spree/price_list_spec.rb.scopes .current accepts a timezone parameter.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:6:2\"}}","Spree::PriceList at ./spec/models/spree/price_list_spec.rb.scopes .current returns only price lists within date range.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:6:1\"}}","Spree::PriceList at ./spec/models/spree/price_list_spec.rb.scopes .for_store returns only price lists for the specified store.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:5:1\"}}","Spree::PriceList at ./spec/models/spree/price_list_spec.rb.scopes .with_status(:active) returns only active price lists.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","Spree::PriceList at ./spec/models/spree/price_list_spec.rb.scopes .with_status(:inactive) returns only inactive price lists.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","Spree::PriceList at ./spec/models/spree/price_list_spec.rb.scopes .with_status(:scheduled) returns only scheduled price lists.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3:1\"}}","Spree::PriceList at ./spec/models/spree/price_list_spec.rb.state_machine #activate transitions to active.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","Spree::PriceList at ./spec/models/spree/price_list_spec.rb.state_machine #deactivate transitions to inactive.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:1\"}}","Spree::PriceList at ./spec/models/spree/price_list_spec.rb.state_machine #schedule transitions to scheduled.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:4:1\"}}","Spree::PriceList at ./spec/models/spree/price_list_spec.rb.state_machine has initial status of draft.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","Spree::PriceRules::CustomerGroupRule at ./spec/models/spree/price_rules/customer_group_rule_spec.rb.#applicable? when customer_group_ids preference contains strings returns true when context user is in the customer group.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","Spree::PriceRules::CustomerGroupRule at ./spec/models/spree/price_rules/customer_group_rule_spec.rb.#applicable? when customer_group_ids preference is empty returns false when user is not present.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2\"}}","Spree::PriceRules::CustomerGroupRule at ./spec/models/spree/price_rules/customer_group_rule_spec.rb.#applicable? when customer_group_ids preference is empty returns true when user is present.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","Spree::PriceRules::CustomerGroupRule at ./spec/models/spree/price_rules/customer_group_rule_spec.rb.#applicable? when customer_group_ids preference is set returns false when context has no user.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:3\"}}","Spree::PriceRules::CustomerGroupRule at ./spec/models/spree/price_rules/customer_group_rule_spec.rb.#applicable? when customer_group_ids preference is set returns false when context user is not in the customer group.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2\"}}","Spree::PriceRules::CustomerGroupRule at ./spec/models/spree/price_rules/customer_group_rule_spec.rb.#applicable? when customer_group_ids preference is set returns true when context user is in the customer group.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","Spree::PriceRules::CustomerGroupRule at ./spec/models/spree/price_rules/customer_group_rule_spec.rb.#applicable? with multiple customer groups configured returns false when context user is not in any of the customer groups.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:2\"}}","Spree::PriceRules::CustomerGroupRule at ./spec/models/spree/price_rules/customer_group_rule_spec.rb.#applicable? with multiple customer groups configured returns true when context user is in any of the customer groups.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1\"}}","Spree::PriceRules::CustomerGroupRule at ./spec/models/spree/price_rules/customer_group_rule_spec.rb..description returns the translated description.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","Spree::PriceRules::UserRule at ./spec/models/spree/price_rules/user_rule_spec.rb.#applicable? when user_ids preference contains strings returns false when context user does not match.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:2\"}}","Spree::PriceRules::UserRule at ./spec/models/spree/price_rules/user_rule_spec.rb.#applicable? when user_ids preference contains strings returns true when context user matches.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","Spree::PriceRules::UserRule at ./spec/models/spree/price_rules/user_rule_spec.rb.#applicable? when user_ids preference is empty returns true when user is present.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","Spree::PriceRules::UserRule at ./spec/models/spree/price_rules/user_rule_spec.rb.#applicable? when user_ids preference is set returns false when context has no user.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:3\"}}","Spree::PriceRules::UserRule at ./spec/models/spree/price_rules/user_rule_spec.rb.#applicable? when user_ids preference is set returns false when context user does not match.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2\"}}","Spree::PriceRules::UserRule at ./spec/models/spree/price_rules/user_rule_spec.rb.#applicable? when user_ids preference is set returns true when context user matches.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","Spree::PriceRules::VolumeRule at ./spec/models/spree/price_rules/volume_rule_spec.rb.#applicable? returns false when quantity is below minimum.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","Spree::PriceRules::VolumeRule at ./spec/models/spree/price_rules/volume_rule_spec.rb.#applicable? returns false when quantity is nil.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:4\"}}","Spree::PriceRules::VolumeRule at ./spec/models/spree/price_rules/volume_rule_spec.rb.#applicable? returns true when quantity meets minimum.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","Spree::PriceRules::VolumeRule at ./spec/models/spree/price_rules/volume_rule_spec.rb.#applicable? with max_quantity set returns false when quantity exceeds maximum.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:2\"}}","Spree::PriceRules::VolumeRule at ./spec/models/spree/price_rules/volume_rule_spec.rb.#applicable? with max_quantity set returns true when quantity is within range.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:1\"}}","Spree::PriceRules::VolumeRule at ./spec/models/spree/price_rules/volume_rule_spec.rb.max_quantity preference preserves nil max_quantity.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","Spree::PriceRules::VolumeRule at ./spec/models/spree/price_rules/volume_rule_spec.rb.max_quantity preference preserves non-zero max_quantity.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","Spree::PriceRules::VolumeRule at ./spec/models/spree/price_rules/volume_rule_spec.rb.max_quantity preference stores nil when set to empty string.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::PriceRules::ZoneRule at ./spec/models/spree/price_rules/zone_rule_spec.rb.#applicable? when zone_ids preference contains strings returns false when context zone does not match.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:2\"}}","Spree::PriceRules::ZoneRule at ./spec/models/spree/price_rules/zone_rule_spec.rb.#applicable? when zone_ids preference contains strings returns true when context zone matches.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","Spree::PriceRules::ZoneRule at ./spec/models/spree/price_rules/zone_rule_spec.rb.#applicable? when zone_ids preference is empty returns true for any zone.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","Spree::PriceRules::ZoneRule at ./spec/models/spree/price_rules/zone_rule_spec.rb.#applicable? when zone_ids preference is set returns false when context has no zone.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:3\"}}","Spree::PriceRules::ZoneRule at ./spec/models/spree/price_rules/zone_rule_spec.rb.#applicable? when zone_ids preference is set returns false when context zone does not match.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2\"}}","Spree::PriceRules::ZoneRule at ./spec/models/spree/price_rules/zone_rule_spec.rb.#applicable? when zone_ids preference is set returns true when context zone matches.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","Spree::Pricing::Context at ./spec/lib/spree/core/pricing/context_spec.rb.#cache_key with all attributes generates a cache key with all components.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1\"}}","Spree::Pricing::Context at ./spec/lib/spree/core/pricing/context_spec.rb.#cache_key with minimal attributes generates a cache key with default values from Spree::Current.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1\"}}","Spree::Pricing::Context at ./spec/lib/spree/core/pricing/context_spec.rb.#cache_key with some optional attributes includes present optional attributes in correct order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3:1\"}}","Spree::Pricing::Context at ./spec/lib/spree/core/pricing/context_spec.rb.#initialize when Spree::Current.store is set uses Spree::Current.store as default.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","Spree::Pricing::Context at ./spec/lib/spree/core/pricing/context_spec.rb.#initialize when Spree::Current.zone is set uses Spree::Current.zone as default.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1\"}}","Spree::Pricing::Context at ./spec/lib/spree/core/pricing/context_spec.rb.#initialize with all parameters sets all attributes.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","Spree::Pricing::Context at ./spec/lib/spree/core/pricing/context_spec.rb.#initialize with minimal parameters defaults date to current time.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:6\"}}","Spree::Pricing::Context at ./spec/lib/spree/core/pricing/context_spec.rb.#initialize with minimal parameters defaults quantity to nil.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:5\"}}","Spree::Pricing::Context at ./spec/lib/spree/core/pricing/context_spec.rb.#initialize with minimal parameters defaults store to Spree::Current.store.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2\"}}","Spree::Pricing::Context at ./spec/lib/spree/core/pricing/context_spec.rb.#initialize with minimal parameters defaults user to nil.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:4\"}}","Spree::Pricing::Context at ./spec/lib/spree/core/pricing/context_spec.rb.#initialize with minimal parameters defaults zone to Spree::Current.zone.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:3\"}}","Spree::Pricing::Context at ./spec/lib/spree/core/pricing/context_spec.rb.#initialize with minimal parameters sets required attributes.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","Spree::Pricing::Context at ./spec/lib/spree/core/pricing/context_spec.rb..from_currency creates a context with variant and currency.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","Spree::Pricing::Context at ./spec/lib/spree/core/pricing/context_spec.rb..from_currency uses default store.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","Spree::Pricing::Context at ./spec/lib/spree/core/pricing/context_spec.rb..from_order sets currency from order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","Spree::Pricing::Context at ./spec/lib/spree/core/pricing/context_spec.rb..from_order sets order reference.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:5\"}}","Spree::Pricing::Context at ./spec/lib/spree/core/pricing/context_spec.rb..from_order sets quantity from line item.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:6\"}}","Spree::Pricing::Context at ./spec/lib/spree/core/pricing/context_spec.rb..from_order sets store from order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3\"}}","Spree::Pricing::Context at ./spec/lib/spree/core/pricing/context_spec.rb..from_order sets user from order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4\"}}","Spree::Pricing::Context at ./spec/lib/spree/core/pricing/context_spec.rb..from_order sets variant from parameter.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","Spree::Pricing::Context at ./spec/lib/spree/core/pricing/context_spec.rb..from_order when variant is not in order sets quantity to nil.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:10:1\"}}","Spree::Pricing::Context at ./spec/lib/spree/core/pricing/context_spec.rb..from_order with explicit quantity parameter uses the provided quantity.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:9:1\"}}","Spree::Pricing::Context at ./spec/lib/spree/core/pricing/context_spec.rb..from_order with zone from order tax_zone sets zone from order tax_zone.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:7:1\"}}","Spree::Pricing::Context at ./spec/lib/spree/core/pricing/context_spec.rb..from_order with zone from store checkout_zone sets zone from store checkout_zone.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:8:1\"}}","Spree::Pricing::Resolver at ./spec/lib/spree/pricing/resolver_spec.rb.#resolve when no base price exists returns a new unpersisted price object.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7:1\"}}","Spree::Pricing::Resolver at ./spec/lib/spree/pricing/resolver_spec.rb.#resolve when no matching price list exists falls back to base price.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","Spree::Pricing::Resolver at ./spec/lib/spree/pricing/resolver_spec.rb.#resolve when no price lists exist returns the base price.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","Spree::Pricing::Resolver at ./spec/lib/spree/pricing/resolver_spec.rb.#resolve with applicable price list returns the price list price.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","Spree::Pricing::Resolver at ./spec/lib/spree/pricing/resolver_spec.rb.#resolve with date range price list returns base price when outside date range.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5:2\"}}","Spree::Pricing::Resolver at ./spec/lib/spree/pricing/resolver_spec.rb.#resolve with date range price list returns price list price when within date range.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5:1\"}}","Spree::Pricing::Resolver at ./spec/lib/spree/pricing/resolver_spec.rb.#resolve with multiple applicable price lists returns the first position price list price.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1\"}}","Spree::Pricing::Resolver at ./spec/lib/spree/pricing/resolver_spec.rb.#resolve with price list from different store does not return price from other store price list.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8:1\"}}","Spree::Pricing::Resolver at ./spec/lib/spree/pricing/resolver_spec.rb.#resolve with volume-based pricing returns base price when quantity threshold not met.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6:2\"}}","Spree::Pricing::Resolver at ./spec/lib/spree/pricing/resolver_spec.rb.#resolve with volume-based pricing returns bulk price when quantity threshold met.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6:1\"}}","Spree::Product at ./spec/models/spree/product/normalizes_spec.rb.normalizes :name converts empty string to nil.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","Spree::Product at ./spec/models/spree/product/normalizes_spec.rb.normalizes :name handles nil value.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","Spree::Product at ./spec/models/spree/product/normalizes_spec.rb.normalizes :name squishes multiple spaces.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","Spree::Product at ./spec/models/spree/product/normalizes_spec.rb.normalizes :name strips leading and trailing whitespace.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::Product at ./spec/models/spree/product/normalizes_spec.rb.normalizes :name with always_use_translations enabled creates a product with translated name without NotNullViolation.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5:1\"}}","Spree::Product at ./spec/models/spree/product/normalizes_spec.rb.normalizes :name with always_use_translations enabled normalizes translated names across locales.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5:2\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.#any_variant_available? with variants when all variants are available example at ./spec/models/spree/product_spec.rb:1498.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:38:2:1:1\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.#any_variant_available? with variants when no variants are available example at ./spec/models/spree/product_spec.rb:1504.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:38:2:2:1\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.#any_variant_available? without variants when master variant is available example at ./spec/models/spree/product_spec.rb:1474.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:38:1:1:1\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.#any_variant_available? without variants when master variant is not available example at ./spec/models/spree/product_spec.rb:1480.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:38:1:2:1\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.#any_variant_in_stock_or_backorderable? #digital? when product does not have a shipping method with DigitalDelivery calculator example at ./spec/models/spree/product_spec.rb:1261.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:32:3:2:1\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.#any_variant_in_stock_or_backorderable? #digital? when product has a shipping method with DigitalDelivery calculator example at ./spec/models/spree/product_spec.rb:1255.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:32:3:1:1\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.#any_variant_in_stock_or_backorderable? when only master variant is in stock or backorderable example at ./spec/models/spree/product_spec.rb:1204.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:32:1:1\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.#any_variant_in_stock_or_backorderable? with more variants aside from the master variant when all non-master variant stock items have count_on_hand <= 0 example at ./spec/models/spree/product_spec.rb:1228.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:32:2:2:1\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.#any_variant_in_stock_or_backorderable? with more variants aside from the master variant when all non-master variant stock items have count_on_hand <= 0 when all non-master variant stock items have track_inventory = false example at ./spec/models/spree/product_spec.rb:1233.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:32:2:2:2:1\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.#any_variant_in_stock_or_backorderable? with more variants aside from the master variant when all non-master variant stock items have count_on_hand <= 0 when all non-master variant stock items have track_inventory = true example at ./spec/models/spree/product_spec.rb:1237.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:32:2:2:3:1\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.#any_variant_in_stock_or_backorderable? with more variants aside from the master variant when all non-master variant stock items have count_on_hand <= 0 when all non-master variant stock items have track_inventory = true when all non-master variant stock items have backorderable = true example at ./spec/models/spree/product_spec.rb:1242.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:32:2:2:3:2:1\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.#any_variant_in_stock_or_backorderable? with more variants aside from the master variant with at least one non-master variant stock items count_on_hand > 0 example at ./spec/models/spree/product_spec.rb:1222.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:32:2:1:1\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.#backordered? returns false when out of stock and not backorderable.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:2\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.#backordered? returns false when there is available item in stock.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:3\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.#backordered? returns true when out of stock and backorderable.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:1\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.#brand when brand association is defined uses the brand association.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:2:1\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.#brand when brand association is not defined falls back to brand_taxon.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:1:1\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.#brand when brand association is not defined returns brand name via brand_name method.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:1:2\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.#brand_taxon fetches Brand Taxon.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:1\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.#category when category association is defined checks for the category association.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:2:1\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.#category when category association is not defined falls back to category_taxon.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:1:1\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.#category_taxon fetches Category Taxon.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:17:1\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.#create when prototype is supplied creates properties based on the prototype.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1:1\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.#create when prototype with option types is supplied creates option types based on the prototype.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2:1\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.#create when prototype with option types is supplied creates product option types based on the prototype.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2:2\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.#create when prototype with option types is supplied creates variants from an option values hash with multiple option types.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2:5\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.#create when prototype with option types is supplied creates variants from an option values hash with one option type.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2:3\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.#create when prototype with option types is supplied stills create variants when option_values_hash is given but prototype id is nil.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2:4\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.#create when track inventory is disabled creates a default stock item.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:3:1\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.#default_image when master has images returns the master image.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:23:1:1\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.#default_image when master has images with variants that also have images returns the master image (master takes priority).{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:23:1:2:1\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.#default_image when master has no images but variant does returns the variant image.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:23:2:1\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.#default_image when no variants have images returns nil.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:23:3:1\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.#default_variant track inventory levels product has variants backorderable returns first non-master backorderable variant.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:21:1:1:2:1\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.#default_variant track inventory levels product has variants in stock returns first non-master in stock variant.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:21:1:1:1:1\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.#default_variant track inventory levels product has variants product without variants in stock or backorerable returns first non-master variant.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:21:1:1:3:1\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.#default_variant track inventory levels product without variants returns master variant.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:21:1:3:1\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.#default_variant track inventory levels without tracking inventory levels returns first non-master variant.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:21:1:2:1\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.#default_variant_id product has variants returns first non-master variant ID.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:22:1:1\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.#default_variant_id product without variants returns master variant ID.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:22:2:1\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.#discontinue! changes updated_at.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:3\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.#discontinue! sets the discontinued.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:1\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.#discontinue! sets the status to archived.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:2\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.#discontinued? is false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:1\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.#discontinued? is true.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:2\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.#ensure_not_in_complete_orders adds error on product destroy.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:20:1\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.#ensure_store_presence no store passed auto-assigns store.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:30:1:1\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.#ensure_store_presence store passed does not auto-assign store.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:30:2:1\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.#ensure_store_presence validation disabled preference set example at ./spec/models/spree/product_spec.rb:1177.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:30:3:1:1\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.#first_available_variant returns the first available variant.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:36:1\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.#first_or_default_variant with a variant in the given currency returns the available variant in the given currency.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:35:2:1\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.#first_or_default_variant with all variants in different currencies returns the first variant.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:35:3:1\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.#first_or_default_variant without variants returns the default variant.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:35:1:1\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.#has_images? when any variant has images returns true.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:25:3:1\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.#has_images? when master has images but default_variant does not returns true (checks all variants).{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:25:2:1\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.#has_images? when no variants have images returns false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:25:1:1\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.#has_variant_images? when a variant has images returns true.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:24:3:1\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.#has_variant_images? when master has images returns true.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:24:2:1\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.#has_variant_images? when no variants have images returns false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:24:1:1\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.#has_variant_images? when variant_images are preloaded but empty returns false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:24:5:1\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.#has_variant_images? when variant_images are preloaded uses loaded association.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:24:4:1\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.#has_variants? when variants are loaded in memory uses the loaded association instead of variant_count.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:43:3:1\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.#has_variants? with variants has variant_count of 1.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:43:2:2\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.#has_variants? with variants returns true.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:43:2:1\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.#has_variants? without variants has variant_count of 0.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:43:1:2\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.#has_variants? without variants returns false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:43:1:1\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.#image_count when master has images returns the master image count.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:26:2:1\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.#image_count when master has images when variant also has images returns master image count (master takes priority).{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:26:2:2:1\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.#image_count when no variants have images returns 0.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:26:1:1\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.#image_count when only variant has images returns the variant image count.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:26:3:1\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.#images is sorted by position.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.#images only looks for variant images.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.#lowest_price returns the lowest price.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:39:1\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.#on_sale? when at least one variant is on sale returns true.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:34:1:1\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.#on_sale? when no variant is on sale returns false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:34:2:1\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.#price_varies? when all variants have the same price in the given currency example at ./spec/models/spree/product_spec.rb:1447.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:37:1:1\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.#price_varies? when variants have different prices in the given currency example at ./spec/models/spree/product_spec.rb:1456.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:37:2:1\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.#secondary_image when images are on a non-master variant returns the second image from that variant.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:28:4:1\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.#secondary_image when no variants have images returns nil.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:28:1:1\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.#secondary_image when variant has multiple images returns the second image.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:28:3:1\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.#secondary_image when variant has only one image returns nil.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:28:2:1\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.#taxons_for_store returns product taxons for specified store.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:31:1\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.#to_csv when product has no variants returns an array with one line of CSV data.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:33:1:1\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.#to_csv when product has variants returns an array with CSV data for each variant including the master variant.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:33:2:1\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.#to_csv when store is not provided falls back to first store if no default.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:33:3:2\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.#to_csv when store is not provided uses default store.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:33:3:1\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.#total_on_hand is infinite if track_inventory_levels is false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.#total_on_hand is infinite if variant is on demand.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:2\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.#total_on_hand returns sum of stock items count_on_hand when variants_including_master is not loaded.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:4\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.#total_on_hand returns sum of stock items count_on_hand.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:3\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.#validate_master when duplicate SKUs entered example at ./spec/models/spree/product_spec.rb:653.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.#variant_for_images when master has images returns master.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:27:2:1\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.#variant_for_images when no variants have images returns nil.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:27:1:1\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.#variant_for_images when only a non-default variant has images returns the variant with images.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:27:4:1\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.#variant_for_images when only default_variant has images returns default_variant.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:27:3:1\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.after_initialize :assign_default_tax_category when product is new assigns default tax category.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.after_initialize :assign_default_tax_category when product is persisted does not assign default tax category.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.after_touch :touch_taxons with taxons enqueues a job for touching the taxons.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:41:2:1\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.after_touch :touch_taxons without taxons skips enqueuing a job for touching the taxons.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:41:1:1\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.before_validation :ensure_default_shipping_category assigns the default shipping category.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.before_validation :ensure_default_shipping_category when product has a shipping category keeps the assigned shipping category.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.before_validation :ensure_default_shipping_category when product is persisted does not assign the default shipping category.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3:1\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.behaves like lifecycle events lifecycle events product.created publishes created event when record is created.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1:1\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.behaves like lifecycle events lifecycle events product.deleted publishes deleted event when record is deleted.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:3:1\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.behaves like lifecycle events lifecycle events product.updated publishes updated event when record is updated.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:2:1\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.behaves like metadata can query records by metadata properties.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:10\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:10.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:11.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:4.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:5.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:7.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:8.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.behaves like metadata reads data as not symbolized keys.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.behaves like metadata reads data as symbolized keys.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.classifications and taxons is joined through classifications.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.classifications and taxons will delete all classifications.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:2\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.custom events product.activated publishes product.activated event when activated.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:42:1:1\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.custom events product.archived publishes product.archived event when archived.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:42:2:1\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.image methods with eager loading returns correct images with storefront includes.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:1\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.image methods with eager loading when image is on non-default variant returns image from non-default variant.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:2:1\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.initializes a master variant when building a product.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.product instance #available? is available if status is set to active.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:10:1\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.product instance #available? is not available if destroyed.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:10:2\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.product instance #available? is not available when available_on is in the future.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:10:3\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.product instance #can_supply? is false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:11:2\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.product instance #can_supply? is true.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:11:1\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.product instance #discontinue_on_must_be_later_than_make_active_at make_active_at and discontinue_on are nil is valid.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:15:3:1\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.product instance #discontinue_on_must_be_later_than_make_active_at make_active_at is a date earlier than discontinue_on is not valid example at ./spec/models/spree/product_spec.rb:321.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:15:2:1:1\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.product instance #discontinue_on_must_be_later_than_make_active_at make_active_at is a date earlier than discontinue_on is not valid example at ./spec/models/spree/product_spec.rb:322.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:15:2:1:2\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.product instance #discontinue_on_must_be_later_than_make_active_at make_active_at is a date earlier than discontinue_on is valid.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:15:1:1\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.product instance #display_price shows the amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:9:1\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.product instance #display_price with currency set to JPY displays the currency in yen.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:9:2:1\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.product instance #duplicate calls #duplicate_extra.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:4:3\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.product instance #duplicate duplicates product.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:4:1\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.product instance #duplicate when translations exist for another locale duplicates translations for all locales.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:4:2:1\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.product instance #price strips non-price characters.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:8:1\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.product instance backorderable? with variants returns false if no variant is backorderable even if master is.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1:1\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.product instance backorderable? with variants returns true if variant is backorderable.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1:2\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.product instance backorderable? without variants returns false if master is not backorderable.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:2:1\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.product instance backorderable? without variants returns true if master is backorderable.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:2:2\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.product instance hard deletion doesnt raise ActiveRecordError error.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:16:1\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.product instance has stock items can retrieve stock items.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:14:1\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.product instance has stock movements doesnt raise ReadOnlyRecord error.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:13:1\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.product instance history keeps translations when product is destroyed.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:17:1\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.product instance in_stock? with variants returns false if no variant is in stock even if master is.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3:1:1\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.product instance in_stock? with variants returns true if variant is in stock.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3:1:2\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.product instance in_stock? without variants returns false if master is not in stock.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3:2:1\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.product instance in_stock? without variants returns true if master is in stock.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3:2:2\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.product instance master variant when master default price changed saves the default price.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:5:2:2\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.product instance master variant when master default price changed saves the master.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:5:2:1\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.product instance master variant when master variant and price haven't changed does not save the master.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:5:3:1\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.product instance master variant when master variant changed saves the master.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:5:1:1\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.product instance memoized data resets memoized data after save.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:18:2\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.product instance memoized data resets memoized data reload.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:18:3\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.product instance memoized data without action keeps data.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:18:1\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.product instance product has no variants #destroy sets deleted_at value.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:6:1:1\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.product instance product has variants #destroy sets deleted_at value.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:7:1:1\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.product instance purchasable? with variants returns false if no variant is purchasable even if master is.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:1:1\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.product instance purchasable? with variants returns true if variant is purchasable.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:1:2\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.product instance purchasable? without variants returns false if master is not purchasable.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:2:1\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.product instance purchasable? without variants returns true if master is purchasable.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:2:2\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.product instance variants_and_option_values returns only variants with option values.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:12:1\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.product instance when using another locale translates product fields.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:19:1\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.properties #possible_promotions lists the promotion as a possible promotion.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:5:1\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.properties does not create duplicate properties when set_property is called.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.properties does not overwrite properties' presentation names.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:4\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.properties optional property_presentation is not used example at ./spec/models/spree/product_spec.rb:456.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:3:1:1\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.properties optional property_presentation is used example at ./spec/models/spree/product_spec.rb:462.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:3:2:1\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.properties properly assigns properties.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.scopes .ascend_by_price orders products by minimum price ascending.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:40:3:1\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.scopes .ascend_by_price places products without prices at the end.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:40:3:2\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.scopes .ascend_by_price with variant prices uses minimum variant price for sorting.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:40:3:3:1\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.scopes .available when available_on is not specified returns active, not discontinued products.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:40:2:2:1\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.scopes .available when available_on is specified returns products available before or on the specified date.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:40:2:1:1\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.scopes .available when show_products_without_price is false only returns products with prices in the specified currency.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:40:2:3:1\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.scopes .available when show_products_without_price is true returns products regardless of price.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:40:2:4:1\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.scopes .descend_by_price orders products by maximum price descending.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:40:4:1\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.scopes .descend_by_price places products without prices at the end.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:40:4:2\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.scopes .descend_by_price with variant prices uses maximum variant price for sorting.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:40:4:3:1\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.scopes .not_discontinued when false is passed as an argument returns all products.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:40:1:2:1\"}}","Spree::Product at ./spec/models/spree/product_spec.rb.scopes .not_discontinued when nothing is passed as an argument returns only not discontinued products.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:40:1:1:1\"}}","Spree::Product::Slugs at ./spec/models/spree/product/slugs_spec.rb.#localized_slugs_for_store the slugs are generated from default locale name when name and slug for translation is empty saves slugs generated from fallback name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:4:1\"}}","Spree::Product::Slugs at ./spec/models/spree/product/slugs_spec.rb.#localized_slugs_for_store the slugs are generated from invalid slug format saves slugs in valid format.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:5:1\"}}","Spree::Product::Slugs at ./spec/models/spree/product/slugs_spec.rb.#localized_slugs_for_store the slugs are generated from name when slug field is empty saves slugs generated from name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:3:1\"}}","Spree::Product::Slugs at ./spec/models/spree/product/slugs_spec.rb.#localized_slugs_for_store when one of the supported locales does not have a translation falls back to store's default locale.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:2:1\"}}","Spree::Product::Slugs at ./spec/models/spree/product/slugs_spec.rb.#localized_slugs_for_store when there are slugs in locales not supported by the store returns only slugs in locales supported by the store.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1:1\"}}","Spree::Product::Slugs at ./spec/models/spree/product/slugs_spec.rb.ability to retake a slug of deleted record with the same name can delete the product again and then create a new product with the original slug.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","Spree::Product::Slugs at ./spec/models/spree/product/slugs_spec.rb.ability to retake a slug of deleted record with the same name can use original slug.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","Spree::Product::Slugs at ./spec/models/spree/product/slugs_spec.rb.falls back to 'name-sku' for slug if regular name-based slug already in use.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7\"}}","Spree::Product::Slugs at ./spec/models/spree/product/slugs_spec.rb.history when product is destroyed keeps the history.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1:1\"}}","Spree::Product::Slugs at ./spec/models/spree/product/slugs_spec.rb.history when product is restored regenerates the product slug.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2:2\"}}","Spree::Product::Slugs at ./spec/models/spree/product/slugs_spec.rb.history when product is restored updates the history.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2:1\"}}","Spree::Product::Slugs at ./spec/models/spree/product/slugs_spec.rb.stores old slugs in FriendlyIds history.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4\"}}","Spree::Product::Slugs at ./spec/models/spree/product/slugs_spec.rb.translated slugs ensuring slug uniqueness when the slug is not unique in the same locale appends a UUID to make it unique.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:2:2:1\"}}","Spree::Product::Slugs at ./spec/models/spree/product/slugs_spec.rb.translated slugs ensuring slug uniqueness when the slug is unique in a different locale allows the same slug in different locales.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:2:3:1\"}}","Spree::Product::Slugs at ./spec/models/spree/product/slugs_spec.rb.translated slugs ensuring slug uniqueness when the slug is unique in the same locale keeps the original slug.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:2:1:1\"}}","Spree::Product::Slugs at ./spec/models/spree/product/slugs_spec.rb.translated slugs generating slugs when a translated product has a slug normalizes the existing slug.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1:3:1\"}}","Spree::Product::Slugs at ./spec/models/spree/product/slugs_spec.rb.translated slugs generating slugs when a translated product has no name and slug generates slug from the product name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1:1:1\"}}","Spree::Product::Slugs at ./spec/models/spree/product/slugs_spec.rb.translated slugs generating slugs when a translated product has no slug generates slug from the translated product name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1:2:1\"}}","Spree::Product::Slugs at ./spec/models/spree/product/slugs_spec.rb.validates slug uniqueness.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6\"}}","Spree::Product::Slugs at ./spec/models/spree/product/slugs_spec.rb.when product destroyed renames slug.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","Spree::Product::Slugs at ./spec/models/spree/product/slugs_spec.rb.when product destroyed when more than one translation exists renames slug for all translations.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1\"}}","Spree::Product::Slugs at ./spec/models/spree/product/slugs_spec.rb.when product destroyed when slug is already at or near max length truncates renamed slug to ensure it remains within length limit.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3:1\"}}","Spree::Product::Slugs at ./spec/models/spree/product/slugs_spec.rb.with not normalized slug normalizes slug on update validation.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::Product::Slugs at ./spec/models/spree/product/slugs_spec.rb.with slug history allows re-using the slug from history.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3\"}}","Spree::Product::Slugs at ./spec/models/spree/product/slugs_spec.rb.with slug history soft deletes slug record.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","Spree::Product::Slugs at ./spec/models/spree/product/slugs_spec.rb.with slug history updates slugs with deleted-{id} prefix to ensure uniqueness.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","Spree::ProductMetricsSubscriber at ./spec/subscribers/spree/product_metrics_subscriber_spec.rb.#refresh_product_metrics enqueues jobs with correct arguments.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","Spree::ProductMetricsSubscriber at ./spec/subscribers/spree/product_metrics_subscriber_spec.rb.#refresh_product_metrics enqueues refresh jobs for all products in the order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","Spree::ProductMetricsSubscriber at ./spec/subscribers/spree/product_metrics_subscriber_spec.rb.#refresh_product_metrics when order does not exist does not enqueue any jobs.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:5:1\"}}","Spree::ProductMetricsSubscriber at ./spec/subscribers/spree/product_metrics_subscriber_spec.rb.#refresh_product_metrics when order has duplicate products only enqueues one job per unique product.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:7:1\"}}","Spree::ProductMetricsSubscriber at ./spec/subscribers/spree/product_metrics_subscriber_spec.rb.#refresh_product_metrics when order has no line items does not enqueue any jobs.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:6:1\"}}","Spree::ProductMetricsSubscriber at ./spec/subscribers/spree/product_metrics_subscriber_spec.rb.#refresh_product_metrics when order_id is missing does not enqueue any jobs.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3:1\"}}","Spree::ProductMetricsSubscriber at ./spec/subscribers/spree/product_metrics_subscriber_spec.rb.#refresh_product_metrics when store_id is missing does not enqueue any jobs.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4:1\"}}","Spree::ProductMetricsSubscriber at ./spec/subscribers/spree/product_metrics_subscriber_spec.rb..event_handlers routes order.completed to refresh_product_metrics.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","Spree::ProductMetricsSubscriber at ./spec/subscribers/spree/product_metrics_subscriber_spec.rb..subscription_patterns subscribes to order.completed event.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::ProductProperties::FindAvailable at ./spec/finders/spree/product_properties/find_available_spec.rb.#execute finds available Product Properties.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::ProductProperties::FindAvailable at ./spec/finders/spree/product_properties/find_available_spec.rb.#execute when given a predefined products scope finds filterable Product Properties with respect to a predefined Products scope.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","Spree::ProductProperties::FindAvailable at ./spec/finders/spree/product_properties/find_available_spec.rb.#execute when given a predefined scope finds available Product Properties with respect to a predefined scope.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","Spree::ProductProperty at ./spec/models/spree/product_property_spec.rb.#validations should not create duplicated property for product.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::ProductProperty at ./spec/models/spree/product_property_spec.rb.#validations value field validates presence.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","Spree::ProductProperty at ./spec/models/spree/product_property_spec.rb.ransackable_associations example at ./spec/models/spree/product_property_spec.rb:58.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","Spree::ProductProperty at ./spec/models/spree/product_property_spec.rb.setting param example at ./spec/models/spree/product_property_spec.rb:64.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","Spree::ProductProperty at ./spec/models/spree/product_property_spec.rb.setting value normalizes value by stripping whitespace.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","Spree::ProductProperty at ./spec/models/spree/product_property_spec.rb.touching updates product.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","Spree::ProductProperty at ./spec/models/spree/product_property_spec.rb.touching updates property.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","Spree::ProductProperty at ./spec/models/spree/product_property_spec.rb.translations translates product property fields.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","Spree::Products::AutoMatchTaxons at ./spec/services/spree/products/auto_match_taxons_spec.rb.when product matches new taxon doesn't do circular call.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","Spree::Products::AutoMatchTaxons at ./spec/services/spree/products/auto_match_taxons_spec.rb.when product matches new taxon should be added to the taxon.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::Products::AutoMatchTaxons at ./spec/services/spree/products/auto_match_taxons_spec.rb.when product no longer matches taxon should be removed from the taxon.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","Spree::Products::Duplicator at ./spec/services/spree/products/duplicator_spec.rb.duplicates already duplicated product.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3\"}}","Spree::Products::Duplicator at ./spec/services/spree/products/duplicator_spec.rb.duplicates the product.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2\"}}","Spree::Products::Duplicator at ./spec/services/spree/products/duplicator_spec.rb.example at ./spec/services/spree/products/duplicator_spec.rb:31.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","Spree::Products::Duplicator at ./spec/services/spree/products/duplicator_spec.rb.image duplication clones images by default.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","Spree::Products::Duplicator at ./spec/services/spree/products/duplicator_spec.rb.image duplication when excluding images from cloning doesn't clone images.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1\"}}","Spree::Products::Duplicator at ./spec/services/spree/products/duplicator_spec.rb.product attributes always sets the product as draft.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","Spree::Products::Duplicator at ./spec/services/spree/products/duplicator_spec.rb.product attributes clones backorderable and sets stock to 0.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:7\"}}","Spree::Products::Duplicator at ./spec/services/spree/products/duplicator_spec.rb.product attributes clones barcode.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:6\"}}","Spree::Products::Duplicator at ./spec/services/spree/products/duplicator_spec.rb.product attributes copies tags.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:5\"}}","Spree::Products::Duplicator at ./spec/services/spree/products/duplicator_spec.rb.product attributes copies the properties.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:4\"}}","Spree::Products::Duplicator at ./spec/services/spree/products/duplicator_spec.rb.product attributes sets an unique name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2\"}}","Spree::Products::Duplicator at ./spec/services/spree/products/duplicator_spec.rb.product attributes sets an unique sku.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3\"}}","Spree::Products::Duplicator at ./spec/services/spree/products/duplicator_spec.rb.product prices clones prices.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","Spree::Products::Duplicator at ./spec/services/spree/products/duplicator_spec.rb.stores example at ./spec/services/spree/products/duplicator_spec.rb:115.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","Spree::Products::Duplicator at ./spec/services/spree/products/duplicator_spec.rb.with variants clones backorderable and sets stock to 0.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:4\"}}","Spree::Products::Duplicator at ./spec/services/spree/products/duplicator_spec.rb.with variants clones barcodes.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:3\"}}","Spree::Products::Duplicator at ./spec/services/spree/products/duplicator_spec.rb.with variants doesn't duplicate the option values.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2\"}}","Spree::Products::Duplicator at ./spec/services/spree/products/duplicator_spec.rb.with variants duplicates the variants.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1\"}}","Spree::Products::Duplicator at ./spec/services/spree/products/duplicator_spec.rb.with variants image duplication clones images by default.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:5:1\"}}","Spree::Products::Duplicator at ./spec/services/spree/products/duplicator_spec.rb.with variants image duplication when excluding images from cloning doesn't clone images.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:5:2:1\"}}","Spree::Products::Duplicator at ./spec/services/spree/products/duplicator_spec.rb.with variants variant prices clones prices.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:6:1\"}}","Spree::Products::Find at ./spec/finders/spree/products/find_spec.rb.backorderable returns products with backorderable variants.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","Spree::Products::Find at ./spec/finders/spree/products/find_spec.rb.exclude discontinued and deleted returns not discontinued and not deleted products.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","Spree::Products::Find at ./spec/finders/spree/products/find_spec.rb.filter by options and option values for option values filtering by one option returns products with proper option values.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2:1:1\"}}","Spree::Products::Find at ./spec/finders/spree/products/find_spec.rb.filter by options and option values for option values filtering by several options returns products that have both options.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2:2:1\"}}","Spree::Products::Find at ./spec/finders/spree/products/find_spec.rb.filter by options and option values for options returns products matching all given options.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1:1\"}}","Spree::Products::Find at ./spec/finders/spree/products/find_spec.rb.filter by prices for a price between 16 and 24 example at ./spec/finders/spree/products/find_spec.rb:363.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:2:1\"}}","Spree::Products::Find at ./spec/finders/spree/products/find_spec.rb.filter by prices for a price less than 20 example at ./spec/finders/spree/products/find_spec.rb:357.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1:1\"}}","Spree::Products::Find at ./spec/finders/spree/products/find_spec.rb.filter by prices for a price more than 23 example at ./spec/finders/spree/products/find_spec.rb:369.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:3:1\"}}","Spree::Products::Find at ./spec/finders/spree/products/find_spec.rb.filter by properties when filtering by many Properties finds Products matching any of Property values, but for all given Properties.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:2:1\"}}","Spree::Products::Find at ./spec/finders/spree/products/find_spec.rb.filter by properties when filtering by one Property finds Products matching any of Property values.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1:1\"}}","Spree::Products::Find at ./spec/finders/spree/products/find_spec.rb.filter by slug when product with given slug is not present returns all products.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:2:1\"}}","Spree::Products::Find at ./spec/finders/spree/products/find_spec.rb.filter by slug when product with given slug is present returns products with the given slug.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:1:1\"}}","Spree::Products::Find at ./spec/finders/spree/products/find_spec.rb.filter by slug when slug is not present returns all products.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:3:1\"}}","Spree::Products::Find at ./spec/finders/spree/products/find_spec.rb.filter by taxons multiple taxons + 1 concat_taxons are requested example at ./spec/finders/spree/products/find_spec.rb:308.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:3:1\"}}","Spree::Products::Find at ./spec/finders/spree/products/find_spec.rb.filter by taxons multiple taxons are requested example at ./spec/finders/spree/products/find_spec.rb:292.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2:1\"}}","Spree::Products::Find at ./spec/finders/spree/products/find_spec.rb.filter by taxons one taxon is requested in params behaves like returns distinct products associated both to self and descendants example at ./spec/finders/spree/products/find_spec.rb:265.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1:1:1\"}}","Spree::Products::Find at ./spec/finders/spree/products/find_spec.rb.filter by taxons one taxon is requested in params when product is already related to both taxons behaves like returns distinct products associated both to self and descendants example at ./spec/finders/spree/products/find_spec.rb:265.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1:2:1:1\"}}","Spree::Products::Find at ./spec/finders/spree/products/find_spec.rb.filter by taxons only multiple concat_taxons are requested example at ./spec/finders/spree/products/find_spec.rb:324.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:4:1\"}}","Spree::Products::Find at ./spec/finders/spree/products/find_spec.rb.filter by taxons only one concat_taxons is requested example at ./spec/finders/spree/products/find_spec.rb:340.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:5:1\"}}","Spree::Products::Find at ./spec/finders/spree/products/find_spec.rb.in stock returns products with variants in stock.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","Spree::Products::Find at ./spec/finders/spree/products/find_spec.rb.include deleted returns products with deleted.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","Spree::Products::Find at ./spec/finders/spree/products/find_spec.rb.include discontinued returns products with discontinued.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::Products::Find at ./spec/finders/spree/products/find_spec.rb.ordered default when filtering by taxons returns products ordered by associated taxon position.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1:2:1\"}}","Spree::Products::Find at ./spec/finders/spree/products/find_spec.rb.ordered default when not filtering by taxons returns products in default order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1:1:1\"}}","Spree::Products::Find at ./spec/finders/spree/products/find_spec.rb.ordered returns products in name-a-z order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:5\"}}","Spree::Products::Find at ./spec/finders/spree/products/find_spec.rb.ordered returns products in name-z-a order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:6\"}}","Spree::Products::Find at ./spec/finders/spree/products/find_spec.rb.ordered returns products in newest-first order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2\"}}","Spree::Products::Find at ./spec/finders/spree/products/find_spec.rb.ordered returns products in price-high-to-low order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:3\"}}","Spree::Products::Find at ./spec/finders/spree/products/find_spec.rb.ordered returns products in price-low-to-high order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:4\"}}","Spree::Products::Find at ./spec/finders/spree/products/find_spec.rb.purchasable returns products with purchasable variants.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","Spree::Products::PrepareNestedAttributes at ./spec/services/spree/products/prepare_nested_attributes_spec.rb.prices_attributes handling when user can update prices when price amount is blank marks the price for destruction.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1:1\"}}","Spree::Products::PrepareNestedAttributes at ./spec/services/spree/products/prepare_nested_attributes_spec.rb.prices_attributes handling when user cannot update prices with master_attributes removes prices_attributes from master.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:2:1\"}}","Spree::Products::PrepareNestedAttributes at ./spec/services/spree/products/prepare_nested_attributes_spec.rb.prices_attributes handling when user cannot update prices with variants_attributes removes prices_attributes from variants.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1:1\"}}","Spree::Products::PrepareNestedAttributes at ./spec/services/spree/products/prepare_nested_attributes_spec.rb.product_properties_attributes handling when product property value is blank marks the product property for destruction.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","Spree::Products::PrepareNestedAttributes at ./spec/services/spree/products/prepare_nested_attributes_spec.rb.product_properties_attributes handling when product property value is present does not mark the product property for destruction.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","Spree::Products::PrepareNestedAttributes at ./spec/services/spree/products/prepare_nested_attributes_spec.rb.stock_items_attributes handling when user cannot update stock items with master_attributes removes stock_items_attributes from master.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:2:1\"}}","Spree::Products::PrepareNestedAttributes at ./spec/services/spree/products/prepare_nested_attributes_spec.rb.stock_items_attributes handling when user cannot update stock items with variants_attributes removes stock_items_attributes from variants.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:1:1\"}}","Spree::Products::PrepareNestedAttributes at ./spec/services/spree/products/prepare_nested_attributes_spec.rb.store_ids handling when store_ids is blank adds current store to store_ids.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","Spree::Products::PrepareNestedAttributes at ./spec/services/spree/products/prepare_nested_attributes_spec.rb.store_ids handling when store_ids is present preserves submitted store_ids.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","Spree::Products::PrepareNestedAttributes at ./spec/services/spree/products/prepare_nested_attributes_spec.rb.taxon preservation across stores when creating a new product does not merge taxons from other stores.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","Spree::Products::PrepareNestedAttributes at ./spec/services/spree/products/prepare_nested_attributes_spec.rb.taxon preservation across stores when creating a new product only includes submitted taxon IDs.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2\"}}","Spree::Products::PrepareNestedAttributes at ./spec/services/spree/products/prepare_nested_attributes_spec.rb.taxon preservation across stores when editing a product with taxons from multiple stores when removing all taxons from current store does not include taxons from current store.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:2\"}}","Spree::Products::PrepareNestedAttributes at ./spec/services/spree/products/prepare_nested_attributes_spec.rb.taxon preservation across stores when editing a product with taxons from multiple stores when removing all taxons from current store preserves taxons from other stores.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","Spree::Products::PrepareNestedAttributes at ./spec/services/spree/products/prepare_nested_attributes_spec.rb.taxon preservation across stores when editing a product with taxons from multiple stores when taxon_ids param is not present does not add taxon_ids key.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:1\"}}","Spree::Products::PrepareNestedAttributes at ./spec/services/spree/products/prepare_nested_attributes_spec.rb.taxon preservation across stores when editing a product with taxons from multiple stores when updating taxon_ids from current store includes the new taxon from current store.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:2\"}}","Spree::Products::PrepareNestedAttributes at ./spec/services/spree/products/prepare_nested_attributes_spec.rb.taxon preservation across stores when editing a product with taxons from multiple stores when updating taxon_ids from current store preserves taxons from other stores.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","Spree::Products::PrepareNestedAttributes at ./spec/services/spree/products/prepare_nested_attributes_spec.rb.taxon preservation across stores when editing a product with taxons from multiple stores when updating taxon_ids from current store removes the old taxon from current store.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:3\"}}","Spree::Products::PrepareNestedAttributes at ./spec/services/spree/products/prepare_nested_attributes_spec.rb.taxon preservation across stores when editing a product with taxons from multiple stores when updating taxon_ids from current store returns unique taxon IDs.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:4\"}}","Spree::Products::PrepareNestedAttributes at ./spec/services/spree/products/prepare_nested_attributes_spec.rb.taxon preservation across stores when product has taxons from multiple other stores has exactly 3 taxon IDs.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:3\"}}","Spree::Products::PrepareNestedAttributes at ./spec/services/spree/products/prepare_nested_attributes_spec.rb.taxon preservation across stores when product has taxons from multiple other stores includes the new taxon from current store.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:2\"}}","Spree::Products::PrepareNestedAttributes at ./spec/services/spree/products/prepare_nested_attributes_spec.rb.taxon preservation across stores when product has taxons from multiple other stores preserves taxons from all other stores.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","Spree::Products::RefreshMetricsJob at ./spec/jobs/spree/products/refresh_metrics_job_spec.rb.#perform when product_id is invalid does nothing.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","Spree::Products::RefreshMetricsJob at ./spec/jobs/spree/products/refresh_metrics_job_spec.rb.#perform when store_id is invalid does nothing.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1\"}}","Spree::Products::RefreshMetricsJob at ./spec/jobs/spree/products/refresh_metrics_job_spec.rb.#perform when store_product does not exist does nothing.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","Spree::Products::RefreshMetricsJob at ./spec/jobs/spree/products/refresh_metrics_job_spec.rb.#perform when store_product exists calls refresh_metrics! on the store_product.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","Spree::Products::TouchTaxonsJob at ./spec/jobs/spree/products/touch_taxons_job_spec.rb.#perform does not touch other taxons.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","Spree::Products::TouchTaxonsJob at ./spec/jobs/spree/products/touch_taxons_job_spec.rb.#perform touches all specified taxonomies.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","Spree::Products::TouchTaxonsJob at ./spec/jobs/spree/products/touch_taxons_job_spec.rb.#perform touches all specified taxons.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::ProductsHelper at ./spec/helpers/products_helper_spec.rb.#cache_key_for_product given possible promotions example at ./spec/helpers/products_helper_spec.rb:286.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:6:1\"}}","Spree::ProductsHelper at ./spec/helpers/products_helper_spec.rb.#cache_key_for_product when current_price_options includes nil values does not include nil values.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3:1\"}}","Spree::ProductsHelper at ./spec/helpers/products_helper_spec.rb.#cache_key_for_product when current_price_options includes values that do not implement cache_key includes string representations of these values.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:4:1\"}}","Spree::ProductsHelper at ./spec/helpers/products_helper_spec.rb.#cache_key_for_product when keys in the options hash are inserted in non-alphabetical order the values are nevertheless returned in alphabetical order of their keys.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:5:1\"}}","Spree::ProductsHelper at ./spec/helpers/products_helper_spec.rb.#cache_key_for_product when there is a current tax zone includes the current_tax_zone.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:1\"}}","Spree::ProductsHelper at ./spec/helpers/products_helper_spec.rb.#cache_key_for_product when there is no current tax zone example at ./spec/helpers/products_helper_spec.rb:235.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1\"}}","Spree::ProductsHelper at ./spec/helpers/products_helper_spec.rb.#cache_key_for_products when there is a maximum updated date example at ./spec/helpers/products_helper_spec.rb:175.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1\"}}","Spree::ProductsHelper at ./spec/helpers/products_helper_spec.rb.#cache_key_for_products when there is no considered maximum updated date example at ./spec/helpers/products_helper_spec.rb:186.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1\"}}","Spree::ProductsHelper at ./spec/helpers/products_helper_spec.rb.#cache_key_for_products with Taxon ID present example at ./spec/helpers/products_helper_spec.rb:197.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3:1\"}}","Spree::ProductsHelper at ./spec/helpers/products_helper_spec.rb.#cache_key_for_products with `additional_cache_key` passed example at ./spec/helpers/products_helper_spec.rb:210.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:4:1\"}}","Spree::ProductsHelper at ./spec/helpers/products_helper_spec.rb.#line_item_description_text behaves like line item descriptions description has line endings example at ./spec/helpers/products_helper_spec.rb:142.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:4:1\"}}","Spree::ProductsHelper at ./spec/helpers/products_helper_spec.rb.#line_item_description_text behaves like line item descriptions description has nonbreaking spaces example at ./spec/helpers/products_helper_spec.rb:136.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:3:1\"}}","Spree::ProductsHelper at ./spec/helpers/products_helper_spec.rb.#line_item_description_text behaves like line item descriptions variant has a blank description example at ./spec/helpers/products_helper_spec.rb:124.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1:1\"}}","Spree::ProductsHelper at ./spec/helpers/products_helper_spec.rb.#line_item_description_text behaves like line item descriptions variant has a description example at ./spec/helpers/products_helper_spec.rb:130.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:2:1\"}}","Spree::ProductsHelper at ./spec/helpers/products_helper_spec.rb.#variant_price_diff when currency is JPY when variant is less than master example at ./spec/helpers/products_helper_spec.rb:70.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:2:1\"}}","Spree::ProductsHelper at ./spec/helpers/products_helper_spec.rb.#variant_price_diff when currency is JPY when variant is more than master example at ./spec/helpers/products_helper_spec.rb:64.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1:1\"}}","Spree::ProductsHelper at ./spec/helpers/products_helper_spec.rb.#variant_price_diff when currency is default when variant is less than master example at ./spec/helpers/products_helper_spec.rb:52.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:2:1\"}}","Spree::ProductsHelper at ./spec/helpers/products_helper_spec.rb.#variant_price_diff when currency is default when variant is more than master example at ./spec/helpers/products_helper_spec.rb:44.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1:1\"}}","Spree::ProductsHelper at ./spec/helpers/products_helper_spec.rb.#variant_price_diff when currency is default when variant is more than master example at ./spec/helpers/products_helper_spec.rb:46.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1:2\"}}","Spree::ProductsHelper at ./spec/helpers/products_helper_spec.rb.#variant_price_diff when the master has no price example at ./spec/helpers/products_helper_spec.rb:37.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","Spree::ProductsHelper at ./spec/helpers/products_helper_spec.rb.#variant_price_diff when variant is same as master example at ./spec/helpers/products_helper_spec.rb:31.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","Spree::ProductsHelper at ./spec/helpers/products_helper_spec.rb.#variant_price_full is nil when all variant prices are equal.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3\"}}","Spree::ProductsHelper at ./spec/helpers/products_helper_spec.rb.#variant_price_full when currency is JPY returns the variant price if the price is different than master.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","Spree::ProductsHelper at ./spec/helpers/products_helper_spec.rb.#variant_price_full when currency is default returns the variant price if the price is different than master.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","Spree::Promotion at ./spec/models/spree/promotion_spec.rb.#activate checks path if present.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1\"}}","Spree::Promotion at ./spec/models/spree/promotion_spec.rb.#activate does activate if newer then order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:3\"}}","Spree::Promotion at ./spec/models/spree/promotion_spec.rb.#activate does not perform actions against an order in a finalized state.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2\"}}","Spree::Promotion at ./spec/models/spree/promotion_spec.rb.#activate when activated assigns the order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:4:1\"}}","Spree::Promotion at ./spec/models/spree/promotion_spec.rb.#activate when not activated doesn't assign the order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:5:1\"}}","Spree::Promotion at ./spec/models/spree/promotion_spec.rb.#adjusted_credits_count counts item level adjustments.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:2\"}}","Spree::Promotion at ./spec/models/spree/promotion_spec.rb.#adjusted_credits_count counts order level adjustments.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:1\"}}","Spree::Promotion at ./spec/models/spree/promotion_spec.rb.#cached_rules returns the rules.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:23:1\"}}","Spree::Promotion at ./spec/models/spree/promotion_spec.rb.#credits_count counts eligible adjustments.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1\"}}","Spree::Promotion at ./spec/models/spree/promotion_spec.rb.#credits_count does not count ineligible adjustments.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2\"}}","Spree::Promotion at ./spec/models/spree/promotion_spec.rb.#destroy deletes actions.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","Spree::Promotion at ./spec/models/spree/promotion_spec.rb.#destroy deletes rules.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2\"}}","Spree::Promotion at ./spec/models/spree/promotion_spec.rb.#destroy if promotion was already used does not destroy the promotion.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:3:1\"}}","Spree::Promotion at ./spec/models/spree/promotion_spec.rb.#eligible? when promotable is a Spree::LineItem and product is not promotionable example at ./spec/models/spree/promotion_spec.rb:494.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:2:2:1\"}}","Spree::Promotion at ./spec/models/spree/promotion_spec.rb.#eligible? when promotable is a Spree::LineItem and product is promotionable example at ./spec/models/spree/promotion_spec.rb:488.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:2:1:1\"}}","Spree::Promotion at ./spec/models/spree/promotion_spec.rb.#eligible? when promotable is a Spree::Order and it contains items and at least one item is promotionable example at ./spec/models/spree/promotion_spec.rb:517.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:3:2:2:1\"}}","Spree::Promotion at ./spec/models/spree/promotion_spec.rb.#eligible? when promotable is a Spree::Order and it contains items and the items are all non-promotionable example at ./spec/models/spree/promotion_spec.rb:513.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:3:2:1:1\"}}","Spree::Promotion at ./spec/models/spree/promotion_spec.rb.#eligible? when promotable is a Spree::Order and it is empty example at ./spec/models/spree/promotion_spec.rb:502.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:3:1:1\"}}","Spree::Promotion at ./spec/models/spree/promotion_spec.rb.#eligible? when promotion is expired example at ./spec/models/spree/promotion_spec.rb:474.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:1:1\"}}","Spree::Promotion at ./spec/models/spree/promotion_spec.rb.#eligible_rules when there are no aplicable rules returns true.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:2:1\"}}","Spree::Promotion at ./spec/models/spree/promotion_spec.rb.#eligible_rules when there are no rules returns true.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:1:1\"}}","Spree::Promotion at ./spec/models/spree/promotion_spec.rb.#eligible_rules with 'all' match policy when all rules are eligible does set anything to eligiblity errors.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:3:1:2\"}}","Spree::Promotion at ./spec/models/spree/promotion_spec.rb.#eligible_rules with 'all' match policy when all rules are eligible returns the eligible rules.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:3:1:1\"}}","Spree::Promotion at ./spec/models/spree/promotion_spec.rb.#eligible_rules with 'all' match policy when any of the rules is not eligible returns nil.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:3:2:1\"}}","Spree::Promotion at ./spec/models/spree/promotion_spec.rb.#eligible_rules with 'all' match policy when any of the rules is not eligible sets eligibility errors to the first non-nil one.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:3:2:2\"}}","Spree::Promotion at ./spec/models/spree/promotion_spec.rb.#eligible_rules with 'any' match policy has eligible rules if any of the rules are eligible.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:4:1\"}}","Spree::Promotion at ./spec/models/spree/promotion_spec.rb.#eligible_rules with 'any' match policy when none of the rules are eligible returns nil.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:4:2:1\"}}","Spree::Promotion at ./spec/models/spree/promotion_spec.rb.#eligible_rules with 'any' match policy when none of the rules are eligible sets eligibility errors to the first non-nil one.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:4:2:2\"}}","Spree::Promotion at ./spec/models/spree/promotion_spec.rb.#expired is expired if it has already ended.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:3\"}}","Spree::Promotion at ./spec/models/spree/promotion_spec.rb.#expired is expired if it hasn't started yet.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:2\"}}","Spree::Promotion at ./spec/models/spree/promotion_spec.rb.#expired is not exipired.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1\"}}","Spree::Promotion at ./spec/models/spree/promotion_spec.rb.#expired is not expired if current time is within starts_at and expires_at range.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:6\"}}","Spree::Promotion at ./spec/models/spree/promotion_spec.rb.#expired is not expired if it has not ended yet.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:5\"}}","Spree::Promotion at ./spec/models/spree/promotion_spec.rb.#expired is not expired if it has started already.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:4\"}}","Spree::Promotion at ./spec/models/spree/promotion_spec.rb.#expired is not expired if usage limit is not exceeded.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:7\"}}","Spree::Promotion at ./spec/models/spree/promotion_spec.rb.#generate_code with generate_code has a generated code.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:21:1:1\"}}","Spree::Promotion at ./spec/models/spree/promotion_spec.rb.#generate_code without generate_code has a generated code.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:21:2:1\"}}","Spree::Promotion at ./spec/models/spree/promotion_spec.rb.#generate_coupon_codes generates new codes when number_of_codes is changed.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:22:2\"}}","Spree::Promotion at ./spec/models/spree/promotion_spec.rb.#generate_coupon_codes has a generated code.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:22:1\"}}","Spree::Promotion at ./spec/models/spree/promotion_spec.rb.#generate_coupon_codes when number of codes is greater than the web limit generates the codes in a background job.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:22:4:1\"}}","Spree::Promotion at ./spec/models/spree/promotion_spec.rb.#generate_coupon_codes with prefix has a generated code with prefix.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:22:3:1\"}}","Spree::Promotion at ./spec/models/spree/promotion_spec.rb.#line_item_actionable? when the order is eligible for promotion when there are no rules example at ./spec/models/spree/promotion_spec.rb:641.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:1:1:1\"}}","Spree::Promotion at ./spec/models/spree/promotion_spec.rb.#line_item_actionable? when the order is eligible for promotion when there are rules when the match policy is all when all rules allow action on the line item example at ./spec/models/spree/promotion_spec.rb:651.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:1:2:1:1:1\"}}","Spree::Promotion at ./spec/models/spree/promotion_spec.rb.#line_item_actionable? when the order is eligible for promotion when there are rules when the match policy is all when at least one rule does not allow action on the line item example at ./spec/models/spree/promotion_spec.rb:657.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:1:2:1:2:1\"}}","Spree::Promotion at ./spec/models/spree/promotion_spec.rb.#line_item_actionable? when the order is eligible for promotion when there are rules when the match policy is any when at least one rule allows action on the line item example at ./spec/models/spree/promotion_spec.rb:667.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:1:2:2:1:1\"}}","Spree::Promotion at ./spec/models/spree/promotion_spec.rb.#line_item_actionable? when the order is eligible for promotion when there are rules when the match policy is any when no rules allow action on the line item example at ./spec/models/spree/promotion_spec.rb:673.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:1:2:2:2:1\"}}","Spree::Promotion at ./spec/models/spree/promotion_spec.rb.#line_item_actionable? when the order is not eligible for the promotion example at ./spec/models/spree/promotion_spec.rb:682.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:2:1\"}}","Spree::Promotion at ./spec/models/spree/promotion_spec.rb.#products when it has product rules with products associated has products.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:1:1\"}}","Spree::Promotion at ./spec/models/spree/promotion_spec.rb.#products when there's no product rule associated does not have products but still return an empty array.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:2:1\"}}","Spree::Promotion at ./spec/models/spree/promotion_spec.rb.#save allows to change promotion type from automatic to multiple discount codes.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:3\"}}","Spree::Promotion at ./spec/models/spree/promotion_spec.rb.#save allows to change promotion type from automatic to single discount code.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2\"}}","Spree::Promotion at ./spec/models/spree/promotion_spec.rb.#save allows to change promotion type from multiple discount codes to automatic.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:5\"}}","Spree::Promotion at ./spec/models/spree/promotion_spec.rb.#save allows to change promotion type from single discount code to automatic.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:4\"}}","Spree::Promotion at ./spec/models/spree/promotion_spec.rb.#save deeply autosaves records and preferences.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","Spree::Promotion at ./spec/models/spree/promotion_spec.rb.#usage_limit_exceeded does not have its usage limit exceeded with no usage limit.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1\"}}","Spree::Promotion at ./spec/models/spree/promotion_spec.rb.#usage_limit_exceeded has its usage limit exceeded.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:2\"}}","Spree::Promotion at ./spec/models/spree/promotion_spec.rb.#used_by? when the user has not used this promo example at ./spec/models/spree/promotion_spec.rb:784.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:2:1\"}}","Spree::Promotion at ./spec/models/spree/promotion_spec.rb.#used_by? when the user has used this promo when the order is complete example at ./spec/models/spree/promotion_spec.rb:756.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:1:1:1\"}}","Spree::Promotion at ./spec/models/spree/promotion_spec.rb.#used_by? when the user has used this promo when the order is complete when the only matching order is the excluded order example at ./spec/models/spree/promotion_spec.rb:772.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:1:1:3:1\"}}","Spree::Promotion at ./spec/models/spree/promotion_spec.rb.#used_by? when the user has used this promo when the order is complete when the promotion is not eligible example at ./spec/models/spree/promotion_spec.rb:766.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:1:1:2:1\"}}","Spree::Promotion at ./spec/models/spree/promotion_spec.rb.#used_by? when the user has used this promo when the order is not complete example at ./spec/models/spree/promotion_spec.rb:779.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:1:2:1\"}}","Spree::Promotion at ./spec/models/spree/promotion_spec.rb.#with_coupon_code and code stored in uppercase finds the code with lowercase.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:1:1\"}}","Spree::Promotion at ./spec/models/spree/promotion_spec.rb.#with_coupon_code coupon from coupon code batch finds the code with lowercase.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:3:1\"}}","Spree::Promotion at ./spec/models/spree/promotion_spec.rb.#with_coupon_code coupon from coupon code batch finds the code with uppercase.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:3:2\"}}","Spree::Promotion at ./spec/models/spree/promotion_spec.rb.#with_coupon_code when promotion has no actions return the last one created.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:2:2\"}}","Spree::Promotion at ./spec/models/spree/promotion_spec.rb.#with_coupon_code when promotion has no actions then returns the one with an action.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:2:1\"}}","Spree::Promotion at ./spec/models/spree/promotion_spec.rb.Callbacks #remove_coupons removes the coupons.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1\"}}","Spree::Promotion at ./spec/models/spree/promotion_spec.rb.Callbacks #set_usage_limit_to_nil when promo has one code for all customers does not change usage_limit.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1:1\"}}","Spree::Promotion at ./spec/models/spree/promotion_spec.rb.Callbacks #set_usage_limit_to_nil when promo has unique codes sets usage_limit to nil.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:2:1\"}}","Spree::Promotion at ./spec/models/spree/promotion_spec.rb.Validations can create multiple promos with the same code.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4\"}}","Spree::Promotion at ./spec/models/spree/promotion_spec.rb.Validations expires_at_must_be_later_than_starts_at starts_at and expires_at are nil is valid.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:5:3:1\"}}","Spree::Promotion at ./spec/models/spree/promotion_spec.rb.Validations expires_at_must_be_later_than_starts_at starts_at is a date earlier than expires_at is not valid example at ./spec/models/spree/promotion_spec.rb:55.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:5:2:1:1\"}}","Spree::Promotion at ./spec/models/spree/promotion_spec.rb.Validations expires_at_must_be_later_than_starts_at starts_at is a date earlier than expires_at is not valid example at ./spec/models/spree/promotion_spec.rb:56.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:5:2:1:2\"}}","Spree::Promotion at ./spec/models/spree/promotion_spec.rb.Validations expires_at_must_be_later_than_starts_at starts_at is a date earlier than expires_at is valid.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:5:1:1\"}}","Spree::Promotion at ./spec/models/spree/promotion_spec.rb.Validations valid_promotion is valid.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","Spree::Promotion at ./spec/models/spree/promotion_spec.rb.Validations validates name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3\"}}","Spree::Promotion at ./spec/models/spree/promotion_spec.rb.Validations validates usage limit.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","Spree::Promotion at ./spec/models/spree/promotion_spec.rb.adding items to the cart updates the promotions for new line items.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:20:1\"}}","Spree::Promotion at ./spec/models/spree/promotion_spec.rb.behaves like lifecycle events lifecycle events promotion.created publishes created event when record is created.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1:1\"}}","Spree::Promotion at ./spec/models/spree/promotion_spec.rb.behaves like lifecycle events lifecycle events promotion.deleted publishes deleted event when record is deleted.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:3:1\"}}","Spree::Promotion at ./spec/models/spree/promotion_spec.rb.behaves like lifecycle events lifecycle events promotion.updated publishes updated event when record is updated.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:2:1\"}}","Spree::Promotion at ./spec/models/spree/promotion_spec.rb.behaves like metadata can query records by metadata properties.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:10\"}}","Spree::Promotion at ./spec/models/spree/promotion_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:10.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","Spree::Promotion at ./spec/models/spree/promotion_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:11.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","Spree::Promotion at ./spec/models/spree/promotion_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:4.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::Promotion at ./spec/models/spree/promotion_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:5.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","Spree::Promotion at ./spec/models/spree/promotion_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:7.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","Spree::Promotion at ./spec/models/spree/promotion_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:8.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","Spree::Promotion at ./spec/models/spree/promotion_spec.rb.behaves like metadata reads data as not symbolized keys.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8\"}}","Spree::Promotion at ./spec/models/spree/promotion_spec.rb.behaves like metadata reads data as symbolized keys.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7\"}}","Spree::Promotion at ./spec/models/spree/promotion_spec.rb.normalize blank values for code & path will save blank value as nil value instead.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:17:1\"}}","Spree::Promotion at ./spec/models/spree/promotion_spec.rb.scopes .advertised is expected to include promotion advertised.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3:2\"}}","Spree::Promotion at ./spec/models/spree/promotion_spec.rb.scopes .advertised is expected to not include promotion not advertised.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3:1\"}}","Spree::Promotion at ./spec/models/spree/promotion_spec.rb.scopes .applied is expected to include promotion applied.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:2\"}}","Spree::Promotion at ./spec/models/spree/promotion_spec.rb.scopes .applied is expected to not include promotion not applied.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1\"}}","Spree::Promotion at ./spec/models/spree/promotion_spec.rb.scopes .coupons is expected to include promotion with code.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:2\"}}","Spree::Promotion at ./spec/models/spree/promotion_spec.rb.scopes .coupons is expected to not include promotion without code.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:1\"}}","Spree::Promotion::Actions::CreateAdjustment at ./spec/models/spree/promotion/actions/create_adjustment_spec.rb.#compute_amount when shipping_discount is applied and total is equal to discount returns discount amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:2:1\"}}","Spree::Promotion::Actions::CreateAdjustment at ./spec/models/spree/promotion/actions/create_adjustment_spec.rb.#compute_amount when shipping_discount is applied and total is greater than discount returns discount amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:3:1\"}}","Spree::Promotion::Actions::CreateAdjustment at ./spec/models/spree/promotion/actions/create_adjustment_spec.rb.#compute_amount when shipping_discount is applied and total is less than discount returns discount amount eq to total.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1:1\"}}","Spree::Promotion::Actions::CreateAdjustment at ./spec/models/spree/promotion/actions/create_adjustment_spec.rb.#compute_amount when shipping_discount is not applied and total is equal to discount returns discount amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:2:1\"}}","Spree::Promotion::Actions::CreateAdjustment at ./spec/models/spree/promotion/actions/create_adjustment_spec.rb.#compute_amount when shipping_discount is not applied and total is greater than discount returns discount amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:3:1\"}}","Spree::Promotion::Actions::CreateAdjustment at ./spec/models/spree/promotion/actions/create_adjustment_spec.rb.#compute_amount when shipping_discount is not applied and total is less than discount returns discount amount eq to total.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1:1\"}}","Spree::Promotion::Actions::CreateAdjustment at ./spec/models/spree/promotion/actions/create_adjustment_spec.rb.#perform creates a discount accessible through both order_id and adjustable_id.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3\"}}","Spree::Promotion::Actions::CreateAdjustment at ./spec/models/spree/promotion/actions/create_adjustment_spec.rb.#perform creates a discount with correct negative amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","Spree::Promotion::Actions::CreateAdjustment at ./spec/models/spree/promotion/actions/create_adjustment_spec.rb.#perform does not apply an adjustment if the amount is 0.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","Spree::Promotion::Actions::CreateAdjustment at ./spec/models/spree/promotion/actions/create_adjustment_spec.rb.#perform does not create a discount when order already has one from this promotion.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4\"}}","Spree::Promotion::Actions::CreateAdjustment at ./spec/models/spree/promotion/actions/create_adjustment_spec.rb.behaves like an adjustment source #destroy when order incomplete example at ./spec/support/concerns/adjustment_source.rb:21.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","Spree::Promotion::Actions::CreateAdjustment at ./spec/models/spree/promotion/actions/create_adjustment_spec.rb.behaves like an adjustment source #destroy when order is complete example at ./spec/support/concerns/adjustment_source.rb:27.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","Spree::Promotion::Actions::CreateAdjustment at ./spec/models/spree/promotion/actions/create_adjustment_spec.rb.behaves like an adjustment source #destroy when order is complete example at ./spec/support/concerns/adjustment_source.rb:28.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:2\"}}","Spree::Promotion::Actions::CreateItemAdjustments at ./spec/models/spree/promotion/actions/create_item_adjustments_spec.rb.#compute_amount when the adjustable is actionable calculator returns amount greater than item total does not exceed it.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:2:1\"}}","Spree::Promotion::Actions::CreateItemAdjustments at ./spec/models/spree/promotion/actions/create_item_adjustments_spec.rb.#compute_amount when the adjustable is actionable calls compute on the calculator.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","Spree::Promotion::Actions::CreateItemAdjustments at ./spec/models/spree/promotion/actions/create_item_adjustments_spec.rb.#compute_amount when the adjustable is actionable given other promotions with order adjustment should not consider not eligible adjustments.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:3:1\"}}","Spree::Promotion::Actions::CreateItemAdjustments at ./spec/models/spree/promotion/actions/create_item_adjustments_spec.rb.#compute_amount when the adjustable is actionable given other promotions with order adjustment when adjustments total is greater than item total does not exceed it.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:3:2:1\"}}","Spree::Promotion::Actions::CreateItemAdjustments at ./spec/models/spree/promotion/actions/create_item_adjustments_spec.rb.#compute_amount when the adjustable is not actionable returns 0.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","Spree::Promotion::Actions::CreateItemAdjustments at ./spec/models/spree/promotion/actions/create_item_adjustments_spec.rb.#destroy destroys adjustments for incompleted orders.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","Spree::Promotion::Actions::CreateItemAdjustments at ./spec/models/spree/promotion/actions/create_item_adjustments_spec.rb.#destroy doesnt mess with unrelated adjustments.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3\"}}","Spree::Promotion::Actions::CreateItemAdjustments at ./spec/models/spree/promotion/actions/create_item_adjustments_spec.rb.#destroy nullifies adjustments for completed orders.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2\"}}","Spree::Promotion::Actions::CreateItemAdjustments at ./spec/models/spree/promotion/actions/create_item_adjustments_spec.rb.#perform when calculator computes 0 does not create an adjustment when calculator returns 0.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","Spree::Promotion::Actions::CreateItemAdjustments at ./spec/models/spree/promotion/actions/create_item_adjustments_spec.rb.#perform when calculator returns a non-zero value creates adjustment with item as adjustable.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","Spree::Promotion::Actions::CreateItemAdjustments at ./spec/models/spree/promotion/actions/create_item_adjustments_spec.rb.#perform when calculator returns a non-zero value creates adjustment with self as source.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:2\"}}","Spree::Promotion::Actions::CreateItemAdjustments at ./spec/models/spree/promotion/actions/create_item_adjustments_spec.rb.#perform when calculator returns a non-zero value does not perform twice on the same item.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:3\"}}","Spree::Promotion::Actions::CreateItemAdjustments at ./spec/models/spree/promotion/actions/create_item_adjustments_spec.rb.#perform when calculator returns a non-zero value with products rules does not create adjustments for line_items not in product rule.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:4:1\"}}","Spree::Promotion::Actions::CreateItemAdjustments at ./spec/models/spree/promotion/actions/create_item_adjustments_spec.rb.behaves like an adjustment source #destroy when order incomplete example at ./spec/support/concerns/adjustment_source.rb:21.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","Spree::Promotion::Actions::CreateItemAdjustments at ./spec/models/spree/promotion/actions/create_item_adjustments_spec.rb.behaves like an adjustment source #destroy when order is complete example at ./spec/support/concerns/adjustment_source.rb:27.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","Spree::Promotion::Actions::CreateItemAdjustments at ./spec/models/spree/promotion/actions/create_item_adjustments_spec.rb.behaves like an adjustment source #destroy when order is complete example at ./spec/support/concerns/adjustment_source.rb:28.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:2\"}}","Spree::Promotion::Actions::CreateLineItems at ./spec/models/spree/promotion/actions/create_line_items_spec.rb.#handle_promotion_action_line_items creates new promotion action line items.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","Spree::Promotion::Actions::CreateLineItems at ./spec/models/spree/promotion/actions/create_line_items_spec.rb.#handle_promotion_action_line_items with existing promotion action line items updates existing promotion action line items.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","Spree::Promotion::Actions::CreateLineItems at ./spec/models/spree/promotion/actions/create_line_items_spec.rb.#handle_promotion_action_line_items with items marked for destruction removes items marked for destruction.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3:1\"}}","Spree::Promotion::Actions::CreateLineItems at ./spec/models/spree/promotion/actions/create_line_items_spec.rb.#item_available? returns false if the item is out of stock.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","Spree::Promotion::Actions::CreateLineItems at ./spec/models/spree/promotion/actions/create_line_items_spec.rb.#item_available? returns true if the item is in stock.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","Spree::Promotion::Actions::CreateLineItems at ./spec/models/spree/promotion/actions/create_line_items_spec.rb.#perform order is eligible adds line items to order with correct variant and quantity.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","Spree::Promotion::Actions::CreateLineItems at ./spec/models/spree/promotion/actions/create_line_items_spec.rb.#perform order is eligible doesn't add if the quantity is greater.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3\"}}","Spree::Promotion::Actions::CreateLineItems at ./spec/models/spree/promotion/actions/create_line_items_spec.rb.#perform order is eligible doesn't try to add an item if it's out of stock.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:4\"}}","Spree::Promotion::Actions::CreateLineItems at ./spec/models/spree/promotion/actions/create_line_items_spec.rb.#perform order is eligible only adds the delta of quantity to an order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2\"}}","Spree::Promotion::Actions::FreeShipping at ./spec/models/spree/promotion/actions/free_shipping_spec.rb.#perform creates a discount with correct negative amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","Spree::Promotion::Actions::FreeShipping at ./spec/models/spree/promotion/actions/free_shipping_spec.rb.#perform does not create a discount when order already has one from this promotion.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","Spree::Promotion::Actions::FreeShipping at ./spec/models/spree/promotion/actions/free_shipping_spec.rb.#perform when shipping methods are configured to be free can create adjustment with amount equal to 0.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:1\"}}","Spree::Promotion::Actions::FreeShipping at ./spec/models/spree/promotion/actions/free_shipping_spec.rb.behaves like an adjustment source #destroy when order incomplete example at ./spec/support/concerns/adjustment_source.rb:21.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","Spree::Promotion::Actions::FreeShipping at ./spec/models/spree/promotion/actions/free_shipping_spec.rb.behaves like an adjustment source #destroy when order is complete example at ./spec/support/concerns/adjustment_source.rb:27.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","Spree::Promotion::Actions::FreeShipping at ./spec/models/spree/promotion/actions/free_shipping_spec.rb.behaves like an adjustment source #destroy when order is complete example at ./spec/support/concerns/adjustment_source.rb:28.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:2\"}}","Spree::Promotion::Rules::Country at ./spec/models/spree/promotion/rules/country_spec.rb.preferred country is not set is eligible for default country.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","Spree::Promotion::Rules::Country at ./spec/models/spree/promotion/rules/country_spec.rb.preferred country is not set is not eligible for incorrect country.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","Spree::Promotion::Rules::Country at ./spec/models/spree/promotion/rules/country_spec.rb.preferred country_id is set is eligible for correct country.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::Promotion::Rules::Country at ./spec/models/spree/promotion/rules/country_spec.rb.preferred country_id is set is not eligible for incorrect country.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","Spree::Promotion::Rules::Country at ./spec/models/spree/promotion/rules/country_spec.rb.preferred country_iso is set is eligible for correct country.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","Spree::Promotion::Rules::Country at ./spec/models/spree/promotion/rules/country_spec.rb.preferred country_iso is set is not eligible for incorrect country.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","Spree::Promotion::Rules::Currency at ./spec/models/spree/promotion/rules/currency_spec.rb.#applicable? when promotable is an order example at ./spec/models/spree/promotion/rules/currency_spec.rb:31.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","Spree::Promotion::Rules::Currency at ./spec/models/spree/promotion/rules/currency_spec.rb.#applicable? when promotable is not an order example at ./spec/models/spree/promotion/rules/currency_spec.rb:36.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","Spree::Promotion::Rules::Currency at ./spec/models/spree/promotion/rules/currency_spec.rb.preferred currency is set is eligible for correct currency.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::Promotion::Rules::Currency at ./spec/models/spree/promotion/rules/currency_spec.rb.preferred currency is set is not eligible for incorrect currency.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","Spree::Promotion::Rules::CustomerGroup at ./spec/models/spree/promotion/rules/customer_group_spec.rb.#applicable? returns false for non-orders.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","Spree::Promotion::Rules::CustomerGroup at ./spec/models/spree/promotion/rules/customer_group_spec.rb.#applicable? returns true for orders.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::Promotion::Rules::CustomerGroup at ./spec/models/spree/promotion/rules/customer_group_spec.rb.#eligible? when customer_group_ids contains strings is eligible.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:6:1\"}}","Spree::Promotion::Rules::CustomerGroup at ./spec/models/spree/promotion/rules/customer_group_spec.rb.#eligible? when no customer groups are configured is not eligible.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","Spree::Promotion::Rules::CustomerGroup at ./spec/models/spree/promotion/rules/customer_group_spec.rb.#eligible? when order has no user is not eligible.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","Spree::Promotion::Rules::CustomerGroup at ./spec/models/spree/promotion/rules/customer_group_spec.rb.#eligible? when user is in one of multiple configured customer groups is eligible.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:5:1\"}}","Spree::Promotion::Rules::CustomerGroup at ./spec/models/spree/promotion/rules/customer_group_spec.rb.#eligible? when user is in the customer group is eligible.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:1\"}}","Spree::Promotion::Rules::CustomerGroup at ./spec/models/spree/promotion/rules/customer_group_spec.rb.#eligible? when user is not in any configured customer group is not eligible.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:4:1\"}}","Spree::Promotion::Rules::FirstOrder at ./spec/models/spree/promotion/rules/first_order_spec.rb.first order for a guest user with another order example at ./spec/models/spree/promotion/rules/first_order_spec.rb:70.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:2:1\"}}","Spree::Promotion::Rules::FirstOrder at ./spec/models/spree/promotion/rules/first_order_spec.rb.first order for a guest user with another order sets an error message.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:2:2\"}}","Spree::Promotion::Rules::FirstOrder at ./spec/models/spree/promotion/rules/first_order_spec.rb.first order for a guest user with no other orders example at ./spec/models/spree/promotion/rules/first_order_spec.rb:64.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1:1\"}}","Spree::Promotion::Rules::FirstOrder at ./spec/models/spree/promotion/rules/first_order_spec.rb.first order for a signed user with completed orders is eligible when checked against first completed order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:2:1\"}}","Spree::Promotion::Rules::FirstOrder at ./spec/models/spree/promotion/rules/first_order_spec.rb.first order for a signed user with completed orders with another order example at ./spec/models/spree/promotion/rules/first_order_spec.rb:47.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:2:2:1\"}}","Spree::Promotion::Rules::FirstOrder at ./spec/models/spree/promotion/rules/first_order_spec.rb.first order for a signed user with completed orders with another order sets an error message.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:2:2:2\"}}","Spree::Promotion::Rules::FirstOrder at ./spec/models/spree/promotion/rules/first_order_spec.rb.first order for a signed user with no completed orders example at ./spec/models/spree/promotion/rules/first_order_spec.rb:25.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1:1\"}}","Spree::Promotion::Rules::FirstOrder at ./spec/models/spree/promotion/rules/first_order_spec.rb.first order for a signed user with no completed orders is eligible when user passed in payload data.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1:2\"}}","Spree::Promotion::Rules::FirstOrder at ./spec/models/spree/promotion/rules/first_order_spec.rb.without a user or email example at ./spec/models/spree/promotion/rules/first_order_spec.rb:11.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::Promotion::Rules::FirstOrder at ./spec/models/spree/promotion/rules/first_order_spec.rb.without a user or email sets an error message.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","Spree::Promotion::Rules::ItemTotal at ./spec/models/spree/promotion/rules/item_total_spec.rb.preferred operator set to gt and preferred operator_max set to lte and item total is equal to the preferred maximum amount is not eligible.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","Spree::Promotion::Rules::ItemTotal at ./spec/models/spree/promotion/rules/item_total_spec.rb.preferred operator set to gt and preferred operator_max set to lte and item total is higher than the preferred maximum amount is not eligible.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:1\"}}","Spree::Promotion::Rules::ItemTotal at ./spec/models/spree/promotion/rules/item_total_spec.rb.preferred operator set to gt and preferred operator_max set to lte and item total is higher than the preferred maximum amount set an error message.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:2\"}}","Spree::Promotion::Rules::ItemTotal at ./spec/models/spree/promotion/rules/item_total_spec.rb.preferred operator set to gt and preferred operator_max set to lte and item total is lower than preferred maximum amount and item total is equal to the preferred minimum amount is not eligible.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:2:1\"}}","Spree::Promotion::Rules::ItemTotal at ./spec/models/spree/promotion/rules/item_total_spec.rb.preferred operator set to gt and preferred operator_max set to lte and item total is lower than preferred maximum amount and item total is equal to the preferred minimum amount set an error message.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:2:2\"}}","Spree::Promotion::Rules::ItemTotal at ./spec/models/spree/promotion/rules/item_total_spec.rb.preferred operator set to gt and preferred operator_max set to lte and item total is lower than preferred maximum amount and item total is higher than preferred minimum amount is eligible.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1:1\"}}","Spree::Promotion::Rules::ItemTotal at ./spec/models/spree/promotion/rules/item_total_spec.rb.preferred operator set to gt and preferred operator_max set to lte and item total is lower than preferred maximum amount and item total is lower to the preferred minimum amount is not eligible.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:3:1\"}}","Spree::Promotion::Rules::ItemTotal at ./spec/models/spree/promotion/rules/item_total_spec.rb.preferred operator set to gt and preferred operator_max set to lte and item total is lower than preferred maximum amount and item total is lower to the preferred minimum amount set an error message.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:3:2\"}}","Spree::Promotion::Rules::ItemTotal at ./spec/models/spree/promotion/rules/item_total_spec.rb.preferred operator set to gte and preferred operator_max set to lt and item total is equal to the preferred maximum amount is not eligible.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","Spree::Promotion::Rules::ItemTotal at ./spec/models/spree/promotion/rules/item_total_spec.rb.preferred operator set to gte and preferred operator_max set to lt and item total is equal to the preferred maximum amount set an error message.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:2\"}}","Spree::Promotion::Rules::ItemTotal at ./spec/models/spree/promotion/rules/item_total_spec.rb.preferred operator set to gte and preferred operator_max set to lt and item total is higher than the preferred maximum amount is not eligible.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3:1\"}}","Spree::Promotion::Rules::ItemTotal at ./spec/models/spree/promotion/rules/item_total_spec.rb.preferred operator set to gte and preferred operator_max set to lt and item total is higher than the preferred maximum amount set an error message.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3:2\"}}","Spree::Promotion::Rules::ItemTotal at ./spec/models/spree/promotion/rules/item_total_spec.rb.preferred operator set to gte and preferred operator_max set to lt and item total is lower than preferred maximum amount and item total is equal to the preferred minimum amount is not eligible.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:2:1\"}}","Spree::Promotion::Rules::ItemTotal at ./spec/models/spree/promotion/rules/item_total_spec.rb.preferred operator set to gte and preferred operator_max set to lt and item total is lower than preferred maximum amount and item total is higher than preferred minimum amount is eligible.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1:1\"}}","Spree::Promotion::Rules::ItemTotal at ./spec/models/spree/promotion/rules/item_total_spec.rb.preferred operator set to gte and preferred operator_max set to lt and item total is lower than preferred maximum amount and item total is lower to the preferred minimum amount is not eligible.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:3:1\"}}","Spree::Promotion::Rules::ItemTotal at ./spec/models/spree/promotion/rules/item_total_spec.rb.preferred operator set to gte and preferred operator_max set to lt and item total is lower than preferred maximum amount and item total is lower to the preferred minimum amount set an error message.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:3:2\"}}","Spree::Promotion::Rules::ItemTotal at ./spec/models/spree/promotion/rules/item_total_spec.rb.preferred operator set to gte and preferred operator_max set to lte and item total is equal to the preferred maximum amount is not eligible.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1\"}}","Spree::Promotion::Rules::ItemTotal at ./spec/models/spree/promotion/rules/item_total_spec.rb.preferred operator set to gte and preferred operator_max set to lte and item total is higher than the preferred maximum amount is not eligible.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3:1\"}}","Spree::Promotion::Rules::ItemTotal at ./spec/models/spree/promotion/rules/item_total_spec.rb.preferred operator set to gte and preferred operator_max set to lte and item total is higher than the preferred maximum amount set an error message.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3:2\"}}","Spree::Promotion::Rules::ItemTotal at ./spec/models/spree/promotion/rules/item_total_spec.rb.preferred operator set to gte and preferred operator_max set to lte and item total is lower than preferred maximum amount and item total is equal to the preferred minimum amount is not eligible.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:2:1\"}}","Spree::Promotion::Rules::ItemTotal at ./spec/models/spree/promotion/rules/item_total_spec.rb.preferred operator set to gte and preferred operator_max set to lte and item total is lower than preferred maximum amount and item total is higher than preferred minimum amount is eligible.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1:1\"}}","Spree::Promotion::Rules::ItemTotal at ./spec/models/spree/promotion/rules/item_total_spec.rb.preferred operator set to gte and preferred operator_max set to lte and item total is lower than preferred maximum amount and item total is lower to the preferred minimum amount is not eligible.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:3:1\"}}","Spree::Promotion::Rules::ItemTotal at ./spec/models/spree/promotion/rules/item_total_spec.rb.preferred operator set to gte and preferred operator_max set to lte and item total is lower than preferred maximum amount and item total is lower to the preferred minimum amount set an error message.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:3:2\"}}","Spree::Promotion::Rules::ItemTotal at ./spec/models/spree/promotion/rules/item_total_spec.rb.preferred operator_min set to gt and preferred operator_max set to lt and item total is equal to the preferred maximum amount is not eligible.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","Spree::Promotion::Rules::ItemTotal at ./spec/models/spree/promotion/rules/item_total_spec.rb.preferred operator_min set to gt and preferred operator_max set to lt and item total is equal to the preferred maximum amount set an error message.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2\"}}","Spree::Promotion::Rules::ItemTotal at ./spec/models/spree/promotion/rules/item_total_spec.rb.preferred operator_min set to gt and preferred operator_max set to lt and item total is higher than the preferred maximum amount is not eligible.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","Spree::Promotion::Rules::ItemTotal at ./spec/models/spree/promotion/rules/item_total_spec.rb.preferred operator_min set to gt and preferred operator_max set to lt and item total is higher than the preferred maximum amount set an error message.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:2\"}}","Spree::Promotion::Rules::ItemTotal at ./spec/models/spree/promotion/rules/item_total_spec.rb.preferred operator_min set to gt and preferred operator_max set to lt and item total is lower than preferred maximum amount and item total is equal to the preferred minimum amount is not eligible.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","Spree::Promotion::Rules::ItemTotal at ./spec/models/spree/promotion/rules/item_total_spec.rb.preferred operator_min set to gt and preferred operator_max set to lt and item total is lower than preferred maximum amount and item total is equal to the preferred minimum amount set an error message.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:2\"}}","Spree::Promotion::Rules::ItemTotal at ./spec/models/spree/promotion/rules/item_total_spec.rb.preferred operator_min set to gt and preferred operator_max set to lt and item total is lower than preferred maximum amount and item total is higher than preferred minimum amount is eligible.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","Spree::Promotion::Rules::ItemTotal at ./spec/models/spree/promotion/rules/item_total_spec.rb.preferred operator_min set to gt and preferred operator_max set to lt and item total is lower than preferred maximum amount and item total is lower to the preferred minimum amount is not eligible.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:1\"}}","Spree::Promotion::Rules::ItemTotal at ./spec/models/spree/promotion/rules/item_total_spec.rb.preferred operator_min set to gt and preferred operator_max set to lt and item total is lower than preferred maximum amount and item total is lower to the preferred minimum amount set an error message.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:2\"}}","Spree::Promotion::Rules::ItemTotal at ./spec/models/spree/promotion/rules/item_total_spec.rb.when preferred amount max is not set and item total is equal to the preferred minimum amount is not eligible.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1\"}}","Spree::Promotion::Rules::ItemTotal at ./spec/models/spree/promotion/rules/item_total_spec.rb.when preferred amount max is not set and item total is equal to the preferred minimum amount set an error message.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:2\"}}","Spree::Promotion::Rules::ItemTotal at ./spec/models/spree/promotion/rules/item_total_spec.rb.when preferred amount max is not set and item total is higher than preferred minimum amount is eligible.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:1\"}}","Spree::Promotion::Rules::ItemTotal at ./spec/models/spree/promotion/rules/item_total_spec.rb.when preferred amount max is not set and item total is lower than preferred minimum amount is not eligible.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3:1\"}}","Spree::Promotion::Rules::ItemTotal at ./spec/models/spree/promotion/rules/item_total_spec.rb.when preferred amount max is not set and item total is lower than preferred minimum amount set an error message.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3:2\"}}","Spree::Promotion::Rules::OneUsePerUser at ./spec/models/spree/promotion/rules/one_use_per_user_spec.rb.#eligible?(order) when the order is assigned to a user when the user has not used this promotion before example at ./spec/models/spree/promotion/rules/one_use_per_user_spec.rb:32.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","Spree::Promotion::Rules::OneUsePerUser at ./spec/models/spree/promotion/rules/one_use_per_user_spec.rb.#eligible?(order) when the order is assigned to a user when the user has used this promotion before example at ./spec/models/spree/promotion/rules/one_use_per_user_spec.rb:23.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","Spree::Promotion::Rules::OneUsePerUser at ./spec/models/spree/promotion/rules/one_use_per_user_spec.rb.#eligible?(order) when the order is assigned to a user when the user has used this promotion before sets an error message.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:2\"}}","Spree::Promotion::Rules::OneUsePerUser at ./spec/models/spree/promotion/rules/one_use_per_user_spec.rb.#eligible?(order) when the order is not assigned to a user example at ./spec/models/spree/promotion/rules/one_use_per_user_spec.rb:39.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","Spree::Promotion::Rules::OneUsePerUser at ./spec/models/spree/promotion/rules/one_use_per_user_spec.rb.#eligible?(order) when the order is not assigned to a user sets an error message.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2\"}}","Spree::Promotion::Rules::OptionValue at ./spec/models/spree/promotion/rules/option_value_spec.rb.#actionable? when the line item has the correct product when all of the option values match example at ./spec/models/spree/promotion/rules/option_value_spec.rb:99.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1:1\"}}","Spree::Promotion::Rules::OptionValue at ./spec/models/spree/promotion/rules/option_value_spec.rb.#actionable? when the line item has the correct product when not all of the option values match example at ./spec/models/spree/promotion/rules/option_value_spec.rb:110.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:2:1\"}}","Spree::Promotion::Rules::OptionValue at ./spec/models/spree/promotion/rules/option_value_spec.rb.#actionable? when the line item's product doesn't match example at ./spec/models/spree/promotion/rules/option_value_spec.rb:122.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1\"}}","Spree::Promotion::Rules::OptionValue at ./spec/models/spree/promotion/rules/option_value_spec.rb.#applicable? when promotable is an order example at ./spec/models/spree/promotion/rules/option_value_spec.rb:26.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","Spree::Promotion::Rules::OptionValue at ./spec/models/spree/promotion/rules/option_value_spec.rb.#applicable? when promotable is not an order example at ./spec/models/spree/promotion/rules/option_value_spec.rb:32.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","Spree::Promotion::Rules::OptionValue at ./spec/models/spree/promotion/rules/option_value_spec.rb.#eligible? when there are any applicable line items example at ./spec/models/spree/promotion/rules/option_value_spec.rb:48.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","Spree::Promotion::Rules::OptionValue at ./spec/models/spree/promotion/rules/option_value_spec.rb.#eligible? when there are no applicable line items example at ./spec/models/spree/promotion/rules/option_value_spec.rb:56.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","Spree::Promotion::Rules::OptionValue at ./spec/models/spree/promotion/rules/option_value_spec.rb.setting eligible values parses ids.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::Promotion::Rules::Product at ./spec/models/spree/promotion/rules/product_spec.rb.#actionable? with 'all' match policy for product in rule example at ./spec/models/spree/promotion/rules/product_spec.rb:128.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1:1\"}}","Spree::Promotion::Rules::Product at ./spec/models/spree/promotion/rules/product_spec.rb.#actionable? with 'all' match policy for product not in rule example at ./spec/models/spree/promotion/rules/product_spec.rb:134.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:2:1\"}}","Spree::Promotion::Rules::Product at ./spec/models/spree/promotion/rules/product_spec.rb.#actionable? with 'any' match policy for product in rule example at ./spec/models/spree/promotion/rules/product_spec.rb:112.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1:1\"}}","Spree::Promotion::Rules::Product at ./spec/models/spree/promotion/rules/product_spec.rb.#actionable? with 'any' match policy for product not in rule example at ./spec/models/spree/promotion/rules/product_spec.rb:118.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:2:1\"}}","Spree::Promotion::Rules::Product at ./spec/models/spree/promotion/rules/product_spec.rb.#actionable? with 'none' match policy for product in rule example at ./spec/models/spree/promotion/rules/product_spec.rb:144.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:1:1\"}}","Spree::Promotion::Rules::Product at ./spec/models/spree/promotion/rules/product_spec.rb.#actionable? with 'none' match policy for product not in rule example at ./spec/models/spree/promotion/rules/product_spec.rb:150.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:2:1\"}}","Spree::Promotion::Rules::Product at ./spec/models/spree/promotion/rules/product_spec.rb.#add_products adds the products to the rule.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","Spree::Promotion::Rules::Product at ./spec/models/spree/promotion/rules/product_spec.rb.#add_products does not remove the products when nil is passed.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3\"}}","Spree::Promotion::Rules::Product at ./spec/models/spree/promotion/rules/product_spec.rb.#add_products removes the products from the rule.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","Spree::Promotion::Rules::Product at ./spec/models/spree/promotion/rules/product_spec.rb.#add_products touches the record to invalidate cache.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4\"}}","Spree::Promotion::Rules::Product at ./spec/models/spree/promotion/rules/product_spec.rb.#eligible?(order) is eligible if there are no products.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::Promotion::Rules::Product at ./spec/models/spree/promotion/rules/product_spec.rb.#eligible?(order) with 'all' match policy is eligible if all of the eligible products are ordered.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","Spree::Promotion::Rules::Product at ./spec/models/spree/promotion/rules/product_spec.rb.#eligible?(order) with 'all' match policy when any of the eligible products is not ordered example at ./spec/models/spree/promotion/rules/product_spec.rb:58.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:2:1\"}}","Spree::Promotion::Rules::Product at ./spec/models/spree/promotion/rules/product_spec.rb.#eligible?(order) with 'all' match policy when any of the eligible products is not ordered sets an error message.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:2:2\"}}","Spree::Promotion::Rules::Product at ./spec/models/spree/promotion/rules/product_spec.rb.#eligible?(order) with 'any' match policy is eligible if any of the products is in eligible products.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","Spree::Promotion::Rules::Product at ./spec/models/spree/promotion/rules/product_spec.rb.#eligible?(order) with 'any' match policy when none of the products are eligible products example at ./spec/models/spree/promotion/rules/product_spec.rb:34.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:1\"}}","Spree::Promotion::Rules::Product at ./spec/models/spree/promotion/rules/product_spec.rb.#eligible?(order) with 'any' match policy when none of the products are eligible products sets an error message.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:2\"}}","Spree::Promotion::Rules::Product at ./spec/models/spree/promotion/rules/product_spec.rb.#eligible?(order) with 'none' match policy is eligible if none of the order's products are in eligible products.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1\"}}","Spree::Promotion::Rules::Product at ./spec/models/spree/promotion/rules/product_spec.rb.#eligible?(order) with 'none' match policy when any of the order's products are in eligible products example at ./spec/models/spree/promotion/rules/product_spec.rb:82.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:2:1\"}}","Spree::Promotion::Rules::Product at ./spec/models/spree/promotion/rules/product_spec.rb.#eligible?(order) with 'none' match policy when any of the order's products are in eligible products sets an error message.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:2:2\"}}","Spree::Promotion::Rules::Taxon at ./spec/models/spree/promotion/rules/taxon_spec.rb.#add_taxons adds the taxons to the rule.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","Spree::Promotion::Rules::Taxon at ./spec/models/spree/promotion/rules/taxon_spec.rb.#add_taxons does not remove the taxons when nil is passed.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3\"}}","Spree::Promotion::Rules::Taxon at ./spec/models/spree/promotion/rules/taxon_spec.rb.#add_taxons removes the taxons from the rule.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","Spree::Promotion::Rules::Taxon at ./spec/models/spree/promotion/rules/taxon_spec.rb.#eligible?(order) with all match policy is eligible order has all preferred taxons.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","Spree::Promotion::Rules::Taxon at ./spec/models/spree/promotion/rules/taxon_spec.rb.#eligible?(order) with all match policy when a product has a taxon child of a taxon rule example at ./spec/models/spree/promotion/rules/taxon_spec.rb:99.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:3:1\"}}","Spree::Promotion::Rules::Taxon at ./spec/models/spree/promotion/rules/taxon_spec.rb.#eligible?(order) with all match policy when order does not have all preferred taxons example at ./spec/models/spree/promotion/rules/taxon_spec.rb:80.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:1\"}}","Spree::Promotion::Rules::Taxon at ./spec/models/spree/promotion/rules/taxon_spec.rb.#eligible?(order) with all match policy when order does not have all preferred taxons sets an error message.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:2\"}}","Spree::Promotion::Rules::Taxon at ./spec/models/spree/promotion/rules/taxon_spec.rb.#eligible?(order) with any match policy is eligible if order does has any preferred taxon.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","Spree::Promotion::Rules::Taxon at ./spec/models/spree/promotion/rules/taxon_spec.rb.#eligible?(order) with any match policy when a product has a taxon child of a taxon rule example at ./spec/models/spree/promotion/rules/taxon_spec.rb:59.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:4:1\"}}","Spree::Promotion::Rules::Taxon at ./spec/models/spree/promotion/rules/taxon_spec.rb.#eligible?(order) with any match policy when order contains items from different taxons acts on a product within the eligible taxon.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","Spree::Promotion::Rules::Taxon at ./spec/models/spree/promotion/rules/taxon_spec.rb.#eligible?(order) with any match policy when order contains items from different taxons does not act on a product in another taxon.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:2\"}}","Spree::Promotion::Rules::Taxon at ./spec/models/spree/promotion/rules/taxon_spec.rb.#eligible?(order) with any match policy when order does not have any preferred taxon example at ./spec/models/spree/promotion/rules/taxon_spec.rb:44.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:1\"}}","Spree::Promotion::Rules::Taxon at ./spec/models/spree/promotion/rules/taxon_spec.rb.#eligible?(order) with any match policy when order does not have any preferred taxon sets an error message.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:2\"}}","Spree::Promotion::Rules::User at ./spec/models/spree/promotion/rules/user_spec.rb.#add_users adds users to the promotion rule.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","Spree::Promotion::Rules::User at ./spec/models/spree/promotion/rules/user_spec.rb.#add_users does not remove the users when nil is passed.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3\"}}","Spree::Promotion::Rules::User at ./spec/models/spree/promotion/rules/user_spec.rb.#add_users removes users from the promotion rule.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","Spree::Promotion::Rules::User at ./spec/models/spree/promotion/rules/user_spec.rb.#add_users touches the record to invalidate cache.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:4\"}}","Spree::Promotion::Rules::User at ./spec/models/spree/promotion/rules/user_spec.rb.#eligible? can assign to user_ids.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","Spree::Promotion::Rules::User at ./spec/models/spree/promotion/rules/user_spec.rb.#eligible? is not eligible if users are not provided.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::Promotion::Rules::User at ./spec/models/spree/promotion/rules/user_spec.rb.#eligible? when users does not include user placing the order is not eligible if user placing the order is not listed.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","Spree::Promotion::Rules::User at ./spec/models/spree/promotion/rules/user_spec.rb.#eligible? when users include user placing the order is eligible if users include user placing the order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","Spree::Promotion::Rules::UserLoggedIn at ./spec/models/spree/promotion/rules/user_logged_in_spec.rb.#eligible?(order) is eligible if order has an associated user.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::Promotion::Rules::UserLoggedIn at ./spec/models/spree/promotion/rules/user_logged_in_spec.rb.#eligible?(order) when user is not logged in example at ./spec/models/spree/promotion/rules/user_logged_in_spec.rb:19.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","Spree::Promotion::Rules::UserLoggedIn at ./spec/models/spree/promotion/rules/user_logged_in_spec.rb.#eligible?(order) when user is not logged in sets an error message.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2\"}}","Spree::PromotionAction at ./spec/models/spree/promotion_action_spec.rb.forces developer to implement 'perform' method.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","Spree::PromotionCategory at ./spec/models/spree/promotion_category_spec.rb.validation when all required attributes are specified example at ./spec/models/spree/promotion_category_spec.rb:10.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","Spree::PromotionCategory at ./spec/models/spree/promotion_category_spec.rb.validation when name is missing example at ./spec/models/spree/promotion_category_spec.rb:16.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","Spree::PromotionHandler::Cart at ./spec/models/spree/promotion_handler/cart_spec.rb.activates in LineItem level promotion has item total rule creates the adjustment.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","Spree::PromotionHandler::Cart at ./spec/models/spree/promotion_handler/cart_spec.rb.activates in LineItem level promotion includes item involved creates the adjustment.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","Spree::PromotionHandler::Cart at ./spec/models/spree/promotion_handler/cart_spec.rb.activates in LineItem level promotion with no rules creates the adjustment.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","Spree::PromotionHandler::Cart at ./spec/models/spree/promotion_handler/cart_spec.rb.activates in Order level promotion has item total rule creates the adjustment.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","Spree::PromotionHandler::Cart at ./spec/models/spree/promotion_handler/cart_spec.rb.activates in Order level promotion with no rules creates the adjustment.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","Spree::PromotionHandler::Cart at ./spec/models/spree/promotion_handler/cart_spec.rb.activates promotions associated with the order creates the adjustment.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","Spree::PromotionHandler::Coupon at ./spec/models/spree/promotion_handler/coupon_spec.rb.coupon code promotion doesnt exist doesnt fetch any promotion.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","Spree::PromotionHandler::Coupon at ./spec/models/spree/promotion_handler/coupon_spec.rb.coupon code promotion doesnt exist with no actions defined populates error message.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","Spree::PromotionHandler::Coupon at ./spec/models/spree/promotion_handler/coupon_spec.rb.existing coupon code promotion fetches with given code.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","Spree::PromotionHandler::Coupon at ./spec/models/spree/promotion_handler/coupon_spec.rb.existing coupon code promotion for an order with taxable line items and multiple quantity per line item successfully applies the promo.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:5:3:1\"}}","Spree::PromotionHandler::Coupon at ./spec/models/spree/promotion_handler/coupon_spec.rb.existing coupon code promotion for an order with taxable line items and the product price is greater than promo discount successfully applies the promo.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:5:2:1\"}}","Spree::PromotionHandler::Coupon at ./spec/models/spree/promotion_handler/coupon_spec.rb.existing coupon code promotion for an order with taxable line items and the product price is less than promo discount successfully applies the promo.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:5:1:1\"}}","Spree::PromotionHandler::Coupon at ./spec/models/spree/promotion_handler/coupon_spec.rb.existing coupon code promotion with a CreateLineItems action successfully activates promo.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:6:1\"}}","Spree::PromotionHandler::Coupon at ./spec/models/spree/promotion_handler/coupon_spec.rb.existing coupon code promotion with a free-shipping adjustment action right coupon code given coupon already applied to the order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3:1:2\"}}","Spree::PromotionHandler::Coupon at ./spec/models/spree/promotion_handler/coupon_spec.rb.existing coupon code promotion with a free-shipping adjustment action right coupon code given successfully activates promo.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3:1:1\"}}","Spree::PromotionHandler::Coupon at ./spec/models/spree/promotion_handler/coupon_spec.rb.existing coupon code promotion with a per-item adjustment action coexists with a non coupon code promo successfully activates promo.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:2:1\"}}","Spree::PromotionHandler::Coupon at ./spec/models/spree/promotion_handler/coupon_spec.rb.existing coupon code promotion with a per-item adjustment action right coupon given with correct coupon code casing calls update_with_updater!.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1:1:2\"}}","Spree::PromotionHandler::Coupon at ./spec/models/spree/promotion_handler/coupon_spec.rb.existing coupon code promotion with a per-item adjustment action right coupon given with correct coupon code casing coupon already applied to the order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1:1:3\"}}","Spree::PromotionHandler::Coupon at ./spec/models/spree/promotion_handler/coupon_spec.rb.existing coupon code promotion with a per-item adjustment action right coupon given with correct coupon code casing successfully activates promo.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1:1:1\"}}","Spree::PromotionHandler::Coupon at ./spec/models/spree/promotion_handler/coupon_spec.rb.existing coupon code promotion with a per-item adjustment action right coupon given with incorrect coupon code casing successfully activates promo.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1:2:1\"}}","Spree::PromotionHandler::Coupon at ./spec/models/spree/promotion_handler/coupon_spec.rb.existing coupon code promotion with a whole-order adjustment action right coupon given coupon already applied to the order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:4:1:2\"}}","Spree::PromotionHandler::Coupon at ./spec/models/spree/promotion_handler/coupon_spec.rb.existing coupon code promotion with a whole-order adjustment action right coupon given coupon code hit max usage.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:4:1:4\"}}","Spree::PromotionHandler::Coupon at ./spec/models/spree/promotion_handler/coupon_spec.rb.existing coupon code promotion with a whole-order adjustment action right coupon given coupon fails to activate.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:4:1:3\"}}","Spree::PromotionHandler::Coupon at ./spec/models/spree/promotion_handler/coupon_spec.rb.existing coupon code promotion with a whole-order adjustment action right coupon given successfully activates promo.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:4:1:1\"}}","Spree::PromotionHandler::Coupon at ./spec/models/spree/promotion_handler/coupon_spec.rb.existing coupon code promotion with a whole-order adjustment action right coupon given when the a new coupon is less good notifies of better deal.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:4:1:5:1\"}}","Spree::PromotionHandler::Coupon at ./spec/models/spree/promotion_handler/coupon_spec.rb.number of usages for one common promotion code hits max usage.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1:1\"}}","Spree::PromotionHandler::Coupon at ./spec/models/spree/promotion_handler/coupon_spec.rb.number of usages for one-time unique promotion codes behaves like allows to use coupon code one time only example at ./spec/models/spree/promotion_handler/coupon_spec.rb:442.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2:1:1\"}}","Spree::PromotionHandler::Coupon at ./spec/models/spree/promotion_handler/coupon_spec.rb.number of usages for one-time unique promotion codes behaves like allows to use coupon code one time only example at ./spec/models/spree/promotion_handler/coupon_spec.rb:442.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2:2:1\"}}","Spree::PromotionHandler::Coupon at ./spec/models/spree/promotion_handler/coupon_spec.rb.number of usages for one-time unique promotion codes promotion can be used as many times as it has coupon codes.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2:3\"}}","Spree::PromotionHandler::Coupon at ./spec/models/spree/promotion_handler/coupon_spec.rb.returns self in apply.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","Spree::PromotionHandler::Coupon at ./spec/models/spree/promotion_handler/coupon_spec.rb.status messages #set_error_code has error message.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:2\"}}","Spree::PromotionHandler::Coupon at ./spec/models/spree/promotion_handler/coupon_spec.rb.status messages #set_error_code has status_code.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","Spree::PromotionHandler::Coupon at ./spec/models/spree/promotion_handler/coupon_spec.rb.status messages #set_success_code has status_code.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","Spree::PromotionHandler::Coupon at ./spec/models/spree/promotion_handler/coupon_spec.rb.status messages #set_success_code has success message.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:2\"}}","Spree::PromotionHandler::Coupon at ./spec/models/spree/promotion_handler/coupon_spec.rb.with coupon codes valid coupon #remove removes the promotion.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:4:1\"}}","Spree::PromotionHandler::Coupon at ./spec/models/spree/promotion_handler/coupon_spec.rb.with coupon codes valid coupon #remove touches the promotion.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:4:2\"}}","Spree::PromotionHandler::Coupon at ./spec/models/spree/promotion_handler/coupon_spec.rb.with coupon codes valid coupon coupon already applied to the order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:2\"}}","Spree::PromotionHandler::Coupon at ./spec/models/spree/promotion_handler/coupon_spec.rb.with coupon codes valid coupon successfully activates promo.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:1\"}}","Spree::PromotionHandler::Coupon at ./spec/models/spree/promotion_handler/coupon_spec.rb.with coupon codes valid coupon with used coupon code does not activate promo.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:3:1\"}}","Spree::PromotionHandler::Coupon at ./spec/models/spree/promotion_handler/coupon_with_gift_card_spec.rb.#remove when gift card is applied removes gift card.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","Spree::PromotionHandler::Coupon at ./spec/models/spree/promotion_handler/coupon_with_gift_card_spec.rb.for a gift card apply when gift card is already redeemed returns error code.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:4:1\"}}","Spree::PromotionHandler::Coupon at ./spec/models/spree/promotion_handler/coupon_with_gift_card_spec.rb.for a gift card apply when gift card is expired returns error code.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:1\"}}","Spree::PromotionHandler::Coupon at ./spec/models/spree/promotion_handler/coupon_with_gift_card_spec.rb.for a gift card apply when gift card is not applied applies gift card.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","Spree::PromotionHandler::Coupon at ./spec/models/spree/promotion_handler/coupon_with_gift_card_spec.rb.for a gift card apply when the gift card is applied to another order doesn't apply the gift card to a new order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","Spree::PromotionHandler::FreeShipping at ./spec/models/spree/promotion_handler/free_shipping_spec.rb.activates in Shipment level creates the adjustment.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::PromotionHandler::FreeShipping at ./spec/models/spree/promotion_handler/free_shipping_spec.rb.if promo has a code does adjust the shipment when applied to order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","Spree::PromotionHandler::FreeShipping at ./spec/models/spree/promotion_handler/free_shipping_spec.rb.if promo has a code does not adjust the shipment when not applied to order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","Spree::PromotionHandler::FreeShipping at ./spec/models/spree/promotion_handler/free_shipping_spec.rb.if promo has a path does not adjust the shipment.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","Spree::PromotionHandler::FreeShipping at ./spec/models/spree/promotion_handler/free_shipping_spec.rb.if promo has multiple codes does adjust the shipment when applied to order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","Spree::PromotionHandler::FreeShipping at ./spec/models/spree/promotion_handler/free_shipping_spec.rb.if promo has multiple codes does not adjust the shipment when not applied to order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","Spree::PromotionHandler::Page at ./spec/models/spree/promotion_handler/page_spec.rb.activates at the right path.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","Spree::PromotionHandler::Page at ./spec/models/spree/promotion_handler/page_spec.rb.does not activate at the wrong path.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3\"}}","Spree::PromotionHandler::Page at ./spec/models/spree/promotion_handler/page_spec.rb.when promotion is expired is not activated.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","Spree::PromotionHandler::PromotionDuplicator at ./spec/models/spree/promotion_handler/promotion_duplicator_spec.rb.#duplicate model associations - action's calculator assigns a new calculator to promotion action.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:2\"}}","Spree::PromotionHandler::PromotionDuplicator at ./spec/models/spree/promotion_handler/promotion_duplicator_spec.rb.#duplicate model associations - action's calculator copies promotion action's calculator.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1\"}}","Spree::PromotionHandler::PromotionDuplicator at ./spec/models/spree/promotion_handler/promotion_duplicator_spec.rb.#duplicate model associations - actions assigns a new promotion action to new promotion.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:4\"}}","Spree::PromotionHandler::PromotionDuplicator at ./spec/models/spree/promotion_handler/promotion_duplicator_spec.rb.#duplicate model associations - actions copies all promotion actions.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","Spree::PromotionHandler::PromotionDuplicator at ./spec/models/spree/promotion_handler/promotion_duplicator_spec.rb.#duplicate model associations - actions copies promotion stores.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:2\"}}","Spree::PromotionHandler::PromotionDuplicator at ./spec/models/spree/promotion_handler/promotion_duplicator_spec.rb.#duplicate model associations - actions promotion action's fields (except promotion_id) are the same.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:3\"}}","Spree::PromotionHandler::PromotionDuplicator at ./spec/models/spree/promotion_handler/promotion_duplicator_spec.rb.#duplicate model associations - rules assigns a new promotion rule to new promotion.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:3\"}}","Spree::PromotionHandler::PromotionDuplicator at ./spec/models/spree/promotion_handler/promotion_duplicator_spec.rb.#duplicate model associations - rules copies all promotion rules.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","Spree::PromotionHandler::PromotionDuplicator at ./spec/models/spree/promotion_handler/promotion_duplicator_spec.rb.#duplicate model associations - rules promotion rule's fields (except promotion_id) are the same.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2\"}}","Spree::PromotionHandler::PromotionDuplicator at ./spec/models/spree/promotion_handler/promotion_duplicator_spec.rb.#duplicate model fields returns a duplicate of a promotion with all the fields (except the path, name and code fields) the same.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2\"}}","Spree::PromotionHandler::PromotionDuplicator at ./spec/models/spree/promotion_handler/promotion_duplicator_spec.rb.#duplicate model fields returns a duplicate of a promotion with the path, name and code fields changed.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","Spree::PromotionRule at ./spec/models/spree/promotion_rule_spec.rb.forces developer to implement eligible? method.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","Spree::PromotionRule at ./spec/models/spree/promotion_rule_spec.rb.validates unique rules for a promotion.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2\"}}","Spree::Property at ./spec/models/spree/property_spec.rb.#after_touch callback touches the product.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1\"}}","Spree::Property at ./spec/models/spree/property_spec.rb.#after_update callback with DEPENDENCY_UPDATE_FIELDS touches the product.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1:1\"}}","Spree::Property at ./spec/models/spree/property_spec.rb.#after_update callback without DEPENDENCY_UPDATE_FIELDS does not touch the product.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:2:1\"}}","Spree::Property at ./spec/models/spree/property_spec.rb.#ensure_product_properties_have_filter_params filterable property example at ./spec/models/spree/property_spec.rb:147.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1:1\"}}","Spree::Property at ./spec/models/spree/property_spec.rb.#ensure_product_properties_have_filter_params filterable property example at ./spec/models/spree/property_spec.rb:148.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1:2\"}}","Spree::Property at ./spec/models/spree/property_spec.rb.#ensure_product_properties_have_filter_params not-filterable property example at ./spec/models/spree/property_spec.rb:152.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2:1\"}}","Spree::Property at ./spec/models/spree/property_spec.rb.#kind_to_metafield_type returns the correct metafield type.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1\"}}","Spree::Property at ./spec/models/spree/property_spec.rb.#kind_to_metafield_type when the property kind is long_text returns the correct metafield type.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:2:1\"}}","Spree::Property at ./spec/models/spree/property_spec.rb.#kind_to_metafield_type when the property kind is number returns the correct metafield type.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:3:1\"}}","Spree::Property at ./spec/models/spree/property_spec.rb.#kind_to_metafield_type when the property kind is rich_text returns the correct metafield type.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:4:1\"}}","Spree::Property at ./spec/models/spree/property_spec.rb.#uniq_values example at ./spec/models/spree/property_spec.rb:78.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","Spree::Property at ./spec/models/spree/property_spec.rb.#uniq_values when caching correctly returns uniq values.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:3:1\"}}","Spree::Property at ./spec/models/spree/property_spec.rb.#uniq_values when narrowing the scope of product properties example at ./spec/models/spree/property_spec.rb:94.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2:1\"}}","Spree::Property at ./spec/models/spree/property_spec.rb.behaves like metadata can query records by metadata properties.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:10\"}}","Spree::Property at ./spec/models/spree/property_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:10.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","Spree::Property at ./spec/models/spree/property_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:11.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","Spree::Property at ./spec/models/spree/property_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:4.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::Property at ./spec/models/spree/property_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:5.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","Spree::Property at ./spec/models/spree/property_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:7.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","Spree::Property at ./spec/models/spree/property_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:8.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","Spree::Property at ./spec/models/spree/property_spec.rb.behaves like metadata reads data as not symbolized keys.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8\"}}","Spree::Property at ./spec/models/spree/property_spec.rb.behaves like metadata reads data as symbolized keys.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7\"}}","Spree::Property at ./spec/models/spree/property_spec.rb.callbacks #normalize_name should parameterize the name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1\"}}","Spree::Property at ./spec/models/spree/property_spec.rb.scopes .available example at ./spec/models/spree/property_spec.rb:35.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","Spree::Property at ./spec/models/spree/property_spec.rb.scopes .available_on_back_end example at ./spec/models/spree/property_spec.rb:47.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3:1\"}}","Spree::Property at ./spec/models/spree/property_spec.rb.scopes .available_on_front_end example at ./spec/models/spree/property_spec.rb:41.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","Spree::Property at ./spec/models/spree/property_spec.rb.setting filter param example at ./spec/models/spree/property_spec.rb:66.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","Spree::Property at ./spec/models/spree/property_spec.rb.translations translates property fields.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","Spree::Prototype at ./spec/models/spree/prototype_spec.rb.behaves like metadata can query records by metadata properties.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:10\"}}","Spree::Prototype at ./spec/models/spree/prototype_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:10.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","Spree::Prototype at ./spec/models/spree/prototype_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:11.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","Spree::Prototype at ./spec/models/spree/prototype_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:4.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::Prototype at ./spec/models/spree/prototype_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:5.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","Spree::Prototype at ./spec/models/spree/prototype_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:7.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","Spree::Prototype at ./spec/models/spree/prototype_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:8.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","Spree::Prototype at ./spec/models/spree/prototype_spec.rb.behaves like metadata reads data as not symbolized keys.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8\"}}","Spree::Prototype at ./spec/models/spree/prototype_spec.rb.behaves like metadata reads data as symbolized keys.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7\"}}","Spree::Publishable at ./spec/models/concerns/spree/publishable_spec.rb.#event_payload with a serializer defined returns the serialized payload.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","Spree::Publishable at ./spec/models/concerns/spree/publishable_spec.rb.#event_payload with anonymous class returns nil for event_serializer_class.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:1\"}}","Spree::Publishable at ./spec/models/concerns/spree/publishable_spec.rb.#event_payload without a serializer defined includes example code in the error message.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:2\"}}","Spree::Publishable at ./spec/models/concerns/spree/publishable_spec.rb.#event_payload without a serializer defined raises MissingSerializerError with helpful message.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","Spree::Publishable at ./spec/models/concerns/spree/publishable_spec.rb.#event_prefix returns the model name element.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","Spree::Publishable at ./spec/models/concerns/spree/publishable_spec.rb.#publish_event allows custom payload.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","Spree::Publishable at ./spec/models/concerns/spree/publishable_spec.rb.#publish_event does not publish when events are disabled.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","Spree::Publishable at ./spec/models/concerns/spree/publishable_spec.rb.#publish_event publishes an event with the model payload.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::Publishable at ./spec/models/concerns/spree/publishable_spec.rb..event_prefix can be customized.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2\"}}","Spree::Publishable at ./spec/models/concerns/spree/publishable_spec.rb..event_prefix derives from model name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","Spree::Publishable at ./spec/models/concerns/spree/publishable_spec.rb..publishes_lifecycle_events enables lifecycle events.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","Spree::Publishable at ./spec/models/concerns/spree/publishable_spec.rb..publishes_lifecycle_events with except option excludes specified callbacks.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:4:1\"}}","Spree::Publishable at ./spec/models/concerns/spree/publishable_spec.rb..publishes_lifecycle_events with only option only registers specified callbacks.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3:1\"}}","Spree::Publishable at ./spec/models/concerns/spree/publishable_spec.rb..publishes_lifecycle_events with skip_lifecycle_events disables event publishing for the model.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:5:1\"}}","Spree::RansackConfiguration at ./spec/lib/spree/core/ransack_configuration_spec.rb.#add_association adds an association to a model.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","Spree::RansackConfiguration at ./spec/lib/spree/core/ransack_configuration_spec.rb.#add_association adds to existing associations when called multiple times.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","Spree::RansackConfiguration at ./spec/lib/spree/core/ransack_configuration_spec.rb.#add_association does not duplicate associations.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3\"}}","Spree::RansackConfiguration at ./spec/lib/spree/core/ransack_configuration_spec.rb.#add_attribute adds an attribute to a model.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::RansackConfiguration at ./spec/lib/spree/core/ransack_configuration_spec.rb.#add_attribute adds to existing attributes when called multiple times.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","Spree::RansackConfiguration at ./spec/lib/spree/core/ransack_configuration_spec.rb.#add_attribute converts symbol to string.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","Spree::RansackConfiguration at ./spec/lib/spree/core/ransack_configuration_spec.rb.#add_attribute does not duplicate attributes.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","Spree::RansackConfiguration at ./spec/lib/spree/core/ransack_configuration_spec.rb.#add_scope adds a scope to a model.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","Spree::RansackConfiguration at ./spec/lib/spree/core/ransack_configuration_spec.rb.#add_scope adds to existing scopes when called multiple times.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","Spree::RansackConfiguration at ./spec/lib/spree/core/ransack_configuration_spec.rb.#add_scope does not duplicate scopes.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3\"}}","Spree::RansackConfiguration at ./spec/lib/spree/core/ransack_configuration_spec.rb.#custom_associations_for returns an empty array for models with no custom associations.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","Spree::RansackConfiguration at ./spec/lib/spree/core/ransack_configuration_spec.rb.#custom_attributes_for returns an empty array for models with no custom attributes.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","Spree::RansackConfiguration at ./spec/lib/spree/core/ransack_configuration_spec.rb.#custom_scopes_for returns an empty array for models with no custom scopes.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","Spree::RansackConfiguration at ./spec/lib/spree/core/ransack_configuration_spec.rb.#reset! clears all custom configurations.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","Spree::RansackConfiguration at ./spec/lib/spree/core/ransack_configuration_spec.rb.isolation between models keeps configurations separate per model.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1\"}}","Spree::RansackableAttributes at ./spec/models/spree/concerns/ransackable_attributes_spec.rb..ransackable_associations does not duplicate associations.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3\"}}","Spree::RansackableAttributes at ./spec/models/spree/concerns/ransackable_attributes_spec.rb..ransackable_associations merges custom associations from Spree.ransack.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","Spree::RansackableAttributes at ./spec/models/spree/concerns/ransackable_attributes_spec.rb..ransackable_associations returns whitelisted associations.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","Spree::RansackableAttributes at ./spec/models/spree/concerns/ransackable_attributes_spec.rb..ransackable_attributes does not duplicate attributes.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","Spree::RansackableAttributes at ./spec/models/spree/concerns/ransackable_attributes_spec.rb..ransackable_attributes merges custom attributes from Spree.ransack.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","Spree::RansackableAttributes at ./spec/models/spree/concerns/ransackable_attributes_spec.rb..ransackable_attributes returns default and whitelisted attributes.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::RansackableAttributes at ./spec/models/spree/concerns/ransackable_attributes_spec.rb..ransackable_scopes does not duplicate scopes.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3\"}}","Spree::RansackableAttributes at ./spec/models/spree/concerns/ransackable_attributes_spec.rb..ransackable_scopes merges custom scopes from Spree.ransack.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","Spree::RansackableAttributes at ./spec/models/spree/concerns/ransackable_attributes_spec.rb..ransackable_scopes returns whitelisted scopes.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","Spree::Refund at ./spec/models/spree/refund_spec.rb.create processing fails raises error and not create a refund.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:1\"}}","Spree::Refund at ./spec/models/spree/refund_spec.rb.create processing is successful attempts to process a transaction.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:6\"}}","Spree::Refund at ./spec/models/spree/refund_spec.rb.create processing is successful creates a log entry.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:5\"}}","Spree::Refund at ./spec/models/spree/refund_spec.rb.create processing is successful creates a refund.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","Spree::Refund at ./spec/models/spree/refund_spec.rb.create processing is successful return the newly created refund.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:2\"}}","Spree::Refund at ./spec/models/spree/refund_spec.rb.create processing is successful saves the passed amount as the refund amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:4\"}}","Spree::Refund at ./spec/models/spree/refund_spec.rb.create processing is successful saves the returned authorization value.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:3\"}}","Spree::Refund at ./spec/models/spree/refund_spec.rb.create processing is successful updates the payment total.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:7\"}}","Spree::Refund at ./spec/models/spree/refund_spec.rb.create transaction id exists on creation creates a log entry.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:4\"}}","Spree::Refund at ./spec/models/spree/refund_spec.rb.create transaction id exists on creation creates a refund record.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","Spree::Refund at ./spec/models/spree/refund_spec.rb.create transaction id exists on creation does not attempt to process a transaction.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:5\"}}","Spree::Refund at ./spec/models/spree/refund_spec.rb.create transaction id exists on creation maintains the transaction id.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:2\"}}","Spree::Refund at ./spec/models/spree/refund_spec.rb.create transaction id exists on creation saves the amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:3\"}}","Spree::Refund at ./spec/models/spree/refund_spec.rb.create with amount too large is invalid.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:7:1\"}}","Spree::Refund at ./spec/models/spree/refund_spec.rb.create with an activemerchant gateway connection error raises Spree::Core::GatewayError.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:6:1\"}}","Spree::Refund at ./spec/models/spree/refund_spec.rb.create with payment profiles supported supplies the payment source.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:5:1\"}}","Spree::Refund at ./spec/models/spree/refund_spec.rb.create without payment profiles supported does not supply the payment source.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:4:1\"}}","Spree::Refund at ./spec/models/spree/refund_spec.rb.shared examples behaves like lifecycle events lifecycle events refund.created publishes created event when record is created.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1:1:1\"}}","Spree::Refund at ./spec/models/spree/refund_spec.rb.shared examples behaves like lifecycle events lifecycle events refund.deleted publishes deleted event when record is deleted.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1:3:1\"}}","Spree::Refund at ./spec/models/spree/refund_spec.rb.shared examples behaves like lifecycle events lifecycle events refund.updated publishes updated event when record is updated.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1:2:1\"}}","Spree::Refund at ./spec/models/spree/refund_spec.rb.shared examples behaves like metadata can query records by metadata properties.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:10\"}}","Spree::Refund at ./spec/models/spree/refund_spec.rb.shared examples behaves like metadata example at ./lib/spree/testing_support/metadata.rb:10.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:5\"}}","Spree::Refund at ./spec/models/spree/refund_spec.rb.shared examples behaves like metadata example at ./lib/spree/testing_support/metadata.rb:11.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:6\"}}","Spree::Refund at ./spec/models/spree/refund_spec.rb.shared examples behaves like metadata example at ./lib/spree/testing_support/metadata.rb:4.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","Spree::Refund at ./spec/models/spree/refund_spec.rb.shared examples behaves like metadata example at ./lib/spree/testing_support/metadata.rb:5.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2\"}}","Spree::Refund at ./spec/models/spree/refund_spec.rb.shared examples behaves like metadata example at ./lib/spree/testing_support/metadata.rb:7.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3\"}}","Spree::Refund at ./spec/models/spree/refund_spec.rb.shared examples behaves like metadata example at ./lib/spree/testing_support/metadata.rb:8.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:4\"}}","Spree::Refund at ./spec/models/spree/refund_spec.rb.shared examples behaves like metadata reads data as not symbolized keys.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:8\"}}","Spree::Refund at ./spec/models/spree/refund_spec.rb.shared examples behaves like metadata reads data as symbolized keys.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:7\"}}","Spree::Refund at ./spec/models/spree/refund_spec.rb.total_amount_reimbursed_for with reimbursements performed returns the total amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","Spree::Refund at ./spec/models/spree/refund_spec.rb.total_amount_reimbursed_for without reimbursements performed returns zero.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","Spree::RefundReason at ./spec/models/spree/refund_reason_spec.rb.Class Methods .order_canceled_reason order canceled reason not present creates a new refund reason on the fly.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:1\"}}","Spree::RefundReason at ./spec/models/spree/refund_reason_spec.rb.Class Methods .order_canceled_reason order canceled reason present example at ./spec/models/spree/refund_reason_spec.rb:24.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1:1\"}}","Spree::RefundReason at ./spec/models/spree/refund_reason_spec.rb.Class Methods .return_processing_reason default refund reason not present creates a new refund reason on the fly.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","Spree::RefundReason at ./spec/models/spree/refund_reason_spec.rb.Class Methods .return_processing_reason default refund reason present example at ./spec/models/spree/refund_reason_spec.rb:9.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","Spree::RefundReason at ./spec/models/spree/refund_reason_spec.rb.Class Methods .shipment_canceled_reason shipment canceled reason not present creates a new refund reason on the fly.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:2:1\"}}","Spree::RefundReason at ./spec/models/spree/refund_reason_spec.rb.Class Methods .shipment_canceled_reason shipment canceled reason present example at ./spec/models/spree/refund_reason_spec.rb:39.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1:1\"}}","Spree::Reimbursement at ./spec/models/spree/reimbursement_spec.rb.#calculated_total with a return item amount that should round up rounds up.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1\"}}","Spree::Reimbursement at ./spec/models/spree/reimbursement_spec.rb.#calculated_total with return item amounts that would round up if added rounds down.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:1\"}}","Spree::Reimbursement at ./spec/models/spree/reimbursement_spec.rb.#display_total returns the value as a Spree::Money instance.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::Reimbursement at ./spec/models/spree/reimbursement_spec.rb.#display_total uses the order's currency.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","Spree::Reimbursement at ./spec/models/spree/reimbursement_spec.rb.#perform! creates a refund.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","Spree::Reimbursement at ./spec/models/spree/reimbursement_spec.rb.#perform! refunds the total amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","Spree::Reimbursement at ./spec/models/spree/reimbursement_spec.rb.#perform! when exchange is required generates an exchange shipment for the order for the exchange items.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:8:1\"}}","Spree::Reimbursement at ./spec/models/spree/reimbursement_spec.rb.#perform! when performer is provided creates a refund.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4:3\"}}","Spree::Reimbursement at ./spec/models/spree/reimbursement_spec.rb.#perform! when performer is provided refunds the total amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4:2\"}}","Spree::Reimbursement at ./spec/models/spree/reimbursement_spec.rb.#perform! when performer is provided sets the performer.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4:1\"}}","Spree::Reimbursement at ./spec/models/spree/reimbursement_spec.rb.#perform! when reimbursement cannot be fully performed raises IncompleteReimbursement error.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:6:1\"}}","Spree::Reimbursement at ./spec/models/spree/reimbursement_spec.rb.#perform! when reimbursement is performed using store credits succeeds.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:7:1\"}}","Spree::Reimbursement at ./spec/models/spree/reimbursement_spec.rb.#perform! with additional tax saves the additional tax and refunds the total.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3:1\"}}","Spree::Reimbursement at ./spec/models/spree/reimbursement_spec.rb.#perform! with included tax saves the included tax and refunds the total.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:5:1\"}}","Spree::Reimbursement at ./spec/models/spree/reimbursement_spec.rb.#return_items_requiring_exchange returns only the return items that require an exchange.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","Spree::Reimbursement at ./spec/models/spree/reimbursement_spec.rb.#store returns order store.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","Spree::Reimbursement at ./spec/models/spree/reimbursement_spec.rb..build_from_customer_return connects data.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","Spree::Reimbursement at ./spec/models/spree/reimbursement_spec.rb.custom events reimbursement.reimbursed publishes reimbursement.reimbursed event when performed.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1:1\"}}","Spree::Reimbursement::Credit at ./spec/models/spree/reimbursement/credit_spec.rb.#description is the creditable's class name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","Spree::Reimbursement::Credit at ./spec/models/spree/reimbursement/credit_spec.rb.#display_amount is a money object.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","Spree::Reimbursement::Credit at ./spec/models/spree/reimbursement/credit_spec.rb.class methods .total_amount_reimbursed_for sums the amounts of all of the reimbursements credits.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","Spree::Reimbursement::ReimbursementTypeEngine at ./spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb.#calculate_reimbursement_types the return item does not require exchange the return item does not have an override reimbursement type the return item does not have a preferred reimbursement type the return item is past the time constraint behaves like reimbursement type hash contain all keys that respond to reimburse.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:2:1:3:1\"}}","Spree::Reimbursement::ReimbursementTypeEngine at ./spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb.#calculate_reimbursement_types the return item does not require exchange the return item does not have an override reimbursement type the return item does not have a preferred reimbursement type the return item is past the time constraint returns a hash with the expired reimbursement type associated to the return items.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:2:1:1\"}}","Spree::Reimbursement::ReimbursementTypeEngine at ./spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb.#calculate_reimbursement_types the return item does not require exchange the return item does not have an override reimbursement type the return item does not have a preferred reimbursement type the return item is past the time constraint the return items are not included in any of the other reimbursement types.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:2:1:2\"}}","Spree::Reimbursement::ReimbursementTypeEngine at ./spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb.#calculate_reimbursement_types the return item does not require exchange the return item does not have an override reimbursement type the return item does not have a preferred reimbursement type the return item is within the time constraint behaves like reimbursement type hash contain all keys that respond to reimburse.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:2:2:3:1\"}}","Spree::Reimbursement::ReimbursementTypeEngine at ./spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb.#calculate_reimbursement_types the return item does not require exchange the return item does not have an override reimbursement type the return item does not have a preferred reimbursement type the return item is within the time constraint returns a hash with the default reimbursement type associated to the return items.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:2:2:1\"}}","Spree::Reimbursement::ReimbursementTypeEngine at ./spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb.#calculate_reimbursement_types the return item does not require exchange the return item does not have an override reimbursement type the return item does not have a preferred reimbursement type the return item is within the time constraint the return items are not included in any of the other reimbursement types.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:2:2:2\"}}","Spree::Reimbursement::ReimbursementTypeEngine at ./spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb.#calculate_reimbursement_types the return item does not require exchange the return item does not have an override reimbursement type the return item has a preferred reimbursement type the reimbursement type is not valid for the return item behaves like reimbursement type hash contain all keys that respond to reimburse.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:1:1:3:1\"}}","Spree::Reimbursement::ReimbursementTypeEngine at ./spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb.#calculate_reimbursement_types the return item does not require exchange the return item does not have an override reimbursement type the return item has a preferred reimbursement type the reimbursement type is not valid for the return item returns a hash with no return items associated to the preferred reimbursement type.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:1:1:1\"}}","Spree::Reimbursement::ReimbursementTypeEngine at ./spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb.#calculate_reimbursement_types the return item does not require exchange the return item does not have an override reimbursement type the return item has a preferred reimbursement type the reimbursement type is not valid for the return item the return items are not included in any of the other reimbursement types.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:1:1:2\"}}","Spree::Reimbursement::ReimbursementTypeEngine at ./spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb.#calculate_reimbursement_types the return item does not require exchange the return item does not have an override reimbursement type the return item has a preferred reimbursement type the reimbursement type is valid for the return item behaves like reimbursement type hash contain all keys that respond to reimburse.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:1:2:3:1\"}}","Spree::Reimbursement::ReimbursementTypeEngine at ./spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb.#calculate_reimbursement_types the return item does not require exchange the return item does not have an override reimbursement type the return item has a preferred reimbursement type the reimbursement type is valid for the return item returns a hash with the expired reimbursement type associated to the return items.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:1:2:1\"}}","Spree::Reimbursement::ReimbursementTypeEngine at ./spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb.#calculate_reimbursement_types the return item does not require exchange the return item does not have an override reimbursement type the return item has a preferred reimbursement type the reimbursement type is valid for the return item the return items are not included in any of the other reimbursement types.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:1:2:2\"}}","Spree::Reimbursement::ReimbursementTypeEngine at ./spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb.#calculate_reimbursement_types the return item does not require exchange the return item has an override reimbursement type behaves like reimbursement type hash contain all keys that respond to reimburse.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1:3:1\"}}","Spree::Reimbursement::ReimbursementTypeEngine at ./spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb.#calculate_reimbursement_types the return item does not require exchange the return item has an override reimbursement type returns a hash with the override reimbursement type associated to the return items.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1:1\"}}","Spree::Reimbursement::ReimbursementTypeEngine at ./spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb.#calculate_reimbursement_types the return item does not require exchange the return item has an override reimbursement type the return items are not included in any of the other reimbursement types.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1:2\"}}","Spree::Reimbursement::ReimbursementTypeEngine at ./spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb.#calculate_reimbursement_types the return item requires exchange behaves like reimbursement type hash contain all keys that respond to reimburse.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:1\"}}","Spree::Reimbursement::ReimbursementTypeEngine at ./spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb.#calculate_reimbursement_types the return item requires exchange returns a hash with the exchange reimbursement type associated to the return items.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","Spree::Reimbursement::ReimbursementTypeEngine at ./spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb.#calculate_reimbursement_types the return item requires exchange the return items are not included in any of the other reimbursement types.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2\"}}","Spree::Reimbursement::ReimbursementTypeValidator at ./spec/models/spree/reimbursement/reimbursement_type_validator_spec.rb.#past_reimbursable_time_period? it has not shipped is not past the reimbursable time period.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","Spree::Reimbursement::ReimbursementTypeValidator at ./spec/models/spree/reimbursement/reimbursement_type_validator_spec.rb.#past_reimbursable_time_period? it has shipped and it is further in the past than the time constraint is past the reimbursable time period.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:1\"}}","Spree::Reimbursement::ReimbursementTypeValidator at ./spec/models/spree/reimbursement/reimbursement_type_validator_spec.rb.#past_reimbursable_time_period? it has shipped and it is more recent than the time constraint is not past the reimbursable time period.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","Spree::Reimbursement::ReimbursementTypeValidator at ./spec/models/spree/reimbursement/reimbursement_type_validator_spec.rb.#valid_preferred_reimbursement_type? is invalid if the return item is past the eligible time period and the preferred method of reimbursement is not the expired method of reimbursement.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","Spree::Reimbursement::ReimbursementTypeValidator at ./spec/models/spree/reimbursement/reimbursement_type_validator_spec.rb.#valid_preferred_reimbursement_type? is valid if it is not past the reimbursable time period.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","Spree::Reimbursement::ReimbursementTypeValidator at ./spec/models/spree/reimbursement/reimbursement_type_validator_spec.rb.#valid_preferred_reimbursement_type? is valid if the return items preferred method of reimbursement is the expired method of reimbursement.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2\"}}","Spree::ReimbursementPerformer at ./spec/models/spree/reimbursement_performer_spec.rb..perform reimburses each calculated reimbursement types with the correct return items as a performance.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","Spree::ReimbursementPerformer at ./spec/models/spree/reimbursement_performer_spec.rb..simulate reimburses each calculated reimbursement types with the correct return items as a simulation.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::ReimbursementTaxCalculator at ./spec/models/spree/reimbursement_tax_calculator_spec.rb.with additional tax sets additional_tax_total on the return items.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","Spree::ReimbursementTaxCalculator at ./spec/models/spree/reimbursement_tax_calculator_spec.rb.with included tax sets included_tax_total on the return items.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","Spree::ReimbursementTaxCalculator at ./spec/models/spree/reimbursement_tax_calculator_spec.rb.without taxes leaves the return items additional_tax_total and included_tax_total at zero.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::ReimbursementType::Credit at ./spec/models/spree/reimbursement_type/credit_spec.rb..reimburse simulate is false creates one lump credit for all outstanding balance payable to the customer.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","Spree::ReimbursementType::Credit at ./spec/models/spree/reimbursement_type/credit_spec.rb..reimburse simulate is true creates one readonly lump credit for all outstanding balance payable to the customer.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","Spree::ReimbursementType::Credit at ./spec/models/spree/reimbursement_type/credit_spec.rb..reimburse simulate is true does not save to the database.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2\"}}","Spree::ReimbursementType::Exchange at ./spec/models/spree/reimbursement_type/exchange_spec.rb..reimburse no return items are supplied does not perform an exchange and returns an empty array.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","Spree::ReimbursementType::Exchange at ./spec/models/spree/reimbursement_type/exchange_spec.rb..reimburse return items are supplied simulate is false performs an exchange and returns the exchange object.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","Spree::ReimbursementType::Exchange at ./spec/models/spree/reimbursement_type/exchange_spec.rb..reimburse return items are supplied simulate is true does not perform an exchange and returns the exchange object.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","Spree::ReimbursementType::OriginalPayment at ./spec/models/spree/reimbursement_type/original_payment_spec.rb..reimburse simulate is false performs the refund.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","Spree::ReimbursementType::OriginalPayment at ./spec/models/spree/reimbursement_type/original_payment_spec.rb..reimburse simulate is true returns an array of readonly refunds.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","Spree::ReimbursementType::OriginalPayment at ./spec/models/spree/reimbursement_type/original_payment_spec.rb..reimburse when a payment is negative returns an empty array.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1\"}}","Spree::ReimbursementType::OriginalPayment at ./spec/models/spree/reimbursement_type/original_payment_spec.rb..reimburse when no credit is allowed on the payment returns an empty array.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","Spree::ReimbursementType::StoreCredit at ./spec/models/spree/reimbursement_type/store_credit_spec.rb..reimburse simulate is false for return items that were not paid for with store credit creates a store credit with the same currency as the reimbursement's order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:2\"}}","Spree::ReimbursementType::StoreCredit at ./spec/models/spree/reimbursement_type/store_credit_spec.rb..reimburse simulate is false for return items that were not paid for with store credit creates one lump credit for all outstanding balance payable to the customer.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:1\"}}","Spree::ReimbursementType::StoreCredit at ./spec/models/spree/reimbursement_type/store_credit_spec.rb..reimburse simulate is false for store credits that the customer used performs refunds for all store credit payments.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1:1\"}}","Spree::ReimbursementType::StoreCredit at ./spec/models/spree/reimbursement_type/store_credit_spec.rb..reimburse simulate is true for return items that were not paid for with store credit creates one readonly lump credit for all outstanding balance payable to the customer creates a credit that is read only.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1:1\"}}","Spree::ReimbursementType::StoreCredit at ./spec/models/spree/reimbursement_type/store_credit_spec.rb..reimburse simulate is true for return items that were not paid for with store credit creates one readonly lump credit for all outstanding balance payable to the customer creates a credit which amounts to the sum of the return items rounded down.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1:2\"}}","Spree::ReimbursementType::StoreCredit at ./spec/models/spree/reimbursement_type/store_credit_spec.rb..reimburse simulate is true for return items that were not paid for with store credit does not save to the database.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:2\"}}","Spree::ReimbursementType::StoreCredit at ./spec/models/spree/reimbursement_type/store_credit_spec.rb..reimburse simulate is true for store credits that the customer used creates readonly refunds for all store credit payments.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","Spree::ReimbursementType::StoreCredit at ./spec/models/spree/reimbursement_type/store_credit_spec.rb..reimburse simulate is true for store credits that the customer used does not save to the database.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:2\"}}","Spree::Report at ./spec/models/spree/report_spec.rb.#attachment_file_name returns the correct file name format.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","Spree::Report at ./spec/models/spree/report_spec.rb.#event_serializer_class returns the correct serializer class.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","Spree::Report at ./spec/models/spree/report_spec.rb.#generate generates CSV file and attaches it.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","Spree::Report at ./spec/models/spree/report_spec.rb.#generate sends report done email when user is present.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2\"}}","Spree::Report at ./spec/models/spree/report_spec.rb.#generate when user is not present does not send report done email.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3:1\"}}","Spree::Report at ./spec/models/spree/report_spec.rb.#human_name returns formatted name with store, dates and report type.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","Spree::Report at ./spec/models/spree/report_spec.rb.behaves like lifecycle events lifecycle events report.created publishes created event when record is created.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","Spree::Report at ./spec/models/spree/report_spec.rb.behaves like lifecycle events lifecycle events report.deleted publishes deleted event when record is deleted.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:1\"}}","Spree::Report at ./spec/models/spree/report_spec.rb.behaves like lifecycle events lifecycle events report.updated publishes updated event when record is updated.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","Spree::Report at ./spec/models/spree/report_spec.rb.callbacks after_initialize sets default currency from store.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1:1\"}}","Spree::Report at ./spec/models/spree/report_spec.rb.callbacks after_initialize sets default date range.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1:2\"}}","Spree::ReportLineItem at ./spec/models/spree/report_line_item_spec.rb.#to_csv returns array of attribute values.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","Spree::ReportLineItem at ./spec/models/spree/report_line_item_spec.rb..csv_headers returns array of attribute keys.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","Spree::ReportLineItem at ./spec/models/spree/report_line_item_spec.rb..headers returns array of hashes with name and label.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::ReportLineItems::ProductsPerformance at ./spec/models/spree/report_line_items/products_performance_spec.rb.#brand returns brand name from record.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","Spree::ReportLineItems::ProductsPerformance at ./spec/models/spree/report_line_items/products_performance_spec.rb.#category_levels when product has no taxons returns nil for all category levels.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","Spree::ReportLineItems::ProductsPerformance at ./spec/models/spree/report_line_items/products_performance_spec.rb.#category_levels when product has taxons returns mapped category levels.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","Spree::ReportLineItems::ProductsPerformance at ./spec/models/spree/report_line_items/products_performance_spec.rb.#price returns formatted price in report currency.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","Spree::ReportLineItems::ProductsPerformance at ./spec/models/spree/report_line_items/products_performance_spec.rb.#quantity returns line item quantity.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","Spree::ReportLineItems::ProductsPerformance at ./spec/models/spree/report_line_items/products_performance_spec.rb.#vendor returns vendor name from record.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::ReportLineItems::ProductsPerformance at ./spec/models/spree/report_line_items/products_performance_spec.rb.#weeks_online with available on returns number of weeks since product activation.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:1\"}}","Spree::ReportLineItems::ProductsPerformance at ./spec/models/spree/report_line_items/products_performance_spec.rb.#weeks_online without available on returns number of weeks since product creation.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1\"}}","Spree::ReportLineItems::ProductsPerformance at ./spec/models/spree/report_line_items/products_performance_spec.rb.money amounts returns formatted money amounts.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","Spree::ReportLineItems::SalesTotal at ./spec/models/spree/report_line_items/sales_total_spec.rb.#date returns formatted completed_at date.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::ReportLineItems::SalesTotal at ./spec/models/spree/report_line_items/sales_total_spec.rb.#order returns order number.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","Spree::ReportLineItems::SalesTotal at ./spec/models/spree/report_line_items/sales_total_spec.rb.#pre_tax_amount returns display pre tax amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","Spree::ReportLineItems::SalesTotal at ./spec/models/spree/report_line_items/sales_total_spec.rb.#product returns variant descriptive name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","Spree::ReportLineItems::SalesTotal at ./spec/models/spree/report_line_items/sales_total_spec.rb.#promo_total returns display promo total.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","Spree::ReportLineItems::SalesTotal at ./spec/models/spree/report_line_items/sales_total_spec.rb.#quantity returns quantity.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","Spree::ReportLineItems::SalesTotal at ./spec/models/spree/report_line_items/sales_total_spec.rb.#shipment_total returns display shipping cost.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1\"}}","Spree::ReportLineItems::SalesTotal at ./spec/models/spree/report_line_items/sales_total_spec.rb.#tax_total returns display tax total.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1\"}}","Spree::ReportLineItems::SalesTotal at ./spec/models/spree/report_line_items/sales_total_spec.rb.#total returns money object with final amount plus shipping.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","Spree::ReportMailer at ./spec/mailers/spree/report_mailer_spec.rb.#report_done includes download link in the body.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","Spree::ReportMailer at ./spec/mailers/spree/report_mailer_spec.rb.#report_done renders the subject.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::ReportMailer at ./spec/mailers/spree/report_mailer_spec.rb.#report_done sends from the store mail from address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","Spree::ReportMailer at ./spec/mailers/spree/report_mailer_spec.rb.#report_done sends to the correct recipient.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","Spree::ReportMailer at ./spec/mailers/spree/report_mailer_spec.rb.#report_done sets reply-to as the store mail from address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","Spree::ReportSubscriber at ./spec/subscribers/spree/report_subscriber_spec.rb.#generate_report_async does not call job if report_id is missing.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","Spree::ReportSubscriber at ./spec/subscribers/spree/report_subscriber_spec.rb.#generate_report_async extracts report_id from event payload.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","Spree::ReportSubscriber at ./spec/subscribers/spree/report_subscriber_spec.rb..event_handlers routes report.created to generate_report_async.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","Spree::ReportSubscriber at ./spec/subscribers/spree/report_subscriber_spec.rb..subscription_patterns subscribes to report.created event.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::Reports::ProductsPerformance at ./spec/models/spree/reports/products_performance_spec.rb.#line_items_scope date range boundary conditions when order completed 1 minute after date_to excludes products.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:4:1\"}}","Spree::Reports::ProductsPerformance at ./spec/models/spree/reports/products_performance_spec.rb.#line_items_scope date range boundary conditions when order completed 1 minute before date_from excludes products.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:3:1\"}}","Spree::Reports::ProductsPerformance at ./spec/models/spree/reports/products_performance_spec.rb.#line_items_scope date range boundary conditions when order completed exactly at date_from includes products.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1:1\"}}","Spree::Reports::ProductsPerformance at ./spec/models/spree/reports/products_performance_spec.rb.#line_items_scope date range boundary conditions when order completed exactly at date_to includes products.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:2:1\"}}","Spree::Reports::ProductsPerformance at ./spec/models/spree/reports/products_performance_spec.rb.#line_items_scope when order has different currency excludes products with different currency.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1\"}}","Spree::Reports::ProductsPerformance at ./spec/models/spree/reports/products_performance_spec.rb.#line_items_scope when order is outside date range excludes products from orders outside date range.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","Spree::Reports::ProductsPerformance at ./spec/models/spree/reports/products_performance_spec.rb.#line_items_scope when order is within date range includes products with sales data.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","Spree::Reports::SalesTotal at ./spec/models/spree/reports/sales_total_spec.rb.#line_items_scope date range boundary conditions when order completed 1 minute after date_to excludes line items.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:4:1\"}}","Spree::Reports::SalesTotal at ./spec/models/spree/reports/sales_total_spec.rb.#line_items_scope date range boundary conditions when order completed 1 minute before date_from excludes line items.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:3:1\"}}","Spree::Reports::SalesTotal at ./spec/models/spree/reports/sales_total_spec.rb.#line_items_scope date range boundary conditions when order completed exactly at date_from includes line items.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1:1\"}}","Spree::Reports::SalesTotal at ./spec/models/spree/reports/sales_total_spec.rb.#line_items_scope date range boundary conditions when order completed exactly at date_to includes line items.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:2:1\"}}","Spree::Reports::SalesTotal at ./spec/models/spree/reports/sales_total_spec.rb.#line_items_scope when order has different currency excludes line items with different currency.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1\"}}","Spree::Reports::SalesTotal at ./spec/models/spree/reports/sales_total_spec.rb.#line_items_scope when order is incomplete excludes line items from incomplete orders.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5:1\"}}","Spree::Reports::SalesTotal at ./spec/models/spree/reports/sales_total_spec.rb.#line_items_scope when order is outside date range excludes line items from orders outside date range.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","Spree::Reports::SalesTotal at ./spec/models/spree/reports/sales_total_spec.rb.#line_items_scope when order is within date range includes line items from completed orders within date range.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","Spree::Reports::SalesTotal at ./spec/models/spree/reports/sales_total_spec.rb.#return_line_items returns line items.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","Spree::ReturnAuthorization at ./spec/models/spree/return_authorization_spec.rb.#can_cancel? all items can be cancelled returns true.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1:1\"}}","Spree::ReturnAuthorization at ./spec/models/spree/return_authorization_spec.rb.#can_cancel? at least one return item can be cancelled example at ./spec/models/spree/return_authorization_spec.rb:255.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2:1\"}}","Spree::ReturnAuthorization at ./spec/models/spree/return_authorization_spec.rb.#can_cancel? no items can be cancelled example at ./spec/models/spree/return_authorization_spec.rb:262.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:3:1\"}}","Spree::ReturnAuthorization at ./spec/models/spree/return_authorization_spec.rb.#can_cancel? when return_authorization has no return_items example at ./spec/models/spree/return_authorization_spec.rb:268.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:4:1\"}}","Spree::ReturnAuthorization at ./spec/models/spree/return_authorization_spec.rb.#currency returns the order currency.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","Spree::ReturnAuthorization at ./spec/models/spree/return_authorization_spec.rb.#customer_returned_items? does not have associated customer returns returns false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:2:1\"}}","Spree::ReturnAuthorization at ./spec/models/spree/return_authorization_spec.rb.#customer_returned_items? has associated customer returns returns true.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1:1\"}}","Spree::ReturnAuthorization at ./spec/models/spree/return_authorization_spec.rb.#display_pre_tax_total returns a Spree::Money.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","Spree::ReturnAuthorization at ./spec/models/spree/return_authorization_spec.rb.#pre_tax_total sums it's associated return_item's pre-tax amounts.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","Spree::ReturnAuthorization at ./spec/models/spree/return_authorization_spec.rb.#refundable_amount no promotions returns the pre-tax line item total.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1:1\"}}","Spree::ReturnAuthorization at ./spec/models/spree/return_authorization_spec.rb.#refundable_amount promotions returns the pre-tax line item total minus the order level promotion value.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2:1\"}}","Spree::ReturnAuthorization at ./spec/models/spree/return_authorization_spec.rb.cancel_return_items cancels the associated return items.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1\"}}","Spree::ReturnAuthorization at ./spec/models/spree/return_authorization_spec.rb.cancel_return_items some return items cannot be cancelled cancels those that can be cancelled.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:2:1\"}}","Spree::ReturnAuthorization at ./spec/models/spree/return_authorization_spec.rb.custom events return_authorization.canceled publishes return_authorization.canceled event when canceled.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:1:1\"}}","Spree::ReturnAuthorization at ./spec/models/spree/return_authorization_spec.rb.lifecycle events return_authorization.created publishes created event when record is created.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","Spree::ReturnAuthorization at ./spec/models/spree/return_authorization_spec.rb.lifecycle events return_authorization.deleted publishes deleted event when record is destroyed.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","Spree::ReturnAuthorization at ./spec/models/spree/return_authorization_spec.rb.lifecycle events return_authorization.updated publishes updated event when record is updated.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","Spree::ReturnAuthorization at ./spec/models/spree/return_authorization_spec.rb.save expedited exchanges are configured items to exchange attempts to accept all return items requiring exchange.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:2:2\"}}","Spree::ReturnAuthorization at ./spec/models/spree/return_authorization_spec.rb.save expedited exchanges are configured items to exchange calls pre_expedited_exchange hooks with the return items to exchange.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:2:1\"}}","Spree::ReturnAuthorization at ./spec/models/spree/return_authorization_spec.rb.save expedited exchanges are configured items to exchange performs an exchange reimbursement for the exchange return items.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:2:3\"}}","Spree::ReturnAuthorization at ./spec/models/spree/return_authorization_spec.rb.save expedited exchanges are configured items to exchange the reimbursement fails puts errors on the return authorization.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:2:4:1\"}}","Spree::ReturnAuthorization at ./spec/models/spree/return_authorization_spec.rb.save expedited exchanges are configured no items to exchange does not create a reimbursement.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1:1\"}}","Spree::ReturnAuthorization at ./spec/models/spree/return_authorization_spec.rb.save is invalid when order has no inventory units.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","Spree::ReturnAuthorization at ./spec/models/spree/return_authorization_spec.rb.whitelisted_ransackable_associations example at ./spec/models/spree/return_authorization_spec.rb:125.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","Spree::ReturnAuthorization at ./spec/models/spree/return_authorization_spec.rb.whitelisted_ransackable_attributes example at ./spec/models/spree/return_authorization_spec.rb:121.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.#accept pending status has no acceptance status errors.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:1:2\"}}","Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.#accept pending status transitions successfully.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:1:1\"}}","Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.#accept return_item has an acceptance status of rejected behaves like an invalid state transition cannot transition to accepted.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:2:1:1\"}}","Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.#attempt_accept not eligible for return manual intervention not required sets the acceptance status errors.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:4:2:2\"}}","Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.#attempt_accept not eligible for return manual intervention not required transitions to rejected.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:4:2:1\"}}","Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.#attempt_accept not eligible for return manual intervention required sets the acceptance status errors.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:4:1:2\"}}","Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.#attempt_accept not eligible for return manual intervention required transitions to manual intervention required.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:4:1:1\"}}","Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.#attempt_accept pending status has no acceptance status errors.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:1:2\"}}","Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.#attempt_accept pending status transitions successfully.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:1:1\"}}","Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.#attempt_accept return_item has an acceptance status of manual_intervention_required behaves like an invalid state transition cannot transition to accepted.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:2:1:1\"}}","Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.#attempt_accept return_item has an acceptance status of rejected behaves like an invalid state transition cannot transition to accepted.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:3:1:1\"}}","Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.#build_default_exchange_inventory_unit the return item is intended to be exchanged an exchange inventory unit already exists example at ./spec/models/spree/return_item_spec.rb:527.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:23:1:1:1\"}}","Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.#build_default_exchange_inventory_unit the return item is intended to be exchanged no exchange inventory unit exists builds a pending inventory unit with references to the return item, variant, and previous inventory unit.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:23:1:2:1\"}}","Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.#build_default_exchange_inventory_unit the return item is not intended to be exchanged example at ./spec/models/spree/return_item_spec.rb:543.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:23:2:1\"}}","Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.#cancel awaiting status transitions successfully.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1:1\"}}","Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.#cancel return_item has a reception status of cancelled behaves like an invalid state transition cannot transition to cancelled.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:3:1:1\"}}","Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.#cancel return_item has a reception status of given_to_customer behaves like an invalid state transition cannot transition to cancelled.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:4:1:1\"}}","Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.#cancel return_item has a reception status of received behaves like an invalid state transition cannot transition to cancelled.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:2:1:1\"}}","Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.#display_pre_tax_amount returns a Spree::Money.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.#eligible_exchange_variants uses the exchange variant calculator to compute possible variants to exchange for.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:20:1\"}}","Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.#exchange_processed? exchange inventory unit does not exist example at ./spec/models/spree/return_item_spec.rb:445.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:2:1\"}}","Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.#exchange_processed? exchange inventory unit exists example at ./spec/models/spree/return_item_spec.rb:439.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:1:1\"}}","Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.#exchange_requested? exchange variant does not exist example at ./spec/models/spree/return_item_spec.rb:431.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:17:2:1\"}}","Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.#exchange_requested? exchange variant exists example at ./spec/models/spree/return_item_spec.rb:425.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:17:1:1\"}}","Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.#exchange_required? exchange has been requested and not yet processed example at ./spec/models/spree/return_item_spec.rb:456.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:1:1\"}}","Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.#exchange_required? exchange has been requested and processed example at ./spec/models/spree/return_item_spec.rb:471.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:3:1\"}}","Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.#exchange_required? exchange has not been requested example at ./spec/models/spree/return_item_spec.rb:462.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:2:1\"}}","Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.#exchange_shipments returns the exchange inventory unit's shipment.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:24:1\"}}","Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.#give awaiting status transitions successfully.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1:1\"}}","Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.#give return_item has a reception status of cancelled behaves like an invalid state transition cannot transition to give_to_customer.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:3:1:1\"}}","Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.#give return_item has a reception status of given_to_customer behaves like an invalid state transition cannot transition to give_to_customer.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:4:1:1\"}}","Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.#give return_item has a reception status of received behaves like an invalid state transition cannot transition to give_to_customer.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2:1:1\"}}","Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.#pre_tax_amount= is expected to equal to localized number.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.#process_inventory_unit! #currency responds to currency method.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:4:1\"}}","Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.#process_inventory_unit! example at ./spec/models/spree/return_item_spec.rb:719.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:1\"}}","Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.#process_inventory_unit! stock should not restock return_item is not resellable example at ./spec/models/spree/return_item_spec.rb:737.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:3:1:1\"}}","Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.#process_inventory_unit! stock should not restock return_item is not resellable example at ./spec/models/spree/return_item_spec.rb:738.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:3:1:2\"}}","Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.#process_inventory_unit! stock should not restock stock_item not present example at ./spec/models/spree/return_item_spec.rb:751.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:3:3:1\"}}","Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.#process_inventory_unit! stock should not restock stock_item not present example at ./spec/models/spree/return_item_spec.rb:752.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:3:3:2\"}}","Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.#process_inventory_unit! stock should not restock variant should not track inventory example at ./spec/models/spree/return_item_spec.rb:744.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:3:2:1\"}}","Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.#process_inventory_unit! stock should not restock variant should not track inventory example at ./spec/models/spree/return_item_spec.rb:745.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:3:2:2\"}}","Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.#process_inventory_unit! stock should not restock when restock inventory preference false example at ./spec/models/spree/return_item_spec.rb:758.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:3:4:1\"}}","Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.#process_inventory_unit! stock should not restock when restock inventory preference false example at ./spec/models/spree/return_item_spec.rb:759.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:3:4:2\"}}","Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.#process_inventory_unit! stock should restock example at ./spec/models/spree/return_item_spec.rb:730.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:2:1\"}}","Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.#receive awaiting status transitions successfully.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1:1\"}}","Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.#receive return_item has a reception status of cancelled behaves like an invalid state transition cannot transition to received.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:3:1:1\"}}","Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.#receive return_item has a reception status of given_to_customer behaves like an invalid state transition cannot transition to received.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:4:1:1\"}}","Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.#receive return_item has a reception status of received behaves like an invalid state transition cannot transition to received.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:2:1:1\"}}","Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.#receive! attempts to accept the return item.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.#receive! returns the inventory unit.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.#receive! with a stock location increases the count on hand.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.#receive! with a stock location when the restock_inventory preference is false does not increase the count on hand.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:4:1\"}}","Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.#receive! with a stock location when the variant is not resellable example at ./spec/models/spree/return_item_spec.rb:58.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:2:1\"}}","Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.#receive! with a stock location when variant does not track inventory does not increase the count on hand.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:3:1\"}}","Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.#reject pending status has no acceptance status errors.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:1:2\"}}","Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.#reject pending status transitions successfully.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:1:1\"}}","Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.#reject return_item has an acceptance status of rejected behaves like an invalid state transition cannot transition to rejected.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:2:1:1\"}}","Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.#require_manual_intervention pending status has no acceptance status errors.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:1:2\"}}","Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.#require_manual_intervention pending status transitions successfully.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:1:1\"}}","Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.#require_manual_intervention return_item has an acceptance status of rejected behaves like an invalid state transition cannot transition to manual_intervention_required.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:2:1:1\"}}","Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.#shipment returns the inventory unit's shipment.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:25:1\"}}","Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb..default_refund_amount_calculator defaults to the default refund amount calculator.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb..exchange_variant_engine defaults to the same product calculator.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:21:1\"}}","Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb..from_inventory_unit with a cancelled return item example at ./spec/models/spree/return_item_spec.rb:147.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1:1\"}}","Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb..from_inventory_unit with a non-cancelled return item example at ./spec/models/spree/return_item_spec.rb:153.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2:1\"}}","Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.acceptance_status state_machine starts off in the pending state.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1\"}}","Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.custom events return_item.canceled publishes return_item.canceled event when canceled.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:30:2:1\"}}","Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.custom events return_item.given publishes return_item.given event when given to customer.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:30:3:1\"}}","Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.custom events return_item.received publishes return_item.received event when received.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:30:1:1\"}}","Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.exchange pre_tax_amount the return item is intended to be exchanged example at ./spec/models/spree/return_item_spec.rb:498.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:22:1:1\"}}","Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.exchange pre_tax_amount the return item is not intended to be exchanged example at ./spec/models/spree/return_item_spec.rb:506.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:22:2:1\"}}","Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.included tax in total includes included tax total.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:28:1\"}}","Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.inventory_unit uniqueness with other awaiting return items exist for the same inventory unit cancels the others.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:26:1:1\"}}","Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.inventory_unit uniqueness with other awaiting return items exist for the same inventory unit does not cancel itself.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:26:1:2\"}}","Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.inventory_unit uniqueness with other cancelled return items exist for the same inventory unit succeeds.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:26:2:1\"}}","Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.inventory_unit uniqueness with other given_to_customer return items exist for the same inventory unit is invalid.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:26:4:1\"}}","Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.inventory_unit uniqueness with other received return items exist for the same inventory unit is invalid.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:26:3:1\"}}","Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.pre_tax_amount calculations on create pre tax amount is not specified an exchange example at ./spec/models/spree/return_item_spec.rb:128.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:2:1\"}}","Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.pre_tax_amount calculations on create pre tax amount is not specified not an exchange example at ./spec/models/spree/return_item_spec.rb:122.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:1:1\"}}","Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.pre_tax_amount calculations on create pre tax amount is specified example at ./spec/models/spree/return_item_spec.rb:135.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1\"}}","Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.reception_status state_machine starts off in the awaiting state.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.valid exchange variant return item doesn't have an exchange variant is valid.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:27:1:1\"}}","Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.valid exchange variant return item has an exchange variant the exchange variant is eligible is valid.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:27:2:1:1\"}}","Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.valid exchange variant return item has an exchange variant the exchange variant is not eligible new return item adds an error message about the invalid exchange variant.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:27:2:2:1:2\"}}","Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.valid exchange variant return item has an exchange variant the exchange variant is not eligible new return item is invalid.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:27:2:2:1:1\"}}","Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.valid exchange variant return item has an exchange variant the exchange variant is not eligible the exchange variant has been updated adds an error message about the invalid exchange variant.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:27:2:2:2:2\"}}","Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.valid exchange variant return item has an exchange variant the exchange variant is not eligible the exchange variant has been updated is invalid.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:27:2:2:2:1\"}}","Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.valid exchange variant return item has an exchange variant the exchange variant is not eligible the exchange variant has not been updated is valid.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:27:2:2:3:1\"}}","Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.validity for reimbursements when acceptance_status is accepted is valid.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:1:1\"}}","Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.validity for reimbursements when acceptance_status is accepted is valid.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:2:1\"}}","Spree::ReturnItem::EligibilityValidator::Default at ./spec/models/spree/return_item/eligibility_validator/default_spec.rb.#eligible_for_return? checks that all permitted eligibility validators are eligible for return.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::ReturnItem::EligibilityValidator::Default at ./spec/models/spree/return_item/eligibility_validator/default_spec.rb.#errors the validator errors are empty returns an empty hash.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","Spree::ReturnItem::EligibilityValidator::Default at ./spec/models/spree/return_item/eligibility_validator/default_spec.rb.#errors the validators have errors gathers all errors from permitted eligibility validators into a single errors hash.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","Spree::ReturnItem::EligibilityValidator::Default at ./spec/models/spree/return_item/eligibility_validator/default_spec.rb.#requires_manual_intervention? any of the permitted eligibility validators require manual intervention returns true.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","Spree::ReturnItem::EligibilityValidator::Default at ./spec/models/spree/return_item/eligibility_validator/default_spec.rb.#requires_manual_intervention? no permitted eligibility validators require manual intervention returns false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","Spree::ReturnItem::EligibilityValidator::InventoryShipped at ./spec/models/spree/return_item/eligibility_validator/inventory_shipped_spec.rb.#eligible_for_return? the associated inventory unit is not shipped returns false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","Spree::ReturnItem::EligibilityValidator::InventoryShipped at ./spec/models/spree/return_item/eligibility_validator/inventory_shipped_spec.rb.#eligible_for_return? the associated inventory unit is not shipped sets an error.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2\"}}","Spree::ReturnItem::EligibilityValidator::InventoryShipped at ./spec/models/spree/return_item/eligibility_validator/inventory_shipped_spec.rb.#eligible_for_return? the associated inventory unit is shipped returns true.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","Spree::ReturnItem::EligibilityValidator::InventoryShipped at ./spec/models/spree/return_item/eligibility_validator/inventory_shipped_spec.rb.#requires_manual_intervention? eligible for return returns false if no errors were added.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","Spree::ReturnItem::EligibilityValidator::InventoryShipped at ./spec/models/spree/return_item/eligibility_validator/inventory_shipped_spec.rb.#requires_manual_intervention? not eligible for return returns true if errors were added.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","Spree::ReturnItem::EligibilityValidator::NoReimbursements at ./spec/models/spree/return_item/eligibility_validator/no_reimbursements_spec.rb.#eligible_for_return? inventory unit has already been reimbursed returns false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","Spree::ReturnItem::EligibilityValidator::NoReimbursements at ./spec/models/spree/return_item/eligibility_validator/no_reimbursements_spec.rb.#eligible_for_return? inventory unit has already been reimbursed sets an error.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2\"}}","Spree::ReturnItem::EligibilityValidator::NoReimbursements at ./spec/models/spree/return_item/eligibility_validator/no_reimbursements_spec.rb.#eligible_for_return? inventory unit has not been reimbursed returns true.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","Spree::ReturnItem::EligibilityValidator::NoReimbursements at ./spec/models/spree/return_item/eligibility_validator/no_reimbursements_spec.rb.#requires_manual_intervention? eligible for return returns false if no errors were added.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","Spree::ReturnItem::EligibilityValidator::NoReimbursements at ./spec/models/spree/return_item/eligibility_validator/no_reimbursements_spec.rb.#requires_manual_intervention? not eligible for return returns true if errors were added.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","Spree::ReturnItem::EligibilityValidator::OrderCompleted at ./spec/models/spree/return_item/eligibility_validator/order_completed_spec.rb.#eligible_for_return? the order is not completed returns false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","Spree::ReturnItem::EligibilityValidator::OrderCompleted at ./spec/models/spree/return_item/eligibility_validator/order_completed_spec.rb.#eligible_for_return? the order is not completed sets an error.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2\"}}","Spree::ReturnItem::EligibilityValidator::OrderCompleted at ./spec/models/spree/return_item/eligibility_validator/order_completed_spec.rb.#eligible_for_return? the order was completed returns true.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","Spree::ReturnItem::EligibilityValidator::RMARequired at ./spec/models/spree/return_item/eligibility_validator/rma_required_spec.rb.#eligible_for_return? there is an rma on the return item returns true.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","Spree::ReturnItem::EligibilityValidator::RMARequired at ./spec/models/spree/return_item/eligibility_validator/rma_required_spec.rb.#eligible_for_return? there is no rma on the return item returns false abd error.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","Spree::ReturnItem::EligibilityValidator::TimeSincePurchase at ./spec/models/spree/return_item/eligibility_validator/time_since_purchase_spec.rb.#eligible_for_return? it is past the return timeframe returns false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","Spree::ReturnItem::EligibilityValidator::TimeSincePurchase at ./spec/models/spree/return_item/eligibility_validator/time_since_purchase_spec.rb.#eligible_for_return? it is past the return timeframe sets an error.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2\"}}","Spree::ReturnItem::EligibilityValidator::TimeSincePurchase at ./spec/models/spree/return_item/eligibility_validator/time_since_purchase_spec.rb.#eligible_for_return? it is within the return timeframe returns true.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","Spree::ReturnItem::ExchangeVariantEligibility::SameOptionValue at ./spec/models/spree/return_item/exchange_variant_eligibility/same_option_value_spec.rb..eligible_variants does not return variants for another product.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","Spree::ReturnItem::ExchangeVariantEligibility::SameOptionValue at ./spec/models/spree/return_item/exchange_variant_eligibility/same_option_value_spec.rb..eligible_variants no option value restrictions are specified returns all variants for the product.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","Spree::ReturnItem::ExchangeVariantEligibility::SameOptionValue at ./spec/models/spree/return_item/exchange_variant_eligibility/same_option_value_spec.rb..eligible_variants returns all other variants for the same product with the same option value for the specified option type.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::ReturnItem::ExchangeVariantEligibility::SameProduct at ./spec/models/spree/return_item/exchange_variant_eligibility/same_product_spec.rb..eligible_variants does not return variants for another product.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","Spree::ReturnItem::ExchangeVariantEligibility::SameProduct at ./spec/models/spree/return_item/exchange_variant_eligibility/same_product_spec.rb..eligible_variants only returns variants that are on hand or backorderable.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","Spree::ReturnItem::ExchangeVariantEligibility::SameProduct at ./spec/models/spree/return_item/exchange_variant_eligibility/same_product_spec.rb..eligible_variants product has no variants returns the master variant for the same product.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","Spree::ReturnItem::ExchangeVariantEligibility::SameProduct at ./spec/models/spree/return_item/exchange_variant_eligibility/same_product_spec.rb..eligible_variants product has variants returns all variants for the same product.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","Spree::ReturnsCalculator at ./spec/models/spree/returns_calculator_spec.rb.compute_shipment must be overridden.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","Spree::Role at ./spec/models/spree/role_spec.rb..default_admin_role returns the default admin role.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","Spree::Role at ./spec/models/spree/role_spec.rb.with users can access users through the polymorphic association.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::RoleUser at ./spec/models/spree/role_user_spec.rb.#name returns the name of the user.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","Spree::RoleUser at ./spec/models/spree/role_user_spec.rb.Callbacks before_validation :set_default_resource sets the resource to the current store if it is not set.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","Spree::RoleUser at ./spec/models/spree/role_user_spec.rb.with different user types can associate with different user types.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::Seeds::All at ./spec/services/spree/seeds/all_spec.rb.runs without raising errors.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","Spree::Seeds::DigitalDelivery at ./spec/services/spree/seeds/digital_delivery_spec.rb.ShippingMethod creates a Digital Delivery shipping method.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::Seeds::DigitalDelivery at ./spec/services/spree/seeds/digital_delivery_spec.rb.ShippingMethod when Digital Delivery shipping method already exists doesn't create a new shipping method.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","Spree::Seeds::PaymentMethods at ./spec/services/spree/seeds/payment_methods_spec.rb.creates a Store Credit payment method.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","Spree::Seeds::PaymentMethods at ./spec/services/spree/seeds/payment_methods_spec.rb.when the Store Credit payment method already exists doesn't create a new payment method.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","Spree::Seeds::ReturnsEnvironment at ./spec/services/spree/seeds/returns_environment_spec.rb.RefundReason creates a Return processing RefundReason.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::Seeds::ReturnsEnvironment at ./spec/services/spree/seeds/returns_environment_spec.rb.RefundReason when the RefundReason already exists doesn't create a new RefundReason.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","Spree::Seeds::ReturnsEnvironment at ./spec/services/spree/seeds/returns_environment_spec.rb.ReimbursementType creates all ReimbursementTypes.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","Spree::Seeds::ReturnsEnvironment at ./spec/services/spree/seeds/returns_environment_spec.rb.ReimbursementType when ReimbursementTypes already exist doesn't create new ReimbursementTypes.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","Spree::Seeds::ReturnsEnvironment at ./spec/services/spree/seeds/returns_environment_spec.rb.ReturnAuthorizationReason creates all ReturnAuthorizationReasons.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","Spree::Seeds::ReturnsEnvironment at ./spec/services/spree/seeds/returns_environment_spec.rb.ReturnAuthorizationReason when ReturnAuthorizationReasons already exist doesn't create new ReturnAuthorizationReasons.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","Spree::Seeds::TaxCategories at ./spec/services/spree/seeds/tax_categories_spec.rb.TaxCategory creates all TaxCategories.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::Seeds::TaxCategories at ./spec/services/spree/seeds/tax_categories_spec.rb.TaxCategory when TaxCategories already exist doesn't create new TaxCategories.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","Spree::ServiceModule at ./spec/lib/spree/service_module_spec.rb.first method failed doesn't call second method.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:5\"}}","Spree::ServiceModule at ./spec/lib/spree/service_module_spec.rb.first method failed returns result which is instance of Result.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:4\"}}","Spree::ServiceModule at ./spec/lib/spree/service_module_spec.rb.first method failed returns result with failure? true.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2\"}}","Spree::ServiceModule at ./spec/lib/spree/service_module_spec.rb.first method failed returns result with success? false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","Spree::ServiceModule at ./spec/lib/spree/service_module_spec.rb.first method failed returns value from first failed method.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3\"}}","Spree::ServiceModule at ./spec/lib/spree/service_module_spec.rb.non wrapped value in last method raises WrongDataPassed.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","Spree::ServiceModule at ./spec/lib/spree/service_module_spec.rb.non wrapped value raises WrongDataPassed.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","Spree::ServiceModule at ./spec/lib/spree/service_module_spec.rb.non wrapped value returns message in exception.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","Spree::ServiceModule at ./spec/lib/spree/service_module_spec.rb.noncallable thing passed to run raises NonCallablePassedToRun.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::ServiceModule at ./spec/lib/spree/service_module_spec.rb.not compatible params passed as result raises exception.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","Spree::ServiceModule at ./spec/lib/spree/service_module_spec.rb.success calls second method.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:4\"}}","Spree::ServiceModule at ./spec/lib/spree/service_module_spec.rb.success passes empty hash if input was not provided.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:6\"}}","Spree::ServiceModule at ./spec/lib/spree/service_module_spec.rb.success passes input from call to first run method.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:5\"}}","Spree::ServiceModule at ./spec/lib/spree/service_module_spec.rb.success returns result with failure? false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2\"}}","Spree::ServiceModule at ./spec/lib/spree/service_module_spec.rb.success returns result with success? true.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","Spree::ServiceModule at ./spec/lib/spree/service_module_spec.rb.success returns value from last method.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:3\"}}","Spree::ServiceModule at ./spec/lib/spree/service_module_spec.rb.unimplemented method raises MethodNotImplemented.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","Spree::ServiceModule at ./spec/lib/spree/service_module_spec.rb.unimplemented method returns message in exception.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","Spree::Shipment at ./spec/models/spree/shipment_spec.rb.#can_get_rates? returns false if order is not digital and it does not have a ship address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:27:2\"}}","Spree::Shipment at ./spec/models/spree/shipment_spec.rb.#can_get_rates? returns false when order's ship address is not valid.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:27:3\"}}","Spree::Shipment at ./spec/models/spree/shipment_spec.rb.#can_get_rates? returns true if order is digital and it does not have a ship address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:27:1\"}}","Spree::Shipment at ./spec/models/spree/shipment_spec.rb.#can_get_rates? returns true when order's ship address is valid.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:27:4\"}}","Spree::Shipment at ./spec/models/spree/shipment_spec.rb.#cancel cancels the shipment.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:31:1\"}}","Spree::Shipment at ./spec/models/spree/shipment_spec.rb.#cancel restocks the items.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:31:2\"}}","Spree::Shipment at ./spec/models/spree/shipment_spec.rb.#cancel with backordered inventory units doesn't fill backorders when restocking inventory units.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:31:3:1\"}}","Spree::Shipment at ./spec/models/spree/shipment_spec.rb.#currency return order currency.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:25:1\"}}","Spree::Shipment at ./spec/models/spree/shipment_spec.rb.#destroy destroys linked shipping_rates.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:43:1\"}}","Spree::Shipment at ./spec/models/spree/shipment_spec.rb.#determine_state returns canceled if order is canceled?.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1\"}}","Spree::Shipment at ./spec/models/spree/shipment_spec.rb.#determine_state returns canceled when shipment is canceled.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:2\"}}","Spree::Shipment at ./spec/models/spree/shipment_spec.rb.#determine_state returns pending if backordered.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:4\"}}","Spree::Shipment at ./spec/models/spree/shipment_spec.rb.#determine_state returns pending unless order.can_ship?.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:3\"}}","Spree::Shipment at ./spec/models/spree/shipment_spec.rb.#determine_state returns pending when unpaid.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:6\"}}","Spree::Shipment at ./spec/models/spree/shipment_spec.rb.#determine_state returns ready when Config.auto_capture_on_dispatch.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:8\"}}","Spree::Shipment at ./spec/models/spree/shipment_spec.rb.#determine_state returns ready when paid.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:7\"}}","Spree::Shipment at ./spec/models/spree/shipment_spec.rb.#determine_state returns shipped when already shipped.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:5\"}}","Spree::Shipment at ./spec/models/spree/shipment_spec.rb.#digital? returns false if shipping method does not have a digital calculator.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2\"}}","Spree::Shipment at ./spec/models/spree/shipment_spec.rb.#digital? returns true if shipping method has a digital calculator.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","Spree::Shipment at ./spec/models/spree/shipment_spec.rb.#digital? when shipping method is nil returns false if shipping method is nil.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3:1\"}}","Spree::Shipment at ./spec/models/spree/shipment_spec.rb.#discounted_cost.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18\"}}","Spree::Shipment at ./spec/models/spree/shipment_spec.rb.#final_price.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:21\"}}","Spree::Shipment at ./spec/models/spree/shipment_spec.rb.#free? returns true if final_price is equal to 0.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:22:1\"}}","Spree::Shipment at ./spec/models/spree/shipment_spec.rb.#free? returns when Free Shipping promotion is applied.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:22:2\"}}","Spree::Shipment at ./spec/models/spree/shipment_spec.rb.#item_cost equals line items final amount with tax.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:2\"}}","Spree::Shipment at ./spec/models/spree/shipment_spec.rb.#item_cost equals shipment line items amount with tax.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:1\"}}","Spree::Shipment at ./spec/models/spree/shipment_spec.rb.#item_quantity returns 0 if there are no items in the shipment.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:4\"}}","Spree::Shipment at ./spec/models/spree/shipment_spec.rb.#item_quantity returns only the sum of items in the specific shipment, not in other shipments.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:3\"}}","Spree::Shipment at ./spec/models/spree/shipment_spec.rb.#item_quantity returns the sum of all manifest quantities with multiple quantities per line_item.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:1\"}}","Spree::Shipment at ./spec/models/spree/shipment_spec.rb.#item_quantity returns the sum of all manifest quantities with single quantity per line_item.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:2\"}}","Spree::Shipment at ./spec/models/spree/shipment_spec.rb.#item_weight equals line items weight.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:1\"}}","Spree::Shipment at ./spec/models/spree/shipment_spec.rb.#name returns the shipment number and shipping method name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","Spree::Shipment at ./spec/models/spree/shipment_spec.rb.#partial? when all products are included in the shipment example at ./spec/models/spree/shipment_spec.rb:85.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1:1\"}}","Spree::Shipment at ./spec/models/spree/shipment_spec.rb.#partial? when not all products are included in the shipment example at ./spec/models/spree/shipment_spec.rb:93.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2:1\"}}","Spree::Shipment at ./spec/models/spree/shipment_spec.rb.#ready with Config.auto_capture_on_dispatch == false cannot ready a shipment for an order if the order is unpaid.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:34:1:1\"}}","Spree::Shipment at ./spec/models/spree/shipment_spec.rb.#ready with Config.auto_capture_on_dispatch == true order has pending payments can fully capture an authorized payment.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:34:2:3:1\"}}","Spree::Shipment at ./spec/models/spree/shipment_spec.rb.#ready with Config.auto_capture_on_dispatch == true order has pending payments can partially capture an authorized payment.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:34:2:3:2\"}}","Spree::Shipment at ./spec/models/spree/shipment_spec.rb.#ready with Config.auto_capture_on_dispatch == true shipments ready for an order if the order is unpaid.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:34:2:1\"}}","Spree::Shipment at ./spec/models/spree/shipment_spec.rb.#ready with Config.auto_capture_on_dispatch == true tells the order to process payment in #after_ship.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:34:2:2\"}}","Spree::Shipment at ./spec/models/spree/shipment_spec.rb.#resume for a shipment item that does not track inventory skips unstocking the shipment item.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:32:4:1\"}}","Spree::Shipment at ./spec/models/spree/shipment_spec.rb.#resume transitions state to pending if the order is not ready.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:32:2\"}}","Spree::Shipment at ./spec/models/spree/shipment_spec.rb.#resume transitions state to ready if the order is ready.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:32:1\"}}","Spree::Shipment at ./spec/models/spree/shipment_spec.rb.#resume unstocks them items.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:32:3\"}}","Spree::Shipment at ./spec/models/spree/shipment_spec.rb.#ship from canceled finalizes adjustments.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:33:3:2\"}}","Spree::Shipment at ./spec/models/spree/shipment_spec.rb.#ship from canceled updates shipped_at timestamp.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:33:3:1\"}}","Spree::Shipment at ./spec/models/spree/shipment_spec.rb.#ship from ready finalizes adjustments.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:33:2:2\"}}","Spree::Shipment at ./spec/models/spree/shipment_spec.rb.#ship from ready updates shipped_at timestamp.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:33:2:1\"}}","Spree::Shipment at ./spec/models/spree/shipment_spec.rb.#ship when the shipment is canceled unstocks them items.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:33:1:1\"}}","Spree::Shipment at ./spec/models/spree/shipment_spec.rb.#store return order store.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:24:1\"}}","Spree::Shipment at ./spec/models/spree/shipment_spec.rb.#tax_total with additional taxes.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:20\"}}","Spree::Shipment at ./spec/models/spree/shipment_spec.rb.#tax_total with included taxes.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19\"}}","Spree::Shipment at ./spec/models/spree/shipment_spec.rb.#tracked? returns true if the shipment is tracked.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","Spree::Shipment at ./spec/models/spree/shipment_spec.rb.#tracked? when the shipment is not tracked returns false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2:1\"}}","Spree::Shipment at ./spec/models/spree/shipment_spec.rb.#tracking_url uses shipping method to determine url.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:40:1\"}}","Spree::Shipment at ./spec/models/spree/shipment_spec.rb.#transfer_to_location creates new shipment for same order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:41:1\"}}","Spree::Shipment at ./spec/models/spree/shipment_spec.rb.#transfer_to_location sets proper costs for new shipment.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:41:3\"}}","Spree::Shipment at ./spec/models/spree/shipment_spec.rb.#transfer_to_location sets the given stock location for new shipment.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:41:2\"}}","Spree::Shipment at ./spec/models/spree/shipment_spec.rb.#transfer_to_location updates `order.shipment_total` to the sum of shipments cost.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:41:4\"}}","Spree::Shipment at ./spec/models/spree/shipment_spec.rb.#update! when order cannot ship results in a 'pending' state.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:1:1\"}}","Spree::Shipment at ./spec/models/spree/shipment_spec.rb.#update! when order has a credit owed behaves like immutable once shipped remains in shipped state once shipped.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:4:2:1\"}}","Spree::Shipment at ./spec/models/spree/shipment_spec.rb.#update! when order has a credit owed behaves like pending if backordered has a state of pending if backordered.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:4:3:1\"}}","Spree::Shipment at ./spec/models/spree/shipment_spec.rb.#update! when order has a credit owed results in a 'ready' state.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:4:1\"}}","Spree::Shipment at ./spec/models/spree/shipment_spec.rb.#update! when order has balance due behaves like immutable once shipped remains in shipped state once shipped.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:3:2:1\"}}","Spree::Shipment at ./spec/models/spree/shipment_spec.rb.#update! when order has balance due behaves like pending if backordered has a state of pending if backordered.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:3:3:1\"}}","Spree::Shipment at ./spec/models/spree/shipment_spec.rb.#update! when order has balance due results in a 'pending' state.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:3:1\"}}","Spree::Shipment at ./spec/models/spree/shipment_spec.rb.#update! when order is paid behaves like immutable once shipped remains in shipped state once shipped.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:2:2:1\"}}","Spree::Shipment at ./spec/models/spree/shipment_spec.rb.#update! when order is paid behaves like pending if backordered has a state of pending if backordered.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:2:3:1\"}}","Spree::Shipment at ./spec/models/spree/shipment_spec.rb.#update! when order is paid results in a 'ready' state.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:2:1\"}}","Spree::Shipment at ./spec/models/spree/shipment_spec.rb.#update! when shipment state changes to shipped calls after_ship.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:5:1\"}}","Spree::Shipment at ./spec/models/spree/shipment_spec.rb.#update! when shipment state changes to shipped when using a custom shipment handler calls the custom handler's 'perform' method.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:5:3:1\"}}","Spree::Shipment at ./spec/models/spree/shipment_spec.rb.#update! when shipment state changes to shipped when using the default shipment handler calls the 'perform' method.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:5:2:1\"}}","Spree::Shipment at ./spec/models/spree/shipment_spec.rb.#update! when shipment state changes to shipped with adjustments transitions to shipped.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:5:4:1\"}}","Spree::Shipment at ./spec/models/spree/shipment_spec.rb.#weight_unit equals line items weight unit.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:17:1\"}}","Spree::Shipment at ./spec/models/spree/shipment_spec.rb.#with_free_shipping_promotion? returns false otherwise.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:23:2\"}}","Spree::Shipment at ./spec/models/spree/shipment_spec.rb.#with_free_shipping_promotion? returns true when Free Shipping promotion is applied.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:23:1\"}}","Spree::Shipment at ./spec/models/spree/shipment_spec.rb..ready_or_pending returns shipments with state ready or pending.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:45:1\"}}","Spree::Shipment at ./spec/models/spree/shipment_spec.rb.after_save line item changes does not trigger adjustment recalculation if shipment has shipped.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:37:1:2\"}}","Spree::Shipment at ./spec/models/spree/shipment_spec.rb.after_save line item changes triggers adjustment total recalculation.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:37:1:1\"}}","Spree::Shipment at ./spec/models/spree/shipment_spec.rb.after_save line item does not change does not trigger adjustment total recalculation.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:37:2:1\"}}","Spree::Shipment at ./spec/models/spree/shipment_spec.rb.behaves like lifecycle events lifecycle events shipment.created publishes created event when record is created.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","Spree::Shipment at ./spec/models/spree/shipment_spec.rb.behaves like lifecycle events lifecycle events shipment.deleted publishes deleted event when record is deleted.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:1\"}}","Spree::Shipment at ./spec/models/spree/shipment_spec.rb.behaves like lifecycle events lifecycle events shipment.updated publishes updated event when record is updated.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","Spree::Shipment at ./spec/models/spree/shipment_spec.rb.behaves like metadata can query records by metadata properties.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:10\"}}","Spree::Shipment at ./spec/models/spree/shipment_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:10.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:5\"}}","Spree::Shipment at ./spec/models/spree/shipment_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:11.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:6\"}}","Spree::Shipment at ./spec/models/spree/shipment_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:4.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","Spree::Shipment at ./spec/models/spree/shipment_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:5.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","Spree::Shipment at ./spec/models/spree/shipment_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:7.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3\"}}","Spree::Shipment at ./spec/models/spree/shipment_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:8.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:4\"}}","Spree::Shipment at ./spec/models/spree/shipment_spec.rb.behaves like metadata reads data as not symbolized keys.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:8\"}}","Spree::Shipment at ./spec/models/spree/shipment_spec.rb.behaves like metadata reads data as symbolized keys.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:7\"}}","Spree::Shipment at ./spec/models/spree/shipment_spec.rb.changes shipping rate via general update updates everything around order shipment total and state.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:36:1\"}}","Spree::Shipment at ./spec/models/spree/shipment_spec.rb.currency returns the order currency.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:38:1\"}}","Spree::Shipment at ./spec/models/spree/shipment_spec.rb.display_amount retuns a Spree::Money.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1\"}}","Spree::Shipment at ./spec/models/spree/shipment_spec.rb.display_final_price retuns a Spree::Money.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:1\"}}","Spree::Shipment at ./spec/models/spree/shipment_spec.rb.display_item_cost retuns a Spree::Money.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:1\"}}","Spree::Shipment at ./spec/models/spree/shipment_spec.rb.events canceled state transition publishes shipment.canceled event.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:46:2:1\"}}","Spree::Shipment at ./spec/models/spree/shipment_spec.rb.events resumed state transition publishes shipment.resumed event.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:46:3:1\"}}","Spree::Shipment at ./spec/models/spree/shipment_spec.rb.events shipped state transition publishes shipment.shipped event.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:46:1:1\"}}","Spree::Shipment at ./spec/models/spree/shipment_spec.rb.is backordered if one if its inventory_units is backordered.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9\"}}","Spree::Shipment at ./spec/models/spree/shipment_spec.rb.manifest returns variant expected.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:26:1\"}}","Spree::Shipment at ./spec/models/spree/shipment_spec.rb.manifest variant was removed still returns variant expected.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:26:2:1\"}}","Spree::Shipment at ./spec/models/spree/shipment_spec.rb.nil costs sets cost to 0.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:39:1\"}}","Spree::Shipment at ./spec/models/spree/shipment_spec.rb.number generation generates a number containing a letter + 11 numbers.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1\"}}","Spree::Shipment at ./spec/models/spree/shipment_spec.rb.precision of pre_tax_amount keeps four digits of precision even when reloading.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","Spree::Shipment at ./spec/models/spree/shipment_spec.rb.set up new inventory units associates variant and order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:42:1\"}}","Spree::Shipment at ./spec/models/spree/shipment_spec.rb.shipping_rates refresh_rates can't get rates without a shipping address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:28:2:4\"}}","Spree::Shipment at ./spec/models/spree/shipment_spec.rb.shipping_rates refresh_rates does not refresh if shipment is shipped.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:28:2:3\"}}","Spree::Shipment at ./spec/models/spree/shipment_spec.rb.shipping_rates refresh_rates handles no shipping_method selection.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:28:2:2\"}}","Spree::Shipment at ./spec/models/spree/shipment_spec.rb.shipping_rates refresh_rates requests new rates, and maintain shipping_method selection.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:28:2:1\"}}","Spree::Shipment at ./spec/models/spree/shipment_spec.rb.shipping_rates refresh_rates to_package uses symbols for states when adding contents to package.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:28:2:5:1\"}}","Spree::Shipment at ./spec/models/spree/shipment_spec.rb.shipping_rates returns shipping_method from selected shipping_rate.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:28:1\"}}","Spree::Shipment at ./spec/models/spree/shipment_spec.rb.state changes are logged to the database.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:44:1\"}}","Spree::Shipment at ./spec/models/spree/shipment_spec.rb.updates cost when selected shipping rate is present does not factor in included adjustments to adjustment total.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:35:3\"}}","Spree::Shipment at ./spec/models/spree/shipment_spec.rb.updates cost when selected shipping rate is present factors in additional adjustments to adjustment total.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:35:2\"}}","Spree::Shipment at ./spec/models/spree/shipment_spec.rb.updates cost when selected shipping rate is present updates shipment totals.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:35:1\"}}","Spree::Shipment at ./spec/models/spree/shipment_spec.rb.when order is completed with inventory tracking validates with inventory.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:30:1:1\"}}","Spree::Shipment at ./spec/models/spree/shipment_spec.rb.when order is completed without inventory tracking validates with no inventory.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:30:2:1\"}}","Spree::Shipment::CustomEvents at ./spec/models/spree/shipment/custom_events_spec.rb.order.shipped event does not publish order.shipped when order has unshipped shipments.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","Spree::Shipment::CustomEvents at ./spec/models/spree/shipment/custom_events_spec.rb.order.shipped event publishes order.shipped when shipment ships and order is fully shipped.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","Spree::Shipment::CustomEvents at ./spec/models/spree/shipment/custom_events_spec.rb.shipment.shipped event does not publish when events are disabled.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","Spree::Shipment::CustomEvents at ./spec/models/spree/shipment/custom_events_spec.rb.shipment.shipped event publishes shipment.shipped when shipment state changes to shipped.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::ShipmentHelper at ./spec/helpers/shipment_helper_spec.rb.#shipment_tracking_link_to with name passed in params creates link with passed value as a name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","Spree::ShipmentHelper at ./spec/helpers/shipment_helper_spec.rb.#shipment_tracking_link_to with no tracking_url returns empty string.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1\"}}","Spree::ShipmentHelper at ./spec/helpers/shipment_helper_spec.rb.#shipment_tracking_link_to with options sets options for link.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5:1\"}}","Spree::ShipmentHelper at ./spec/helpers/shipment_helper_spec.rb.#shipment_tracking_link_to with tracking and tracking_url creates link with tracking as a name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","Spree::ShipmentHelper at ./spec/helpers/shipment_helper_spec.rb.#shipment_tracking_link_to with tracking_url only creates a link with tracking_url as a name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","Spree::Shipments::AddItem at ./spec/services/spree/shipments/add_item_spec.rb.missing variant example at ./spec/services/spree/shipments/add_item_spec.rb:91.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","Spree::Shipments::AddItem at ./spec/services/spree/shipments/add_item_spec.rb.missing variant example at ./spec/services/spree/shipments/add_item_spec.rb:92.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","Spree::Shipments::AddItem at ./spec/services/spree/shipments/add_item_spec.rb.valid attributes with existing line item adds quantity to the existing line item.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:2\"}}","Spree::Shipments::AddItem at ./spec/services/spree/shipments/add_item_spec.rb.valid attributes with existing line item does not create a new line item.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","Spree::Shipments::AddItem at ./spec/services/spree/shipments/add_item_spec.rb.valid attributes with existing line item updates line item totals.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:3\"}}","Spree::Shipments::AddItem at ./spec/services/spree/shipments/add_item_spec.rb.valid attributes without pre-existing line item behaves like creates a line item creates new line item record.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:2\"}}","Spree::Shipments::AddItem at ./spec/services/spree/shipments/add_item_spec.rb.valid attributes without pre-existing line item behaves like creates a line item example at ./spec/services/spree/shipments/add_item_spec.rb:28.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","Spree::Shipments::AddItem at ./spec/services/spree/shipments/add_item_spec.rb.valid attributes without quantity passed creates new line item record.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2\"}}","Spree::Shipments::AddItem at ./spec/services/spree/shipments/add_item_spec.rb.valid attributes without quantity passed example at ./spec/services/spree/shipments/add_item_spec.rb:49.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","Spree::Shipments::Create at ./spec/services/spree/shipments/create_spec.rb.missing order example at ./spec/services/spree/shipments/create_spec.rb:102.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","Spree::Shipments::Create at ./spec/services/spree/shipments/create_spec.rb.missing order example at ./spec/services/spree/shipments/create_spec.rb:103.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","Spree::Shipments::Create at ./spec/services/spree/shipments/create_spec.rb.missing stock location example at ./spec/services/spree/shipments/create_spec.rb:116.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","Spree::Shipments::Create at ./spec/services/spree/shipments/create_spec.rb.missing stock location example at ./spec/services/spree/shipments/create_spec.rb:117.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2\"}}","Spree::Shipments::Create at ./spec/services/spree/shipments/create_spec.rb.missing variant example at ./spec/services/spree/shipments/create_spec.rb:88.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","Spree::Shipments::Create at ./spec/services/spree/shipments/create_spec.rb.missing variant example at ./spec/services/spree/shipments/create_spec.rb:89.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","Spree::Shipments::Create at ./spec/services/spree/shipments/create_spec.rb.valid attributes with existing line item adds quantity to the existing line item.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:3\"}}","Spree::Shipments::Create at ./spec/services/spree/shipments/create_spec.rb.valid attributes with existing line item behaves like creates a shipment creates new shipment record.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1:1\"}}","Spree::Shipments::Create at ./spec/services/spree/shipments/create_spec.rb.valid attributes with existing line item behaves like creates a shipment example at ./spec/services/spree/shipments/create_spec.rb:35.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1:2\"}}","Spree::Shipments::Create at ./spec/services/spree/shipments/create_spec.rb.valid attributes with existing line item behaves like creates a shipment example at ./spec/services/spree/shipments/create_spec.rb:36.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1:3\"}}","Spree::Shipments::Create at ./spec/services/spree/shipments/create_spec.rb.valid attributes with existing line item does not create a new line item.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2\"}}","Spree::Shipments::Create at ./spec/services/spree/shipments/create_spec.rb.valid attributes with existing line item updates line item totals.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:4\"}}","Spree::Shipments::Create at ./spec/services/spree/shipments/create_spec.rb.valid attributes without pre-existing line item behaves like creates a line item creates new line item record.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","Spree::Shipments::Create at ./spec/services/spree/shipments/create_spec.rb.valid attributes without pre-existing line item behaves like creates a shipment creates new shipment record.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","Spree::Shipments::Create at ./spec/services/spree/shipments/create_spec.rb.valid attributes without pre-existing line item behaves like creates a shipment example at ./spec/services/spree/shipments/create_spec.rb:35.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:2\"}}","Spree::Shipments::Create at ./spec/services/spree/shipments/create_spec.rb.valid attributes without pre-existing line item behaves like creates a shipment example at ./spec/services/spree/shipments/create_spec.rb:36.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:3\"}}","Spree::Shipments::RemoveItem at ./spec/services/spree/shipments/remove_item_spec.rb.missing variant example at ./spec/services/spree/shipments/remove_item_spec.rb:93.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","Spree::Shipments::RemoveItem at ./spec/services/spree/shipments/remove_item_spec.rb.missing variant example at ./spec/services/spree/shipments/remove_item_spec.rb:94.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","Spree::Shipments::RemoveItem at ./spec/services/spree/shipments/remove_item_spec.rb.valid attributes entire shipment & line item qty removed behaves like removes line item example at ./spec/services/spree/shipments/remove_item_spec.rb:30.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:1\"}}","Spree::Shipments::RemoveItem at ./spec/services/spree/shipments/remove_item_spec.rb.valid attributes entire shipment & line item qty removed behaves like removes shipment example at ./spec/services/spree/shipments/remove_item_spec.rb:34.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:3:1\"}}","Spree::Shipments::RemoveItem at ./spec/services/spree/shipments/remove_item_spec.rb.valid attributes entire shipment & line item qty removed behaves like removes shipment example at ./spec/services/spree/shipments/remove_item_spec.rb:35.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:3:2\"}}","Spree::Shipments::RemoveItem at ./spec/services/spree/shipments/remove_item_spec.rb.valid attributes entire shipment & line item qty removed behaves like successful example at ./spec/services/spree/shipments/remove_item_spec.rb:26.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1:1\"}}","Spree::Shipments::RemoveItem at ./spec/services/spree/shipments/remove_item_spec.rb.valid attributes no quantity is passed behaves like removes line item example at ./spec/services/spree/shipments/remove_item_spec.rb:30.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:2:1\"}}","Spree::Shipments::RemoveItem at ./spec/services/spree/shipments/remove_item_spec.rb.valid attributes no quantity is passed behaves like removes shipment example at ./spec/services/spree/shipments/remove_item_spec.rb:34.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:3:1\"}}","Spree::Shipments::RemoveItem at ./spec/services/spree/shipments/remove_item_spec.rb.valid attributes no quantity is passed behaves like removes shipment example at ./spec/services/spree/shipments/remove_item_spec.rb:35.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:3:2\"}}","Spree::Shipments::RemoveItem at ./spec/services/spree/shipments/remove_item_spec.rb.valid attributes no quantity is passed behaves like successful example at ./spec/services/spree/shipments/remove_item_spec.rb:26.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1:1\"}}","Spree::Shipments::RemoveItem at ./spec/services/spree/shipments/remove_item_spec.rb.valid attributes part of the line item qty removed behaves like successful example at ./spec/services/spree/shipments/remove_item_spec.rb:26.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","Spree::Shipments::RemoveItem at ./spec/services/spree/shipments/remove_item_spec.rb.valid attributes part of the line item qty removed decreases line item quantity.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:4\"}}","Spree::Shipments::RemoveItem at ./spec/services/spree/shipments/remove_item_spec.rb.valid attributes part of the line item qty removed example at ./spec/services/spree/shipments/remove_item_spec.rb:51.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2\"}}","Spree::Shipments::RemoveItem at ./spec/services/spree/shipments/remove_item_spec.rb.valid attributes part of the line item qty removed example at ./spec/services/spree/shipments/remove_item_spec.rb:52.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3\"}}","Spree::Shipments::RemoveItem at ./spec/services/spree/shipments/remove_item_spec.rb.valid attributes part of the line item qty removed example at ./spec/services/spree/shipments/remove_item_spec.rb:60.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:5\"}}","Spree::Shipments::RemoveItem at ./spec/services/spree/shipments/remove_item_spec.rb.valid attributes part of the line item qty removed example at ./spec/services/spree/shipments/remove_item_spec.rb:61.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:6\"}}","Spree::ShippingCalculator at ./spec/models/spree/shipping_calculator_spec.rb.calculates totals for content_items.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6\"}}","Spree::ShippingCalculator at ./spec/models/spree/shipping_calculator_spec.rb.checks availability for a package.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5\"}}","Spree::ShippingCalculator at ./spec/models/spree/shipping_calculator_spec.rb.compute_package must be overridden.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4\"}}","Spree::ShippingCalculator at ./spec/models/spree/shipping_calculator_spec.rb.compute_shipment must be overridden.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3\"}}","Spree::ShippingCalculator at ./spec/models/spree/shipping_calculator_spec.rb.computes with a package.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2\"}}","Spree::ShippingCalculator at ./spec/models/spree/shipping_calculator_spec.rb.computes with a shipment.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","Spree::ShippingCategory at ./spec/models/spree/shipping_category_spec.rb.#includes_digital_shipping_method? returns true if the shipping category includes a digital shipping method.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","Spree::ShippingCategory at ./spec/models/spree/shipping_category_spec.rb.Validations has a valid factory.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::ShippingCategory at ./spec/models/spree/shipping_category_spec.rb.Validations requires name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","Spree::ShippingCategory at ./spec/models/spree/shipping_category_spec.rb.Validations validates uniqueness.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb.#available_to_display? when available on backend example at ./spec/models/spree/shipping_method_spec.rb:163.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:2:1\"}}","Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb.#available_to_display? when available on backend example at ./spec/models/spree/shipping_method_spec.rb:164.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:2:2\"}}","Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb.#available_to_display? when available on backend example at ./spec/models/spree/shipping_method_spec.rb:165.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:2:3\"}}","Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb.#available_to_display? when available on frontend example at ./spec/models/spree/shipping_method_spec.rb:157.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1:1\"}}","Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb.#available_to_display? when available on frontend example at ./spec/models/spree/shipping_method_spec.rb:158.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1:2\"}}","Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb.#available_to_display? when available on frontend example at ./spec/models/spree/shipping_method_spec.rb:159.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1:3\"}}","Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb.#backend? example at ./spec/models/spree/shipping_method_spec.rb:176.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:1\"}}","Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb.#backend? example at ./spec/models/spree/shipping_method_spec.rb:177.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:2\"}}","Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb.#backend? example at ./spec/models/spree/shipping_method_spec.rb:178.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:3\"}}","Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb.#build_tracking_url shipping method does not have a tracking URL mask on file uses tracking number gem to build tracking url.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2:1\"}}","Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb.#build_tracking_url shipping method has a tracking URL mask on file tracking number has spaces returns a single URL with '%20' in lieu of spaces.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1:1:1\"}}","Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb.#delivery_range when both are the same example at ./spec/models/spree/shipping_method_spec.rb:195.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:3:1\"}}","Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb.#delivery_range when only one transit day value is set when only maximum day is set example at ./spec/models/spree/shipping_method_spec.rb:208.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:4:2:1\"}}","Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb.#delivery_range when only one transit day value is set when only minimum day is set example at ./spec/models/spree/shipping_method_spec.rb:202.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:4:1:1\"}}","Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb.#delivery_range with set estimated_transit_business_days_min and estimated_transit_business_days_max example at ./spec/models/spree/shipping_method_spec.rb:189.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:2:1\"}}","Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb.#delivery_range without set estimated_transit_business_days_min and estimated_transit_business_days_max example at ./spec/models/spree/shipping_method_spec.rb:183.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:1:1\"}}","Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb.#display_estimated_price example at ./spec/models/spree/shipping_method_spec.rb:214.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:1\"}}","Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb.#display_estimated_price with the free rate example at ./spec/models/spree/shipping_method_spec.rb:219.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:2:1\"}}","Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb.#frontend? example at ./spec/models/spree/shipping_method_spec.rb:170.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1\"}}","Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb.#frontend? example at ./spec/models/spree/shipping_method_spec.rb:171.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2\"}}","Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb.#frontend? example at ./spec/models/spree/shipping_method_spec.rb:172.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:3\"}}","Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb.#requires_zone_check? returns false if the shipping method is digital.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb.#requires_zone_check? returns true if the shipping method is not digital.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb.#shipments can gather all the related shipments.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb.behaves like metadata can query records by metadata properties.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:10\"}}","Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:10.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:11.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:4.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:5.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:7.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:8.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb.behaves like metadata reads data as not symbolized keys.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8\"}}","Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb.behaves like metadata reads data as symbolized keys.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7\"}}","Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb.calculators rejects calculators that don't inherit from Spree::ShippingCalculator.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb.factory sets calculable correctly.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb.scopes .available example at ./spec/models/spree/shipping_method_spec.rb:22.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb.scopes .available_on_back_end example at ./spec/models/spree/shipping_method_spec.rb:34.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:1\"}}","Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb.scopes .available_on_front_end example at ./spec/models/spree/shipping_method_spec.rb:28.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb.soft deletion soft-deletes when destroy is called.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1\"}}","Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb.validations shipping category is required adds error to base.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:3:1:2\"}}","Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb.validations shipping category is required example at ./spec/models/spree/shipping_method_spec.rb:92.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:3:1:1\"}}","Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb.validations shipping category one associated example at ./spec/models/spree/shipping_method_spec.rb:105.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:3:2:1\"}}","Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb.validations validates presence of display_on.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2\"}}","Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb.validations validates presence of name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","Spree::ShippingRate at ./spec/models/spree/shipping_rate_spec.rb.#delivery_range returns the delivery range for the shipping method.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","Spree::ShippingRate at ./spec/models/spree/shipping_rate_spec.rb.#display_delivery_range returns the display delivery range for the shipping method.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","Spree::ShippingRate at ./spec/models/spree/shipping_rate_spec.rb.#display_price when tax included in price when the tax rate is from another zone deducts the other zone's VAT from the calculated shipping rate.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","Spree::ShippingRate at ./spec/models/spree/shipping_rate_spec.rb.#display_price when tax included in price when the tax rate is from another zone when cost is zero shows no tax amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:2:1\"}}","Spree::ShippingRate at ./spec/models/spree/shipping_rate_spec.rb.#display_price when tax included in price when the tax rate is from the default zone shows correct tax amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","Spree::ShippingRate at ./spec/models/spree/shipping_rate_spec.rb.#display_price when tax included in price when the tax rate is from the default zone when cost is zero shows no tax amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:2:1\"}}","Spree::ShippingRate at ./spec/models/spree/shipping_rate_spec.rb.#display_price when tax is additional to price shows correct tax amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","Spree::ShippingRate at ./spec/models/spree/shipping_rate_spec.rb.#display_price when tax is additional to price when cost is zero shows no tax amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:1\"}}","Spree::ShippingRate at ./spec/models/spree/shipping_rate_spec.rb.#display_price when tax rate is not shown in label shows no tax amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1\"}}","Spree::ShippingRate at ./spec/models/spree/shipping_rate_spec.rb.#display_price when the currency is JPY displays the price in yen.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","Spree::ShippingRate at ./spec/models/spree/shipping_rate_spec.rb.#final_price does not return 0 when shipment is free because of selected shipping rate.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:4\"}}","Spree::ShippingRate at ./spec/models/spree/shipping_rate_spec.rb.#final_price returns 0 if cost is lesser than the discount amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2\"}}","Spree::ShippingRate at ./spec/models/spree/shipping_rate_spec.rb.#final_price returns 0 if free shipping promotion is applied.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","Spree::ShippingRate at ./spec/models/spree/shipping_rate_spec.rb.#final_price returns cost minus discount amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3\"}}","Spree::ShippingRate at ./spec/models/spree/shipping_rate_spec.rb.#free? when the shipping rate cost is 0 example at ./spec/models/spree/shipping_rate_spec.rb:208.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1:1\"}}","Spree::ShippingRate at ./spec/models/spree/shipping_rate_spec.rb.#free? when the shipping rate cost is not 0 example at ./spec/models/spree/shipping_rate_spec.rb:217.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2:1\"}}","Spree::ShippingRate at ./spec/models/spree/shipping_rate_spec.rb.#free? when the shipping rate cost is not 0 when the discount amount is equal to the cost example at ./spec/models/spree/shipping_rate_spec.rb:235.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2:3:1\"}}","Spree::ShippingRate at ./spec/models/spree/shipping_rate_spec.rb.#free? when the shipping rate cost is not 0 when the shipment has a free shipping promotion example at ./spec/models/spree/shipping_rate_spec.rb:227.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2:2:1\"}}","Spree::ShippingRate at ./spec/models/spree/shipping_rate_spec.rb.#shipping_method can be retrieved even when deleted.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","Spree::ShippingRate at ./spec/models/spree/shipping_rate_spec.rb.#shipping_method can be retrieved.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","Spree::ShippingRate at ./spec/models/spree/shipping_rate_spec.rb.#tax_amount without tax rate returns 0.0.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1\"}}","Spree::ShippingRate at ./spec/models/spree/shipping_rate_spec.rb.#tax_rate can be retrieved even when deleted.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","Spree::ShippingRate at ./spec/models/spree/shipping_rate_spec.rb.#tax_rate can be retrieved.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","Spree::State at ./spec/models/spree/state_spec.rb.can find a state by name or abbr.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","Spree::State at ./spec/models/spree/state_spec.rb.can find all states group by country id.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2\"}}","Spree::State at ./spec/models/spree/state_spec.rb.whitelisted_ransackable_attributes example at ./spec/models/spree/state_spec.rb:16.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","Spree::Stock::AvailabilityValidator at ./spec/models/spree/stock/availability_validator_spec.rb.considers existing inventory_units sufficient.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3\"}}","Spree::Stock::AvailabilityValidator at ./spec/models/spree/stock/availability_validator_spec.rb.is invalid when supply is insufficent.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2\"}}","Spree::Stock::AvailabilityValidator at ./spec/models/spree/stock/availability_validator_spec.rb.is valid when supply is sufficient and product is active.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","Spree::Stock::AvailabilityValidator at ./spec/models/spree/stock/availability_validator_spec.rb.is valid when the quantity is zero.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4\"}}","Spree::Stock::AvailabilityValidator at ./spec/models/spree/stock/availability_validator_spec.rb.when supply is sufficient but product is not active shows a message about product status and not quantity.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","Spree::Stock::ContentItem at ./spec/models/spree/stock/content_item_spec.rb.#amount calculates the amount based on line_item's price.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","Spree::Stock::ContentItem at ./spec/models/spree/stock/content_item_spec.rb.#dimension calculate the total dimension of the variant.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","Spree::Stock::ContentItem at ./spec/models/spree/stock/content_item_spec.rb.#volume calculate the total volume of the variant.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::Stock::Coordinator at ./spec/models/spree/stock/coordinator_spec.rb.#shipments puts the order's ship address on the shipments.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","Spree::Stock::Coordinator at ./spec/models/spree/stock/coordinator_spec.rb.#shipments turns packages into shipments.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","Spree::Stock::Coordinator at ./spec/models/spree/stock/coordinator_spec.rb.build packages builds a package for every stock location.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","Spree::Stock::Coordinator at ./spec/models/spree/stock/coordinator_spec.rb.build packages missing stock items in stock location builds packages only for valid stock locations.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","Spree::Stock::Coordinator at ./spec/models/spree/stock/coordinator_spec.rb.packages builds, prioritizes and estimates.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::Stock::Differentiator at ./spec/models/spree/stock/differentiator_spec.rb.calculates the missing items.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2\"}}","Spree::Stock::Differentiator at ./spec/models/spree/stock/differentiator_spec.rb.example at ./spec/models/spree/stock/differentiator_spec.rb:31.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","Spree::Stock::Estimator at ./spec/models/spree/stock/estimator_spec.rb.#shipping rates VAT price calculation when the order does not have a tax zone behaves like shipping rate matches returns shipping rates.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:12:1:1:1\"}}","Spree::Stock::Estimator at ./spec/models/spree/stock/estimator_spec.rb.#shipping rates VAT price calculation when the order's tax zone is a non-VAT zone deducts the default VAT from the cost.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:12:3:1\"}}","Spree::Stock::Estimator at ./spec/models/spree/stock/estimator_spec.rb.#shipping rates VAT price calculation when the order's tax zone is a zone with VAT outside the default zone deducts the default vat and applies the foreign vat to calculate the price.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:12:4:1\"}}","Spree::Stock::Estimator at ./spec/models/spree/stock/estimator_spec.rb.#shipping rates VAT price calculation when the order's tax zone is the default zone behaves like shipping rate matches returns shipping rates.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:12:2:1:1\"}}","Spree::Stock::Estimator at ./spec/models/spree/stock/estimator_spec.rb.#shipping rates general shipping methods selects the most affordable shipping rate and doesn't raise exception over nil cost.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:9:2\"}}","Spree::Stock::Estimator at ./spec/models/spree/stock/estimator_spec.rb.#shipping rates general shipping methods selects the most affordable shipping rate.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:9:1\"}}","Spree::Stock::Estimator at ./spec/models/spree/stock/estimator_spec.rb.#shipping rates if the currency is different than the order's currency behaves like shipping rate doesn't match does not return shipping rates.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7:1:1\"}}","Spree::Stock::Estimator at ./spec/models/spree/stock/estimator_spec.rb.#shipping rates includes tax adjustments if applicable links the shipping rate and the tax rate.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:11:1\"}}","Spree::Stock::Estimator at ./spec/models/spree/stock/estimator_spec.rb.#shipping rates involves backend only shipping methods does not return backend rates at all.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:10:1\"}}","Spree::Stock::Estimator at ./spec/models/spree/stock/estimator_spec.rb.#shipping rates involves backend only shipping methods doesn't select backend rates even if they're more affordable.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:10:2\"}}","Spree::Stock::Estimator at ./spec/models/spree/stock/estimator_spec.rb.#shipping rates sorts shipping rates by cost.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8\"}}","Spree::Stock::Estimator at ./spec/models/spree/stock/estimator_spec.rb.#shipping rates when the calculator is not available for that order behaves like shipping rate doesn't match does not return shipping rates.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1:1\"}}","Spree::Stock::Estimator at ./spec/models/spree/stock/estimator_spec.rb.#shipping rates when the currency is an empty string behaves like shipping rate matches returns shipping rates.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5:1:1\"}}","Spree::Stock::Estimator at ./spec/models/spree/stock/estimator_spec.rb.#shipping rates when the currency is nil behaves like shipping rate matches returns shipping rates.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1:1\"}}","Spree::Stock::Estimator at ./spec/models/spree/stock/estimator_spec.rb.#shipping rates when the current matches the order's currency behaves like shipping rate matches returns shipping rates.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6:1:1\"}}","Spree::Stock::Estimator at ./spec/models/spree/stock/estimator_spec.rb.#shipping rates when the order's ship address is in a different zone behaves like shipping rate doesn't match does not return shipping rates.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1:1\"}}","Spree::Stock::Estimator at ./spec/models/spree/stock/estimator_spec.rb.#shipping rates when the order's ship address is in the same zone behaves like shipping rate matches returns shipping rates.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","Spree::Stock::InventoryUnitBuilder at ./spec/models/spree/stock/inventory_unit_builder_spec.rb.#units builds the inventory units as pending.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","Spree::Stock::InventoryUnitBuilder at ./spec/models/spree/stock/inventory_unit_builder_spec.rb.#units returns an inventory unit for each quantity for the order's line items.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::Stock::InventoryUnitBuilder at ./spec/models/spree/stock/inventory_unit_builder_spec.rb.#units sets the order_id on inventory units.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","Spree::Stock::Package at ./spec/models/spree/stock/package_spec.rb.#add_multiple adds multiple inventory units.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1\"}}","Spree::Stock::Package at ./spec/models/spree/stock/package_spec.rb.#add_multiple allows adding with a state.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:2\"}}","Spree::Stock::Package at ./spec/models/spree/stock/package_spec.rb.#add_multiple defaults to adding with the on hand state.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:3\"}}","Spree::Stock::Package at ./spec/models/spree/stock/package_spec.rb.#dimension calculates the sum of the dimension of all the items.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:1\"}}","Spree::Stock::Package at ./spec/models/spree/stock/package_spec.rb.#order there is an inventory unit returns an order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:1:1\"}}","Spree::Stock::Package at ./spec/models/spree/stock/package_spec.rb.#order there is no inventory unit returns nil.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:2:1\"}}","Spree::Stock::Package at ./spec/models/spree/stock/package_spec.rb.#remove there is a content item for the inventory unit removes that content item.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1:1\"}}","Spree::Stock::Package at ./spec/models/spree/stock/package_spec.rb.#remove there is no content item for the inventory unit doesn't change the set of content items.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2:1\"}}","Spree::Stock::Package at ./spec/models/spree/stock/package_spec.rb.#volume calculates the sum of the volume of all the items.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:1\"}}","Spree::Stock::Package at ./spec/models/spree/stock/package_spec.rb.builds a list of shipping methods common to all categories.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7\"}}","Spree::Stock::Package at ./spec/models/spree/stock/package_spec.rb.calculates the quantity by state.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4\"}}","Spree::Stock::Package at ./spec/models/spree/stock/package_spec.rb.calculates the weight of all the contents.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","Spree::Stock::Package at ./spec/models/spree/stock/package_spec.rb.can convert to a shipment.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9\"}}","Spree::Stock::Package at ./spec/models/spree/stock/package_spec.rb.currency returns the currency based on the currency from the order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","Spree::Stock::Package at ./spec/models/spree/stock/package_spec.rb.filters by on_hand and backordered.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3\"}}","Spree::Stock::Package at ./spec/models/spree/stock/package_spec.rb.finds content item for an inventory unit.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6\"}}","Spree::Stock::Package at ./spec/models/spree/stock/package_spec.rb.returns nil for content item not found.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5\"}}","Spree::Stock::Package at ./spec/models/spree/stock/package_spec.rb.when no categories builds an empty list of shipping methods.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1\"}}","Spree::Stock::Packer at ./spec/models/spree/stock/packer_spec.rb.default_package contains all the items.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","Spree::Stock::Packer at ./spec/models/spree/stock/packer_spec.rb.default_package doesn't track inventory levels doesn't bother stock items status in stock location.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:4:1\"}}","Spree::Stock::Packer at ./spec/models/spree/stock/packer_spec.rb.default_package doesn't track inventory levels still creates package with proper quantity.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:4:2\"}}","Spree::Stock::Packer at ./spec/models/spree/stock/packer_spec.rb.default_package location doesn't have order items in stock builds an empty package.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:1\"}}","Spree::Stock::Packer at ./spec/models/spree/stock/packer_spec.rb.default_package variants are added as backordered without enough on_hand.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","Spree::Stock::Packer at ./spec/models/spree/stock/packer_spec.rb.packages allows users to set splitters to an empty array.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","Spree::Stock::Packer at ./spec/models/spree/stock/packer_spec.rb.packages builds an array of packages.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::Stock::Prioritizer at ./spec/models/spree/stock/prioritizer_spec.rb.1st has backorder, 2nd has all.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6\"}}","Spree::Stock::Prioritizer at ./spec/models/spree/stock/prioritizer_spec.rb.1st has backorder, 2nd has some.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5\"}}","Spree::Stock::Prioritizer at ./spec/models/spree/stock/prioritizer_spec.rb.1st has some, 2nd has remaining.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4\"}}","Spree::Stock::Prioritizer at ./spec/models/spree/stock/prioritizer_spec.rb.keeps a single package.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","Spree::Stock::Prioritizer at ./spec/models/spree/stock/prioritizer_spec.rb.removes duplicate packages.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2\"}}","Spree::Stock::Prioritizer at ./spec/models/spree/stock/prioritizer_spec.rb.split over 2 packages.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3\"}}","Spree::Stock::Quantifier at ./spec/models/spree/stock/quantifier_spec.rb.example at ./spec/models/spree/stock/quantifier_spec.rb:21.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","Spree::Stock::Quantifier at ./spec/models/spree/stock/quantifier_spec.rb.example at ./spec/models/spree/stock/quantifier_spec.rb:22.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2\"}}","Spree::Stock::Quantifier at ./spec/models/spree/stock/quantifier_spec.rb.with a single stock location/item total_on_hand should match stock_item.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","Spree::Stock::Quantifier at ./spec/models/spree/stock/quantifier_spec.rb.with a single stock location/item when variant is available when stock item allows backordering behaves like unlimited supply can_supply? any amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:3:2:1\"}}","Spree::Stock::Quantifier at ./spec/models/spree/stock/quantifier_spec.rb.with a single stock location/item when variant is available when stock item allows backordering example at ./spec/models/spree/stock/quantifier_spec.rb:51.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:3:1\"}}","Spree::Stock::Quantifier at ./spec/models/spree/stock/quantifier_spec.rb.with a single stock location/item when variant is available when stock item prevents backordering can_supply? only upto total_on_hand.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:4:2\"}}","Spree::Stock::Quantifier at ./spec/models/spree/stock/quantifier_spec.rb.with a single stock location/item when variant is available when stock item prevents backordering example at ./spec/models/spree/stock/quantifier_spec.rb:59.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:4:1\"}}","Spree::Stock::Quantifier at ./spec/models/spree/stock/quantifier_spec.rb.with a single stock location/item when variant is available when track_inventory_levels is false behaves like unlimited supply can_supply? any amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1:2:1\"}}","Spree::Stock::Quantifier at ./spec/models/spree/stock/quantifier_spec.rb.with a single stock location/item when variant is available when track_inventory_levels is false example at ./spec/models/spree/stock/quantifier_spec.rb:37.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1:1\"}}","Spree::Stock::Quantifier at ./spec/models/spree/stock/quantifier_spec.rb.with a single stock location/item when variant is available when variant inventory tracking is off behaves like unlimited supply can_supply? any amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:2:2:1\"}}","Spree::Stock::Quantifier at ./spec/models/spree/stock/quantifier_spec.rb.with a single stock location/item when variant is available when variant inventory tracking is off example at ./spec/models/spree/stock/quantifier_spec.rb:45.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:2:1\"}}","Spree::Stock::Quantifier at ./spec/models/spree/stock/quantifier_spec.rb.with a single stock location/item when variant is not available example at ./spec/models/spree/stock/quantifier_spec.rb:74.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3:1\"}}","Spree::Stock::Quantifier at ./spec/models/spree/stock/quantifier_spec.rb.with multiple stock locations/items total_on_hand should total all active stock_items.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","Spree::Stock::Quantifier at ./spec/models/spree/stock/quantifier_spec.rb.with multiple stock locations/items when variant is available when all stock items prevent backordering can_supply? upto total_on_hand.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:2:2\"}}","Spree::Stock::Quantifier at ./spec/models/spree/stock/quantifier_spec.rb.with multiple stock locations/items when variant is available when all stock items prevent backordering example at ./spec/models/spree/stock/quantifier_spec.rb:106.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:2:1\"}}","Spree::Stock::Quantifier at ./spec/models/spree/stock/quantifier_spec.rb.with multiple stock locations/items when variant is available when any stock item allows backordering behaves like unlimited supply can_supply? any amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1:2:1\"}}","Spree::Stock::Quantifier at ./spec/models/spree/stock/quantifier_spec.rb.with multiple stock locations/items when variant is available when any stock item allows backordering example at ./spec/models/spree/stock/quantifier_spec.rb:98.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1:1\"}}","Spree::Stock::Quantifier at ./spec/models/spree/stock/quantifier_spec.rb.with multiple stock locations/items when variant is not available example at ./spec/models/spree/stock/quantifier_spec.rb:121.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3:1\"}}","Spree::Stock::Splitter::Backordered at ./spec/models/spree/stock/splitter/backordered_spec.rb.splits packages by status.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","Spree::Stock::Splitter::Base at ./spec/models/spree/stock/splitter/base_spec.rb.continues to splitter chain example at ./spec/models/spree/stock/splitter/base_spec.rb:17.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::Stock::Splitter::Digital at ./spec/models/spree/stock/splitter/digital_spec.rb.splits each package by product digital status.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","Spree::Stock::Splitter::ShippingCategory at ./spec/models/spree/stock/splitter/shipping_category_spec.rb.splits each package by shipping category.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","Spree::Stock::Splitter::Weight at ./spec/models/spree/stock/splitter/weight_spec.rb.with multiple packages splits and keeps splitting until all packages are underweight.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","Spree::Stock::Splitter::Weight at ./spec/models/spree/stock/splitter/weight_spec.rb.with packages that can be reduced splits and keeps splitting until all packages are underweight.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::Stock::Splitter::Weight at ./spec/models/spree/stock/splitter/weight_spec.rb.with packages that can not be reduced handles packages that can not be reduced.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","Spree::StockItem at ./spec/models/spree/stock_item_spec.rb.#after_save binary_inventory_cache is set to false (default) in_stock? changes touches its variant.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1:1:1\"}}","Spree::StockItem at ./spec/models/spree/stock_item_spec.rb.#after_save binary_inventory_cache is set to false (default) in_stock? does not change touches its variant.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1:2:1\"}}","Spree::StockItem at ./spec/models/spree/stock_item_spec.rb.#after_save binary_inventory_cache is set to true in_stock? changes touches its variant.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2:1:1\"}}","Spree::StockItem at ./spec/models/spree/stock_item_spec.rb.#after_save binary_inventory_cache is set to true in_stock? does not change does not touch its variant.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2:2:1\"}}","Spree::StockItem at ./spec/models/spree/stock_item_spec.rb.#after_save binary_inventory_cache is set to true when a new stock location is added touches its variant.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2:3:1\"}}","Spree::StockItem at ./spec/models/spree/stock_item_spec.rb.#after_touch touches its variant.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:1\"}}","Spree::StockItem at ./spec/models/spree/stock_item_spec.rb.adjust count_on_hand is updated pessimistically.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","Spree::StockItem at ./spec/models/spree/stock_item_spec.rb.adjust count_on_hand item out of stock (by five items) when stock received is insufficient to fulfill backorders splits inventory to fulfill partial backorder.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2:1:1\"}}","Spree::StockItem at ./spec/models/spree/stock_item_spec.rb.adjust count_on_hand item out of stock (by two items) adds new items fills existing backorders.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:3:3:1\"}}","Spree::StockItem at ./spec/models/spree/stock_item_spec.rb.adjust count_on_hand item out of stock (by two items) does not process backorders when stock is adjusted negatively.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:3:2\"}}","Spree::StockItem at ./spec/models/spree/stock_item_spec.rb.adjust count_on_hand item out of stock (by two items) processes existing backorders, even with negative stock.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:3:1\"}}","Spree::StockItem at ./spec/models/spree/stock_item_spec.rb.available to be included in shipment backorderable example at ./spec/models/spree/stock_item_spec.rb:27.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1\"}}","Spree::StockItem at ./spec/models/spree/stock_item_spec.rb.available to be included in shipment has stock example at ./spec/models/spree/stock_item_spec.rb:21.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:1\"}}","Spree::StockItem at ./spec/models/spree/stock_item_spec.rb.available to be included in shipment no stock and not backorderable example at ./spec/models/spree/stock_item_spec.rb:36.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3:1\"}}","Spree::StockItem at ./spec/models/spree/stock_item_spec.rb.behaves like lifecycle events lifecycle events stock_item.created publishes created event when record is created.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1:1\"}}","Spree::StockItem at ./spec/models/spree/stock_item_spec.rb.behaves like lifecycle events lifecycle events stock_item.deleted publishes deleted event when record is deleted.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:3:1\"}}","Spree::StockItem at ./spec/models/spree/stock_item_spec.rb.behaves like lifecycle events lifecycle events stock_item.updated publishes updated event when record is updated.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:2:1\"}}","Spree::StockItem at ./spec/models/spree/stock_item_spec.rb.behaves like metadata can query records by metadata properties.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:10\"}}","Spree::StockItem at ./spec/models/spree/stock_item_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:10.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","Spree::StockItem at ./spec/models/spree/stock_item_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:11.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","Spree::StockItem at ./spec/models/spree/stock_item_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:4.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::StockItem at ./spec/models/spree/stock_item_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:5.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","Spree::StockItem at ./spec/models/spree/stock_item_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:7.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","Spree::StockItem at ./spec/models/spree/stock_item_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:8.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","Spree::StockItem at ./spec/models/spree/stock_item_spec.rb.behaves like metadata reads data as not symbolized keys.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8\"}}","Spree::StockItem at ./spec/models/spree/stock_item_spec.rb.behaves like metadata reads data as symbolized keys.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7\"}}","Spree::StockItem at ./spec/models/spree/stock_item_spec.rb.can return the stock item's variant's name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4\"}}","Spree::StockItem at ./spec/models/spree/stock_item_spec.rb.destroyed doesnt allow recreating more than one stock item at once.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:2\"}}","Spree::StockItem at ./spec/models/spree/stock_item_spec.rb.destroyed recreates stock item just fine.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1\"}}","Spree::StockItem at ./spec/models/spree/stock_item_spec.rb.maintains the count on hand for a variant.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3\"}}","Spree::StockItem at ./spec/models/spree/stock_item_spec.rb.reduce_count_on_hand_to_zero when count_on_hand > 0 example at ./spec/models/spree/stock_item_spec.rb:47.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1:1\"}}","Spree::StockItem at ./spec/models/spree/stock_item_spec.rb.reduce_count_on_hand_to_zero when count_on_hand > 0 example at ./spec/models/spree/stock_item_spec.rb:57.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2:1\"}}","Spree::StockItem at ./spec/models/spree/stock_item_spec.rb.scopes .with_active_stock_location when stock location is active example at ./spec/models/spree/stock_item_spec.rb:470.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:1:1:1\"}}","Spree::StockItem at ./spec/models/spree/stock_item_spec.rb.scopes .with_active_stock_location when stock location is inactive example at ./spec/models/spree/stock_item_spec.rb:476.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:1:2:1\"}}","Spree::StockItem at ./spec/models/spree/stock_item_spec.rb.set count_on_hand is updated pessimistically.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1\"}}","Spree::StockItem at ./spec/models/spree/stock_item_spec.rb.set count_on_hand item out of stock (by two items) adds new items fills existing backorders.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2:2:1\"}}","Spree::StockItem at ./spec/models/spree/stock_item_spec.rb.set count_on_hand item out of stock (by two items) doesn't process backorders.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2:1\"}}","Spree::StockItem at ./spec/models/spree/stock_item_spec.rb.validations count_on_hand when count_on_hand changed when backorderable when both count_on_hand and count_on_hand_was are negative when count_on_hand is greater than count_on_hand_was behaves like valid count_on_hand has :no errors_on.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:1:2:1:2:1:1:1\"}}","Spree::StockItem at ./spec/models/spree/stock_item_spec.rb.validations count_on_hand when count_on_hand changed when backorderable when both count_on_hand and count_on_hand_was are negative when count_on_hand is smaller than count_on_hand_was behaves like valid count_on_hand has :no errors_on.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:1:2:1:2:2:1:1\"}}","Spree::StockItem at ./spec/models/spree/stock_item_spec.rb.validations count_on_hand when count_on_hand changed when backorderable when both count_on_hand and count_on_hand_was are positive when count_on_hand is greater than count_on_hand_was behaves like valid count_on_hand has :no errors_on.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:1:2:1:1:1:1:1\"}}","Spree::StockItem at ./spec/models/spree/stock_item_spec.rb.validations count_on_hand when count_on_hand changed when backorderable when both count_on_hand and count_on_hand_was are positive when count_on_hand is smaller than count_on_hand_was behaves like valid count_on_hand has :no errors_on.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:1:2:1:1:2:1:1\"}}","Spree::StockItem at ./spec/models/spree/stock_item_spec.rb.validations count_on_hand when count_on_hand changed when backorderable when both count_on_hand is negative and count_on_hand_was is positive when count_on_hand is greater than count_on_hand_was behaves like valid count_on_hand has :no errors_on.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:1:2:1:4:1:1:1\"}}","Spree::StockItem at ./spec/models/spree/stock_item_spec.rb.validations count_on_hand when count_on_hand changed when backorderable when both count_on_hand is positive and count_on_hand_was is negative when count_on_hand is greater than count_on_hand_was behaves like valid count_on_hand has :no errors_on.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:1:2:1:3:1:1:1\"}}","Spree::StockItem at ./spec/models/spree/stock_item_spec.rb.validations count_on_hand when count_on_hand changed when not backorderable when both count_on_hand and count_on_hand_was are negative when count_on_hand is greater than count_on_hand_was behaves like valid count_on_hand has :no errors_on.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:1:2:2:2:1:1:1\"}}","Spree::StockItem at ./spec/models/spree/stock_item_spec.rb.validations count_on_hand when count_on_hand changed when not backorderable when both count_on_hand and count_on_hand_was are negative when count_on_hand is smaller than count_on_hand_was behaves like not valid count_on_hand example at ./spec/models/spree/stock_item_spec.rb:302.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:1:2:2:2:2:1:2\"}}","Spree::StockItem at ./spec/models/spree/stock_item_spec.rb.validations count_on_hand when count_on_hand changed when not backorderable when both count_on_hand and count_on_hand_was are negative when count_on_hand is smaller than count_on_hand_was behaves like not valid count_on_hand has 1 error on count_on_hand.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:1:2:2:2:2:1:1\"}}","Spree::StockItem at ./spec/models/spree/stock_item_spec.rb.validations count_on_hand when count_on_hand changed when not backorderable when both count_on_hand and count_on_hand_was are positive when count_on_hand is greater than count_on_hand_was behaves like valid count_on_hand has :no errors_on.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:1:2:2:1:1:1:1\"}}","Spree::StockItem at ./spec/models/spree/stock_item_spec.rb.validations count_on_hand when count_on_hand changed when not backorderable when both count_on_hand and count_on_hand_was are positive when count_on_hand is smaller than count_on_hand_was behaves like valid count_on_hand has :no errors_on.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:1:2:2:1:2:1:1\"}}","Spree::StockItem at ./spec/models/spree/stock_item_spec.rb.validations count_on_hand when count_on_hand changed when not backorderable when both count_on_hand is negative and count_on_hand_was is positive when count_on_hand is greater than count_on_hand_was behaves like not valid count_on_hand example at ./spec/models/spree/stock_item_spec.rb:302.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:1:2:2:4:1:1:2\"}}","Spree::StockItem at ./spec/models/spree/stock_item_spec.rb.validations count_on_hand when count_on_hand changed when not backorderable when both count_on_hand is negative and count_on_hand_was is positive when count_on_hand is greater than count_on_hand_was behaves like not valid count_on_hand has 1 error on count_on_hand.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:1:2:2:4:1:1:1\"}}","Spree::StockItem at ./spec/models/spree/stock_item_spec.rb.validations count_on_hand when count_on_hand changed when not backorderable when both count_on_hand is positive and count_on_hand_was is negative when count_on_hand is greater than count_on_hand_was behaves like valid count_on_hand has :no errors_on.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:1:2:2:3:1:1:1\"}}","Spree::StockItem at ./spec/models/spree/stock_item_spec.rb.validations count_on_hand when count_on_hand not changed when backorderable behaves like valid count_on_hand has :no errors_on.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:1:1:2:1:1\"}}","Spree::StockItem at ./spec/models/spree/stock_item_spec.rb.validations count_on_hand when count_on_hand not changed when not backorderable behaves like valid count_on_hand has :no errors_on.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:1:1:1:1:1\"}}","Spree::StockItem at ./spec/models/spree/stock_item_spec.rb.variant can be found even if the variant is deleted.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:1\"}}","Spree::StockItem at ./spec/models/spree/stock_item_spec.rb.with stock movements doesnt raise ReadOnlyRecord error.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1\"}}","Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb.#address returns Spree::Address instance.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:1\"}}","Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb.#conditionally_touch_records active has changed example at ./spec/models/spree/stock_location_spec.rb:311.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:17:1:1\"}}","Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb.#conditionally_touch_records active has changed example at ./spec/models/spree/stock_location_spec.rb:312.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:17:1:2\"}}","Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb.#conditionally_touch_records active has not changed example at ./spec/models/spree/stock_location_spec.rb:316.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:17:2:1\"}}","Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb.#country_name returns the country name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:20:1\"}}","Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb.#display_name returns the name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:1\"}}","Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb.#display_name with admin name set returns the admin name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:2:1\"}}","Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb.#state_text both name and abbr is present example at ./spec/models/spree/stock_location_spec.rb:294.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:2:1\"}}","Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb.#state_text only name is present example at ./spec/models/spree/stock_location_spec.rb:302.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:3:1\"}}","Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb.#state_text state is blank example at ./spec/models/spree/stock_location_spec.rb:286.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:1:1\"}}","Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb.#stock_item_or_create with stock item variant ID passed example at ./spec/models/spree/stock_location_spec.rb:159.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2:2:1\"}}","Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb.#stock_item_or_create with stock item variant ID passed example at ./spec/models/spree/stock_location_spec.rb:160.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2:2:2\"}}","Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb.#stock_item_or_create with stock item variant instance passed example at ./spec/models/spree/stock_location_spec.rb:154.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2:1:1\"}}","Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb.#stock_item_or_create with stock item variant instance passed example at ./spec/models/spree/stock_location_spec.rb:155.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2:1:2\"}}","Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb.#stock_item_or_create without stock item variant ID passed creates a stock_item if not found for a variant.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1:2:1\"}}","Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb.#stock_item_or_create without stock item variant ID passed example at ./spec/models/spree/stock_location_spec.rb:145.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1:2:2\"}}","Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb.#stock_item_or_create without stock item variant instance passed creates a stock_item if not found for a variant.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1:1:1\"}}","Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb.#stock_item_or_create without stock item variant instance passed example at ./spec/models/spree/stock_location_spec.rb:136.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1:1:2\"}}","Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb.can be deactivated.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13\"}}","Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb.creates a stock_movement.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12\"}}","Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb.ensures only one stock location is default at a time.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14\"}}","Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb.fill_status all on_hand with no backordered.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:1\"}}","Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb.fill_status some on_hand with some backordered.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:2\"}}","Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb.fill_status when backordering is not allowed all on_hand.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:4:1\"}}","Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb.fill_status when backordering is not allowed some on_hand.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:4:2\"}}","Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb.fill_status when backordering is not allowed zero on_hand.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:4:3\"}}","Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb.fill_status without stock_items zero on_hand and one backordered.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:5:1\"}}","Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb.fill_status zero on_hand with all backordered.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:3\"}}","Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb.finds a count_on_hand for a variant.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8\"}}","Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb.finds a stock_item for a variant by id.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5\"}}","Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb.finds a stock_item for a variant.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4\"}}","Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb.finds determines if you a variant is backorderable.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9\"}}","Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb.handling stock items given a variant propagate all variants false example at ./spec/models/spree/stock_location_spec.rb:99.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:3:2:1\"}}","Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb.handling stock items given a variant propagate all variants true example at ./spec/models/spree/stock_location_spec.rb:87.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:3:1:1\"}}","Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb.handling stock items given a variant propagate variants creates a new stock item.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:2:1\"}}","Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb.handling stock items given a variant propagate variants passes backorderable default config false example at ./spec/models/spree/stock_location_spec.rb:76.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:2:2:2:1\"}}","Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb.handling stock items given a variant propagate variants passes backorderable default config true example at ./spec/models/spree/stock_location_spec.rb:70.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:2:2:1:1\"}}","Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb.handling stock items given a variant set up creates stock item.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1:1\"}}","Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb.handling stock items given a variant set up stock item exists returns existing stock item.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1:2:1\"}}","Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb.handling the stock items creation after create creates stock_items for all variants.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb.restocks a variant with a positive stock movement.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10\"}}","Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb.returns nil when stock_item is not found for variant.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6\"}}","Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb.unstocks a variant with a negative stock movement.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11\"}}","Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb.validates uniqueness.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2\"}}","Spree::StockLocations::StockItems::Create at ./spec/services/spree/stock_locations/stock_items/create_spec.rb.#call with prepared stock items with stock items in the db inserts stock items without duplicates.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","Spree::StockLocations::StockItems::Create at ./spec/services/spree/stock_locations/stock_items/create_spec.rb.#call with prepared stock items without stock items in the db inserts the stock location stock items.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","Spree::StockLocations::StockItems::Create at ./spec/services/spree/stock_locations/stock_items/create_spec.rb.#call with prepared stock items without stock items in the db invalidates the Variant cache.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:3\"}}","Spree::StockLocations::StockItems::Create at ./spec/services/spree/stock_locations/stock_items/create_spec.rb.#call with prepared stock items without stock items in the db sets the stock location data necessary for the inserted stock items.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:2\"}}","Spree::StockLocations::StockItems::Create at ./spec/services/spree/stock_locations/stock_items/create_spec.rb.#call without prepared stock items does not insert stock items.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","Spree::StockLocations::StockItems::Create at ./spec/services/spree/stock_locations/stock_items/create_spec.rb.#call without prepared stock items does not invalidates the Variant cache.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2\"}}","Spree::StockLocations::StockItems::CreateJob at ./spec/jobs/spree/stock_locations/stock_items/create_job_spec.rb.enqueues the creation of the stock location stock items.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","Spree::StockMovement at ./spec/models/spree/stock_movement_spec.rb.Constants QUANTITY_LIMITS[:max] return 2**31 - 1.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","Spree::StockMovement at ./spec/models/spree/stock_movement_spec.rb.Constants QUANTITY_LIMITS[:min] return -2**31.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","Spree::StockMovement at ./spec/models/spree/stock_movement_spec.rb.Instance Methods #readonly? does not update a persisted record.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:3:1\"}}","Spree::StockMovement at ./spec/models/spree/stock_movement_spec.rb.Instance Methods #update_stock_item_quantity when quantity is negative decrements the stock item count on hand.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:4:3:1\"}}","Spree::StockMovement at ./spec/models/spree/stock_movement_spec.rb.Instance Methods #update_stock_item_quantity when quantity is positive increments the stock item count on hand.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:4:4:1\"}}","Spree::StockMovement at ./spec/models/spree/stock_movement_spec.rb.Instance Methods #update_stock_item_quantity when track inventory levels is false does not update count on hand.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:4:1:1\"}}","Spree::StockMovement at ./spec/models/spree/stock_movement_spec.rb.Instance Methods #update_stock_item_quantity when track inventory tracking is off does not update count on hand.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:4:2:1\"}}","Spree::StockMovement at ./spec/models/spree/stock_movement_spec.rb.Instance Methods .product example at ./spec/models/spree/stock_movement_spec.rb:69.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1:1\"}}","Spree::StockMovement at ./spec/models/spree/stock_movement_spec.rb.Instance Methods .variant example at ./spec/models/spree/stock_movement_spec.rb:73.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2:1\"}}","Spree::StockMovement at ./spec/models/spree/stock_movement_spec.rb.Scope .recent orders chronologically by created at.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1\"}}","Spree::StockMovement at ./spec/models/spree/stock_movement_spec.rb.lifecycle events stock_movement.created publishes created event when record is created.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","Spree::StockMovement at ./spec/models/spree/stock_movement_spec.rb.validations allows the negative quantity for a backorderable stock item.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","Spree::StockMovement at ./spec/models/spree/stock_movement_spec.rb.validations does not allow quantity that is less than the stock item's count on hand.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","Spree::StockMovement at ./spec/models/spree/stock_movement_spec.rb.whitelisted ransackable attributes returns amount attribute.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","Spree::StockMovement::CustomEvents at ./spec/models/spree/stock_movement/custom_events_spec.rb.product.back_in_stock event does not publish when product was already in stock.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","Spree::StockMovement::CustomEvents at ./spec/models/spree/stock_movement/custom_events_spec.rb.product.back_in_stock event publishes product.back_in_stock when product comes back in stock.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","Spree::StockMovement::CustomEvents at ./spec/models/spree/stock_movement/custom_events_spec.rb.product.out_of_stock event does not publish when product still has stock.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","Spree::StockMovement::CustomEvents at ./spec/models/spree/stock_movement/custom_events_spec.rb.product.out_of_stock event does not publish when product was already out of stock.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","Spree::StockMovement::CustomEvents at ./spec/models/spree/stock_movement/custom_events_spec.rb.product.out_of_stock event publishes product.out_of_stock when product goes out of stock.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::StockMovement::CustomEvents at ./spec/models/spree/stock_movement/custom_events_spec.rb.when events are disabled does not publish any events.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","Spree::StockTransfer at ./spec/models/spree/stock_transfer_spec.rb.#receive receives new inventory (from a vendor).{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","Spree::StockTransfer at ./spec/models/spree/stock_transfer_spec.rb.#reference example at ./spec/models/spree/stock_transfer_spec.rb:25.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","Spree::StockTransfer at ./spec/models/spree/stock_transfer_spec.rb.#to_param example at ./spec/models/spree/stock_transfer_spec.rb:31.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","Spree::StockTransfer at ./spec/models/spree/stock_transfer_spec.rb.#transfer transfers variants between 2 locations.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","Spree::StockTransfer at ./spec/models/spree/stock_transfer_spec.rb.#transfer when variants are empty does not transfer the variants.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3:1\"}}","Spree::StockTransfer at ./spec/models/spree/stock_transfer_spec.rb.#transfer when variants are nil does not transfer the variants.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:4:1\"}}","Spree::StockTransfer at ./spec/models/spree/stock_transfer_spec.rb.#transfer when variants are not available in the source location does not transfer the variants.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1\"}}","Spree::StockTransfer at ./spec/models/spree/stock_transfer_spec.rb.#validations checks if source location and destination location are the same.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","Spree::StockTransfer at ./spec/models/spree/stock_transfer_spec.rb.behaves like lifecycle events lifecycle events stock_transfer.created publishes created event when record is created.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1:1\"}}","Spree::StockTransfer at ./spec/models/spree/stock_transfer_spec.rb.behaves like lifecycle events lifecycle events stock_transfer.deleted publishes deleted event when record is deleted.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:3:1\"}}","Spree::StockTransfer at ./spec/models/spree/stock_transfer_spec.rb.behaves like lifecycle events lifecycle events stock_transfer.updated publishes updated event when record is updated.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:2:1\"}}","Spree::StockTransfer at ./spec/models/spree/stock_transfer_spec.rb.behaves like metadata can query records by metadata properties.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:10\"}}","Spree::StockTransfer at ./spec/models/spree/stock_transfer_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:10.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","Spree::StockTransfer at ./spec/models/spree/stock_transfer_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:11.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","Spree::StockTransfer at ./spec/models/spree/stock_transfer_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:4.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::StockTransfer at ./spec/models/spree/stock_transfer_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:5.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","Spree::StockTransfer at ./spec/models/spree/stock_transfer_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:7.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","Spree::StockTransfer at ./spec/models/spree/stock_transfer_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:8.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","Spree::StockTransfer at ./spec/models/spree/stock_transfer_spec.rb.behaves like metadata reads data as not symbolized keys.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8\"}}","Spree::StockTransfer at ./spec/models/spree/stock_transfer_spec.rb.behaves like metadata reads data as symbolized keys.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7\"}}","Spree::Store at ./spec/models/spree/store_spec.rb.#can_be_deleted? can delete when there are more than 1 stores.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:2\"}}","Spree::Store at ./spec/models/spree/store_spec.rb.#can_be_deleted? cannot delete the only store.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:1\"}}","Spree::Store at ./spec/models/spree/store_spec.rb.#countries_available_for_checkout returns country list for checkout zone.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1:1\"}}","Spree::Store at ./spec/models/spree/store_spec.rb.#countries_available_for_checkout returns list of all countries.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:2:1\"}}","Spree::Store at ./spec/models/spree/store_spec.rb.#default_country_iso= when country is found sets the default country.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:2:1\"}}","Spree::Store at ./spec/models/spree/store_spec.rb.#default_country_iso= when country is not found sets the default country.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:1:1\"}}","Spree::Store at ./spec/models/spree/store_spec.rb.#default_stock_location with default stock location returns the default stock location.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:21:1:1\"}}","Spree::Store at ./spec/models/spree/store_spec.rb.#default_stock_location without default stock location creates a new default stock location.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:21:2:1\"}}","Spree::Store at ./spec/models/spree/store_spec.rb.#ensure_default_country checkout zone not set example at ./spec/models/spree/store_spec.rb:572.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1:2\"}}","Spree::Store at ./spec/models/spree/store_spec.rb.#ensure_default_country checkout zone not set with default country example at ./spec/models/spree/store_spec.rb:569.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1:1:1\"}}","Spree::Store at ./spec/models/spree/store_spec.rb.#ensure_default_country checkout zone set with default country set default country is a zone member example at ./spec/models/spree/store_spec.rb:601.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2:1:2:1\"}}","Spree::Store at ./spec/models/spree/store_spec.rb.#ensure_default_country checkout zone set with default country set default country is not a zone member example at ./spec/models/spree/store_spec.rb:607.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2:1:3:1\"}}","Spree::Store at ./spec/models/spree/store_spec.rb.#ensure_default_country checkout zone set with default country set no zone members example at ./spec/models/spree/store_spec.rb:592.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2:1:1:1\"}}","Spree::Store at ./spec/models/spree/store_spec.rb.#ensure_default_country checkout zone set without default country set no zone members example at ./spec/models/spree/store_spec.rb:618.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2:2:1:1\"}}","Spree::Store at ./spec/models/spree/store_spec.rb.#ensure_default_country checkout zone set without default country set with zone members example at ./spec/models/spree/store_spec.rb:624.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2:2:2:1\"}}","Spree::Store at ./spec/models/spree/store_spec.rb.#ensure_supported_currencies store with default_currency example at ./spec/models/spree/store_spec.rb:729.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:17:1:1\"}}","Spree::Store at ./spec/models/spree/store_spec.rb.#ensure_supported_currencies store with supported currencies example at ./spec/models/spree/store_spec.rb:735.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:17:2:1\"}}","Spree::Store at ./spec/models/spree/store_spec.rb.#ensure_supported_locales store with default_locale example at ./spec/models/spree/store_spec.rb:709.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:1:1\"}}","Spree::Store at ./spec/models/spree/store_spec.rb.#ensure_supported_locales store with supported locales example at ./spec/models/spree/store_spec.rb:721.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:3:1\"}}","Spree::Store at ./spec/models/spree/store_spec.rb.#ensure_supported_locales store without default locale example at ./spec/models/spree/store_spec.rb:715.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:2:1\"}}","Spree::Store at ./spec/models/spree/store_spec.rb.#favicon with an attached favicon image returns a resized favicon.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:1:1\"}}","Spree::Store at ./spec/models/spree/store_spec.rb.#favicon without an attached favicon image returns a blank favicon.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:2:1\"}}","Spree::Store at ./spec/models/spree/store_spec.rb.#formatted_url example at ./spec/models/spree/store_spec.rb:853.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:23:1\"}}","Spree::Store at ./spec/models/spree/store_spec.rb.#formatted_url on production example at ./spec/models/spree/store_spec.rb:864.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:23:3:1\"}}","Spree::Store at ./spec/models/spree/store_spec.rb.#formatted_url url with port example at ./spec/models/spree/store_spec.rb:858.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:23:2:1\"}}","Spree::Store at ./spec/models/spree/store_spec.rb.#formatted_url_or_custom_domain with custom domain example at ./spec/models/spree/store_spec.rb:878.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:24:2:1\"}}","Spree::Store at ./spec/models/spree/store_spec.rb.#formatted_url_or_custom_domain without custom domain example at ./spec/models/spree/store_spec.rb:872.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:24:1:1\"}}","Spree::Store at ./spec/models/spree/store_spec.rb.#states_available_for_checkout returns list of states associated to country.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:2:1:1\"}}","Spree::Store at ./spec/models/spree/store_spec.rb.#states_available_for_checkout returns states list for checkout zone.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1:1\"}}","Spree::Store at ./spec/models/spree/store_spec.rb.#supported_currencies_list with supported currencies set returns supported currencies list.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:1:1\"}}","Spree::Store at ./spec/models/spree/store_spec.rb.#supported_currencies_list without supported currencies set returns supported currencies list.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:2:1\"}}","Spree::Store at ./spec/models/spree/store_spec.rb.#supported_locales_list with supported locale set returns supported currencies list.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:1:1\"}}","Spree::Store at ./spec/models/spree/store_spec.rb.#supported_locales_list without supported currencies set returns supported currencies list.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:2:1\"}}","Spree::Store at ./spec/models/spree/store_spec.rb.#supported_shipping_zones when checkout zone not set returns all shipping zones.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:22:2:1\"}}","Spree::Store at ./spec/models/spree/store_spec.rb.#supported_shipping_zones with checkout zone set returns the checkout zone.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:22:1:1\"}}","Spree::Store at ./spec/models/spree/store_spec.rb.#unique_name returns the Store Name followed by the Store Code in parentheses.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:1\"}}","Spree::Store at ./spec/models/spree/store_spec.rb..available_locales example at ./spec/models/spree/store_spec.rb:479.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1\"}}","Spree::Store at ./spec/models/spree/store_spec.rb..by_url finds stores by url.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","Spree::Store at ./spec/models/spree/store_spec.rb..current returns default when no domain.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","Spree::Store at ./spec/models/spree/store_spec.rb..current returns store for domain.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2\"}}","Spree::Store at ./spec/models/spree/store_spec.rb..default when a default store is already present ensures there is a default if one doesn't exist yet.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1:2\"}}","Spree::Store at ./spec/models/spree/store_spec.rb..default when a default store is already present ensures there is only one default.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1:3\"}}","Spree::Store at ./spec/models/spree/store_spec.rb..default when a default store is already present returns the already existing default store.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1:1\"}}","Spree::Store at ./spec/models/spree/store_spec.rb..default when a default store is already present when store is not saved ensure old default location still default.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1:4:1\"}}","Spree::Store at ./spec/models/spree/store_spec.rb..default when a default store is not present builds a new default store.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2:1\"}}","Spree::Store at ./spec/models/spree/store_spec.rb..default when a default store is not present does not persist the original default store.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2:2\"}}","Spree::Store at ./spec/models/spree/store_spec.rb.Associations #orders #inventory_units example at ./spec/models/spree/store_spec.rb:94.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:6:1\"}}","Spree::Store at ./spec/models/spree/store_spec.rb.Associations #orders #line_items example at ./spec/models/spree/store_spec.rb:62.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:2:1\"}}","Spree::Store at ./spec/models/spree/store_spec.rb.Associations #orders #payments example at ./spec/models/spree/store_spec.rb:69.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:3:1\"}}","Spree::Store at ./spec/models/spree/store_spec.rb.Associations #orders #return_authorizations example at ./spec/models/spree/store_spec.rb:85.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:5:1\"}}","Spree::Store at ./spec/models/spree/store_spec.rb.Associations #orders #shipments example at ./spec/models/spree/store_spec.rb:76.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:4:1\"}}","Spree::Store at ./spec/models/spree/store_spec.rb.Associations #orders example at ./spec/models/spree/store_spec.rb:56.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","Spree::Store at ./spec/models/spree/store_spec.rb.Associations #payment_methods example at ./spec/models/spree/store_spec.rb:49.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","Spree::Store at ./spec/models/spree/store_spec.rb.Associations #products #product_properties example at ./spec/models/spree/store_spec.rb:25.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","Spree::Store at ./spec/models/spree/store_spec.rb.Associations #products #variants #stock_items example at ./spec/models/spree/store_spec.rb:38.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:2:1\"}}","Spree::Store at ./spec/models/spree/store_spec.rb.Associations #products #variants #stock_items example at ./spec/models/spree/store_spec.rb:39.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:2:2\"}}","Spree::Store at ./spec/models/spree/store_spec.rb.Associations #products #variants #stock_items example at ./spec/models/spree/store_spec.rb:40.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:2:3\"}}","Spree::Store at ./spec/models/spree/store_spec.rb.Associations #products #variants example at ./spec/models/spree/store_spec.rb:32.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:1\"}}","Spree::Store at ./spec/models/spree/store_spec.rb.Associations #products example at ./spec/models/spree/store_spec.rb:19.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","Spree::Store at ./spec/models/spree/store_spec.rb.Associations #promotions example at ./spec/models/spree/store_spec.rb:118.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5:1\"}}","Spree::Store at ./spec/models/spree/store_spec.rb.Associations #store_credits #store_credit_events example at ./spec/models/spree/store_spec.rb:108.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:2:1\"}}","Spree::Store at ./spec/models/spree/store_spec.rb.Associations #store_credits #store_credit_events example at ./spec/models/spree/store_spec.rb:109.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:2:2\"}}","Spree::Store at ./spec/models/spree/store_spec.rb.Associations #store_credits #store_credit_events example at ./spec/models/spree/store_spec.rb:110.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:2:3\"}}","Spree::Store at ./spec/models/spree/store_spec.rb.Associations #store_credits example at ./spec/models/spree/store_spec.rb:102.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1\"}}","Spree::Store at ./spec/models/spree/store_spec.rb.Callbacks #ensure_default_automatic_taxons creates automatic taxons on the collections taxonomy.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:4:1\"}}","Spree::Store at ./spec/models/spree/store_spec.rb.Callbacks #ensure_default_automatic_taxons is idempotent - does not create duplicates when called multiple times.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:4:2\"}}","Spree::Store at ./spec/models/spree/store_spec.rb.Callbacks #ensure_default_post_categories_are_created creates default post categories.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:5:1\"}}","Spree::Store at ./spec/models/spree/store_spec.rb.Callbacks #ensure_default_post_categories_are_created is idempotent - does not create duplicates when called multiple times.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:5:2\"}}","Spree::Store at ./spec/models/spree/store_spec.rb.Callbacks #ensure_default_taxonomies_are_created creates default taxonomies.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:1\"}}","Spree::Store at ./spec/models/spree/store_spec.rb.Callbacks #ensure_default_taxonomies_are_created is idempotent - does not create duplicates when called multiple times.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:2\"}}","Spree::Store at ./spec/models/spree/store_spec.rb.Callbacks #ensure_default_taxonomies_are_created with non-English store locale creates taxonomies with translated names in store locale.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:3:1\"}}","Spree::Store at ./spec/models/spree/store_spec.rb.Callbacks #ensure_default_taxonomies_are_created with non-English store locale falls back to English when translation is missing.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:3:2\"}}","Spree::Store at ./spec/models/spree/store_spec.rb.Callbacks #import_payment_methods_from_store imports payment methods from other store.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:7:1\"}}","Spree::Store at ./spec/models/spree/store_spec.rb.Callbacks #import_products_from_store imports products from other store.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:6:1\"}}","Spree::Store at ./spec/models/spree/store_spec.rb.Callbacks #set_code #create_default_policies creates default policies.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:5:1\"}}","Spree::Store at ./spec/models/spree/store_spec.rb.Callbacks #set_code #create_default_policies is idempotent - does not create duplicates when called multiple times.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:5:2\"}}","Spree::Store at ./spec/models/spree/store_spec.rb.Callbacks #set_code #create_default_policies with non-English store locale creates policies with translated names in store locale.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:5:3:1\"}}","Spree::Store at ./spec/models/spree/store_spec.rb.Callbacks #set_code sets the code.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","Spree::Store at ./spec/models/spree/store_spec.rb.Callbacks #set_code when code is already set does not change the code.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:2:1\"}}","Spree::Store at ./spec/models/spree/store_spec.rb.Callbacks #set_code when code is already taken generates a new code.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:4:1\"}}","Spree::Store at ./spec/models/spree/store_spec.rb.Callbacks #set_code when name is not set does not set the code.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:3:1\"}}","Spree::Store at ./spec/models/spree/store_spec.rb.Callbacks #set_url on create sets url.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1:1\"}}","Spree::Store at ./spec/models/spree/store_spec.rb.Callbacks #set_url on update code change update url updates url but keep old one.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:2:1\"}}","Spree::Store at ./spec/models/spree/store_spec.rb.Translations translates store fields.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","Spree::Store at ./spec/models/spree/store_spec.rb.Validations #code cannot create 2 stores with the same code.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","Spree::Store at ./spec/models/spree/store_spec.rb.Validations #code cannot create a store with reserved code.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:2\"}}","Spree::Store at ./spec/models/spree/store_spec.rb.soft deletion another store soft-deletes when destroy is called.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:20:2:1\"}}","Spree::Store at ./spec/models/spree/store_spec.rb.soft deletion default store single store cannot be deleted.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:20:1:2:1\"}}","Spree::Store at ./spec/models/spree/store_spec.rb.soft deletion default store with multiple stores can be deleted.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:20:1:1:1\"}}","Spree::Store at ./spec/models/spree/store_spec.rb.soft deletion default store with multiple stores passes default flag to other store.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:20:1:1:2\"}}","Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.#amount_authorized amount authorized is defined returns the attribute value.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:2:1\"}}","Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.#amount_authorized amount authorized is not defined returns zero.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:1:1\"}}","Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.#amount_remaining the amount_used is defined the authorized amount is defined subtracts the amount used and the authorized amount from the credited amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2:2:1\"}}","Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.#amount_remaining the amount_used is defined the authorized amount is not defined subtracts the amount used from the credited amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2:1:1\"}}","Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.#amount_remaining the amount_used is not defined the authorized amount is defined subtracts the authorized amount from the credited amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1:2:1\"}}","Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.#amount_remaining the amount_used is not defined the authorized amount is not defined returns the credited amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1:1:1\"}}","Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.#amount_used amount used is defined returns the attribute value.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:2:1\"}}","Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.#amount_used amount used is not defined returns zero.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:1:1\"}}","Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.#authorize amount is invalid returns false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2:1\"}}","Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.#authorize amount is valid amount has not been authorized yet adds the new amount to authorized amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1:1:2\"}}","Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.#authorize amount is valid amount has not been authorized yet originator is present records the originator.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1:1:3:1\"}}","Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.#authorize amount is valid amount has not been authorized yet returns true.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1:1:1\"}}","Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.#authorize amount is valid authorization has already happened returns true.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1:2:1\"}}","Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.#can_capture? checkout payment returns true.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:2:1\"}}","Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.#can_capture? complete payment returns false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:5:1\"}}","Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.#can_capture? invalid payment returns false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:4:1\"}}","Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.#can_capture? pending payment returns true.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:1:1\"}}","Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.#can_capture? void payment returns false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:3:1\"}}","Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.#can_credit? #store_events create an action is specified creates an event with the set action.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:17:3:1:3:1\"}}","Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.#can_credit? #store_events create user has multiple store credits saves the user's total store credit in the event.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:17:3:1:2:1\"}}","Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.#can_credit? #store_events create user has one store credit creates a store credit event.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:17:3:1:1:1\"}}","Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.#can_credit? #store_events create user has one store credit makes the store credit event an allocation event.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:17:3:1:1:2\"}}","Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.#can_credit? #store_events create user has one store credit saves the user's total store credit in the event.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:17:3:1:1:3\"}}","Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.#can_credit? payment is completed credit is owed on the order payment doesn't have allowed credit returns false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:17:2:1:1:1\"}}","Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.#can_credit? payment is completed credit is owed on the order payment has allowed credit returns true.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:17:2:1:2:1\"}}","Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.#can_credit? payment is not completed returns false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:17:1:1\"}}","Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.#can_void? complete payment returns false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:5:1\"}}","Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.#can_void? invalid payment returns false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:4:1\"}}","Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.#can_void? pending payment returns true.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:1:1\"}}","Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.#can_void? remove store credits when order is completed example at ./spec/models/spree/store_credit_spec.rb:639.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:2:2:1\"}}","Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.#can_void? remove store credits when payment is completed example at ./spec/models/spree/store_credit_spec.rb:645.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:2:3:1\"}}","Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.#can_void? remove store credits when payment is in checkout and order is not completed example at ./spec/models/spree/store_credit_spec.rb:633.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:2:1:1\"}}","Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.#can_void? void payment returns false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:3:1\"}}","Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.#capture currency mismatch adds an error to the model.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:2:2\"}}","Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.#capture currency mismatch does not update the store credit model.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:2:3\"}}","Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.#capture currency mismatch returns false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:2:1\"}}","Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.#capture insufficient funds adds an error to the model.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1:2\"}}","Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.#capture insufficient funds does not update the store credit model.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1:3\"}}","Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.#capture insufficient funds returns false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1:1\"}}","Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.#capture valid capture originator is present records the originator.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:3:4:1\"}}","Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.#capture valid capture returns true.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:3:1\"}}","Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.#capture valid capture updates the authorized amount to the difference between the captured amount and the authorized amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:3:2\"}}","Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.#capture valid capture updates the used amount to the current used amount plus the captured amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:3:3\"}}","Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.#credit amount is more than what is captured adds an error message about the currency mismatch.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:3:2\"}}","Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.#credit amount is more than what is captured returns false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:3:1\"}}","Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.#credit amount is successfully credited credit_to_new_allocation is not set creates a new store credit event.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:4:2:3\"}}","Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.#credit amount is successfully credited credit_to_new_allocation is not set credits the passed amount to the store credit amount used.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:4:2:2\"}}","Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.#credit amount is successfully credited credit_to_new_allocation is not set returns true.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:4:2:1\"}}","Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.#credit amount is successfully credited credit_to_new_allocation is set creates a new store credit record.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:4:1:2\"}}","Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.#credit amount is successfully credited credit_to_new_allocation is set credits the passed amount to a new store credit record does not set the amount used on the originating store credit.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:4:1:4:1\"}}","Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.#credit amount is successfully credited credit_to_new_allocation is set credits the passed amount to a new store credit record sets a memo.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:4:1:4:8\"}}","Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.#credit amount is successfully credited credit_to_new_allocation is set credits the passed amount to a new store credit record sets attribute category_id inherited from the originating store credit.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:4:1:4:4\"}}","Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.#credit amount is successfully credited credit_to_new_allocation is set credits the passed amount to a new store credit record sets attribute created_by_id inherited from the originating store credit.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:4:1:4:5\"}}","Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.#credit amount is successfully credited credit_to_new_allocation is set credits the passed amount to a new store credit record sets attribute currency inherited from the originating store credit.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:4:1:4:6\"}}","Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.#credit amount is successfully credited credit_to_new_allocation is set credits the passed amount to a new store credit record sets attribute type_id inherited from the originating store credit.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:4:1:4:7\"}}","Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.#credit amount is successfully credited credit_to_new_allocation is set credits the passed amount to a new store credit record sets attribute user_id inherited from the originating store credit.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:4:1:4:3\"}}","Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.#credit amount is successfully credited credit_to_new_allocation is set credits the passed amount to a new store credit record sets the correct amount on the new store credit.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:4:1:4:2\"}}","Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.#credit amount is successfully credited credit_to_new_allocation is set does not create a new store credit event on the parent store credit.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:4:1:3\"}}","Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.#credit amount is successfully credited credit_to_new_allocation is set originator is present records the originator.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:4:1:5:1\"}}","Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.#credit amount is successfully credited credit_to_new_allocation is set returns true.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:4:1:1\"}}","Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.#credit currency does not match adds an error message about the currency mismatch.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:1:2\"}}","Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.#credit currency does not match returns false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:1:1\"}}","Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.#credit unable to find capture event adds an error message about the currency mismatch.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:2:2\"}}","Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.#credit unable to find capture event returns false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:2:1\"}}","Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.#display_amount returns a Spree::Money instance.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.#display_amount_used returns a Spree::Money instance.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.#validate_authorization currency mismatch adds an error to the model.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:2:2\"}}","Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.#validate_authorization currency mismatch returns false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:2:1\"}}","Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.#validate_authorization insufficient funds adds an error to the model.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1:2\"}}","Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.#validate_authorization insufficient funds returns false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1:1\"}}","Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.#validate_authorization troublesome floats returns true.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:4:1\"}}","Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.#validate_authorization valid authorization returns true.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:3:1\"}}","Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.#void auth event found for auth_code originator is present records the originator.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:3:3:1\"}}","Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.#void auth event found for auth_code returns the capture amount to the store credit.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:3:2\"}}","Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.#void auth event found for auth_code returns true.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:3:1\"}}","Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.#void capture event found for auth_code does not change the amount used on the store credit.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2:2\"}}","Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.#void capture event found for auth_code returns false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2:1\"}}","Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.#void no event found for auth_code adds an error to the model.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1:2\"}}","Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.#void no event found for auth_code returns false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1:1\"}}","Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.behaves like lifecycle events lifecycle events store_credit.created publishes created event when record is created.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1:1\"}}","Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.behaves like lifecycle events lifecycle events store_credit.deleted publishes deleted event when record is deleted.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:3:1\"}}","Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.behaves like lifecycle events lifecycle events store_credit.updated publishes updated event when record is updated.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:2:1\"}}","Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.behaves like metadata can query records by metadata properties.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:10\"}}","Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:10.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:11.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:4.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:5.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:7.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:8.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.behaves like metadata reads data as not symbolized keys.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8\"}}","Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.behaves like metadata reads data as symbolized keys.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7\"}}","Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.callbacks amount used is greater than zero can not delete the store credit.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.validations amount authorized less than or equal to amount adds an error message about the invalid authorized amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3:2\"}}","Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.validations amount authorized less than or equal to amount is not valid.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3:1\"}}","Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.validations amount used less than or equal to amount adds an error message about the invalid amount used.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:2\"}}","Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.validations amount used less than or equal to amount is not valid.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1\"}}","Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.validations used amount should not be greater than the credited amount the used amount is defined is not valid.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1:1\"}}","Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.validations used amount should not be greater than the credited amount the used amount is defined sets the correct error message.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1:2\"}}","Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.validations used amount should not be greater than the credited amount the used amount is not defined yet is valid.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:2:1\"}}","Spree::StoreFaviconImage at ./spec/models/spree/store_favicon_image_spec.rb.validations file size when size is 1 megabyte is valid.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1:1\"}}","Spree::StoreFaviconImage at ./spec/models/spree/store_favicon_image_spec.rb.validations file size when size is over 1 megabyte is invalid.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:1\"}}","Spree::StoreFaviconImage at ./spec/models/spree/store_favicon_image_spec.rb.validations validates image properties.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::StoreProduct at ./spec/models/spree/store_product_spec.rb.#refresh_metrics! when orders are from different stores only counts statistics from the specific store.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","Spree::StoreProduct at ./spec/models/spree/store_product_spec.rb.#refresh_metrics! when orders have multiple line items with different quantities sums quantities for units_sold_count.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1\"}}","Spree::StoreProduct at ./spec/models/spree/store_product_spec.rb.#refresh_metrics! when orders have multiple line items with different quantities uses pre_tax_amount for revenue.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:2\"}}","Spree::StoreProduct at ./spec/models/spree/store_product_spec.rb.#refresh_metrics! when product has variants includes orders with product variants in statistics.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5:1\"}}","Spree::StoreProduct at ./spec/models/spree/store_product_spec.rb.#refresh_metrics! when there are completed orders calculates revenue from line item pre_tax_amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2\"}}","Spree::StoreProduct at ./spec/models/spree/store_product_spec.rb.#refresh_metrics! when there are completed orders calculates units_sold_count from line item quantities.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","Spree::StoreProduct at ./spec/models/spree/store_product_spec.rb.#refresh_metrics! when there are multiple line items across orders sums all pre_tax_amounts across orders.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6:2\"}}","Spree::StoreProduct at ./spec/models/spree/store_product_spec.rb.#refresh_metrics! when there are multiple line items across orders sums all quantities across orders.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6:1\"}}","Spree::StoreProduct at ./spec/models/spree/store_product_spec.rb.#refresh_metrics! when there are no completed orders sets statistics to zero.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","Spree::Stores::FindCurrent at ./spec/finders/spree/stores/find_current_spec.rb.existing store example at ./spec/finders/spree/stores/find_current_spec.rb:25.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","Spree::Stores::FindCurrent at ./spec/finders/spree/stores/find_current_spec.rb.existing store example at ./spec/finders/spree/stores/find_current_spec.rb:26.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","Spree::Stores::FindCurrent at ./spec/finders/spree/stores/find_current_spec.rb.no arguments example at ./spec/finders/spree/stores/find_current_spec.rb:18.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::Stores::FindCurrent at ./spec/finders/spree/stores/find_current_spec.rb.no arguments example at ./spec/finders/spree/stores/find_current_spec.rb:19.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","Spree::Stores::FindCurrent at ./spec/finders/spree/stores/find_current_spec.rb.non-existing store example at ./spec/finders/spree/stores/find_current_spec.rb:32.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","Spree::Stores::FindCurrent at ./spec/finders/spree/stores/find_current_spec.rb.with custom domain example at ./spec/finders/spree/stores/find_current_spec.rb:46.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","Spree::Stores::FindCurrent at ./spec/finders/spree/stores/find_current_spec.rb.with scope example at ./spec/finders/spree/stores/find_current_spec.rb:39.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","Spree::Stores::SettingsDefaultsByCountry at ./spec/services/spree/stores/settings_defaults_by_country_spec.rb.when country code is US returns imperial unit system.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::Stores::SettingsDefaultsByCountry at ./spec/services/spree/stores/settings_defaults_by_country_spec.rb.when country code is not US returns metric unit system.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","Spree::Subscriber at ./spec/models/spree/subscriber_spec.rb.#call with event handlers falls back to handle when no matching handler.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:2\"}}","Spree::Subscriber at ./spec/models/spree/subscriber_spec.rb.#call with event handlers routes to the correct handler.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","Spree::Subscriber at ./spec/models/spree/subscriber_spec.rb.#call without event handlers calls the handle method.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","Spree::Subscriber at ./spec/models/spree/subscriber_spec.rb..call creates an instance and calls it.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","Spree::Subscriber at ./spec/models/spree/subscriber_spec.rb..on maps events to methods.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","Spree::Subscriber at ./spec/models/spree/subscriber_spec.rb..subscribes_to accepts multiple patterns.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","Spree::Subscriber at ./spec/models/spree/subscriber_spec.rb..subscribes_to accumulates patterns from multiple calls.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","Spree::Subscriber at ./spec/models/spree/subscriber_spec.rb..subscribes_to registers subscription patterns.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::Subscriber at ./spec/models/spree/subscriber_spec.rb..subscribes_to stores subscription options.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","Spree::Subscriber at ./spec/models/spree/subscriber_spec.rb.integration receives events when registered.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","Spree::Tags::BulkAdd at ./spec/services/spree/tags/bulk_add_spec.rb.#call assigns correct attributes to taggings.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","Spree::Tags::BulkAdd at ./spec/services/spree/tags/bulk_add_spec.rb.#call creates taggings for each product-tag pair.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","Spree::Tags::BulkAdd at ./spec/services/spree/tags/bulk_add_spec.rb.#call creates tags for each tag name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::Tags::BulkAdd at ./spec/services/spree/tags/bulk_add_spec.rb.#call touches all products.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","Spree::Tags::BulkAdd at ./spec/services/spree/tags/bulk_add_spec.rb.#call when no records are provided does not create any taggings.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6:1\"}}","Spree::Tags::BulkAdd at ./spec/services/spree/tags/bulk_add_spec.rb.#call when no tag names are provided does not create any tags or taggings.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7:1\"}}","Spree::Tags::BulkAdd at ./spec/services/spree/tags/bulk_add_spec.rb.#call when tag names are duplicated or have extra spaces creates unique tags without extra spaces.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5:1\"}}","Spree::Tags::BulkRemove at ./spec/services/spree/tags/bulk_remove_spec.rb.#call does not remove tags.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","Spree::Tags::BulkRemove at ./spec/services/spree/tags/bulk_remove_spec.rb.#call removes correct taggings.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","Spree::Tags::BulkRemove at ./spec/services/spree/tags/bulk_remove_spec.rb.#call removes taggings for each product-tag pair.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::Tags::BulkRemove at ./spec/services/spree/tags/bulk_remove_spec.rb.#call touches all products.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","Spree::TaxCategory at ./spec/models/spree/tax_category_spec.rb.#destroy nullifies all products and variants.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","Spree::TaxCategory at ./spec/models/spree/tax_category_spec.rb.#destroy removes all tax rates.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","Spree::TaxCategory at ./spec/models/spree/tax_category_spec.rb..default returns the default tax category.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","Spree::TaxCategory at ./spec/models/spree/tax_category_spec.rb.default tax category undefaults the previous default tax category except when updating the existing default tax category.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","Spree::TaxCategory at ./spec/models/spree/tax_category_spec.rb.default tax category undefaults the previous default tax category.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb.#adjust not taxable line item does not create a refund.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:2\"}}","Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb.#adjust not taxable line item does not create a tax adjustment.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1\"}}","Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb.#adjust taxable line item when price includes tax when order's zone does not match default zone, is not included in the default zone, AND does not match the rate's zone does not create a tax refund for each tax rate.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1:3:2\"}}","Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb.#adjust taxable line item when price includes tax when order's zone does not match default zone, is not included in the default zone, AND does not match the rate's zone does not create positive adjustments.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1:3:1\"}}","Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb.#adjust taxable line item when price includes tax when order's zone is neither the default zone, or included in the default zone, but matches the rate's zone creates an adjustment.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1:2:1\"}}","Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb.#adjust taxable line item when price includes tax when order's zone is neither the default zone, or included in the default zone, but matches the rate's zone does not create a tax refund for each tax rate.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1:2:2\"}}","Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb.#adjust taxable line item when price includes tax when price does not include tax creates an adjustment.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1:4:3\"}}","Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb.#adjust taxable line item when price includes tax when price does not include tax deletes adjustments for open order when taxrate is deleted.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1:4:1\"}}","Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb.#adjust taxable line item when price includes tax when price does not include tax does not create a tax refund.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1:4:4\"}}","Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb.#adjust taxable line item when price includes tax when price does not include tax does not delete adjustments for complete order when taxrate is deleted.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1:4:2\"}}","Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb.#adjust taxable line item when price includes tax when price does not include tax tax adjustments applies adjustments when a tax zone is present.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1:4:5:1\"}}","Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb.#adjust taxable line item when price includes tax when price does not include tax tax adjustments when the tax zone is removed does not apply any adjustments.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1:4:5:2:1\"}}","Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb.#adjust taxable line item when price includes tax when two rates apply creates two price adjustments.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1:5:1\"}}","Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb.#adjust taxable line item when price includes tax when two rates apply price adjustments should be accurate.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1:5:2\"}}","Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb.#adjust taxable line item when price includes tax when zone is contained by default tax zone creates two adjustments, one for each tax rate.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1:1:1\"}}","Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb.#adjust taxable line item when price includes tax when zone is contained by default tax zone does not create a tax refund.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1:1:2\"}}","Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb.#amount_for_label returns a string with the percentage when the amount is not 0.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2\"}}","Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb.#amount_for_label returns an empty string when the amount is 0.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb.#label returns the name and amount for the tax rate.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb..adjust for MOSS taxation in Europe a download to france costs more including tax.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:4:1:3\"}}","Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb..adjust for MOSS taxation in Europe a download to germany costs 100 euros including tax.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:4:1:2\"}}","Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb..adjust for MOSS taxation in Europe a download to somewhere else costs the net amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:4:1:4\"}}","Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb..adjust for MOSS taxation in Europe a download without an address costs 100 euros including tax.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:4:1:1\"}}","Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb..adjust for MOSS taxation in Europe a t-shirt to france costs 100 euros including tax.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:4:2:2\"}}","Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb..adjust for MOSS taxation in Europe a t-shirt to germany costs 100 euros including tax.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:4:2:1\"}}","Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb..adjust for MOSS taxation in Europe a t-shirt to somewhere else costs the net amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:4:2:3\"}}","Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb..adjust with line items applies adjustments for two tax rates to the order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb..adjust with shipments applies adjustments for two tax rates to the order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:1\"}}","Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb..adjust without tax rates updates pre_tax_total to match line item cost if no taxes.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb..included_tax_amount_for will only get me tax amounts from tax_rates that match.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb.match returns an empty array when tax_zone is nil.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb.match when no rate zones match the tax zone when there is a default tax zone when the order has a different tax zone when the tax is a VAT return no tax rate.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:2:1:1\"}}","Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb.match when no rate zones match the tax zone when there is a default tax zone when the order has a different tax zone when the tax is not VAT returns no tax rate.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:2:2:1\"}}","Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb.match when no rate zones match the tax zone when there is a default tax zone when the order has the same tax zone when the tax is a VAT example at ./spec/models/spree/tax_rate_spec.rb:115.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:1:2:1\"}}","Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb.match when no rate zones match the tax zone when there is a default tax zone when the order has the same tax zone when the tax is not a VAT example at ./spec/models/spree/tax_rate_spec.rb:109.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:1:1:1\"}}","Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb.match when no rate zones match the tax zone when there is no default tax zone returns all rates that match the rate zone.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1:3\"}}","Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb.match when no rate zones match the tax zone when there is no default tax zone returns an empty array.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1:1\"}}","Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb.match when no rate zones match the tax zone when there is no default tax zone returns the rate that matches the rate zone.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1:2\"}}","Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb.match when no rate zones match the tax zone when there is no default tax zone when the tax_zone is contained within a rate zone returns the rate zone.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1:4:1\"}}","Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb.percentage conversion #amount_percentage converts decimal amount to percentage.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1:1\"}}","Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb.percentage conversion #amount_percentage handles zero amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1:3\"}}","Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb.percentage conversion #amount_percentage returns nil when amount is nil.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1:2\"}}","Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb.percentage conversion #amount_percentage rounds to 2 decimal places.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1:4\"}}","Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb.percentage conversion #amount_percentage= converts percentage to decimal amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2:1\"}}","Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb.percentage conversion #amount_percentage= handles string percentage values.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2:5\"}}","Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb.percentage conversion #amount_percentage= handles zero percentage.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2:4\"}}","Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb.percentage conversion #amount_percentage= sets amount to nil when percentage is empty string.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2:3\"}}","Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb.percentage conversion #amount_percentage= sets amount to nil when percentage is nil.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2:2\"}}","Spree::Taxon at ./spec/models/spree/taxon_spec.rb.#active_products_with_descendants when category has no products returns false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:17:3:1\"}}","Spree::Taxon at ./spec/models/spree/taxon_spec.rb.#active_products_with_descendants when category has products but children categories have no products returns false when products aren't active.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:17:4:2\"}}","Spree::Taxon at ./spec/models/spree/taxon_spec.rb.#active_products_with_descendants when category has products but children categories have no products returns true.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:17:4:1\"}}","Spree::Taxon at ./spec/models/spree/taxon_spec.rb.#active_products_with_descendants when category has products returns true when products aren't active.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:17:1:2\"}}","Spree::Taxon at ./spec/models/spree/taxon_spec.rb.#active_products_with_descendants when category has products returns true.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:17:1:1\"}}","Spree::Taxon at ./spec/models/spree/taxon_spec.rb.#active_products_with_descendants when children categories also have no products returns false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:17:5:1\"}}","Spree::Taxon at ./spec/models/spree/taxon_spec.rb.#active_products_with_descendants when only children categories have products returns false when products aren't active.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:17:2:2\"}}","Spree::Taxon at ./spec/models/spree/taxon_spec.rb.#active_products_with_descendants when only children categories have products returns true.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:17:2:1\"}}","Spree::Taxon at ./spec/models/spree/taxon_spec.rb.#cached_self_and_descendants_ids example at ./spec/models/spree/taxon_spec.rb:270.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1\"}}","Spree::Taxon at ./spec/models/spree/taxon_spec.rb.#copy_taxonomy_from_parent example at ./spec/models/spree/taxon_spec.rb:277.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1\"}}","Spree::Taxon at ./spec/models/spree/taxon_spec.rb.#copy_taxonomy_from_parent example at ./spec/models/spree/taxon_spec.rb:278.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2\"}}","Spree::Taxon at ./spec/models/spree/taxon_spec.rb.#localized_slugs_for_store when one of the supported locales does not have a translation falls back to store's default locale.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:2:1\"}}","Spree::Taxon at ./spec/models/spree/taxon_spec.rb.#localized_slugs_for_store when setting the slug translations for taxonomy sets the slugs in slug format.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:3:1\"}}","Spree::Taxon at ./spec/models/spree/taxon_spec.rb.#localized_slugs_for_store when setting the slugs in taxon under taxomony with different parent slug sets the slug in valid format.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:4:1\"}}","Spree::Taxon at ./spec/models/spree/taxon_spec.rb.#localized_slugs_for_store when there are slugs in locales not supported by the store returns only slugs in locales supported by the store.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:1:1\"}}","Spree::Taxon at ./spec/models/spree/taxon_spec.rb.#pretty_name 1 lvl deep returns taxonomy name and taxon name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:1:1\"}}","Spree::Taxon at ./spec/models/spree/taxon_spec.rb.#pretty_name 2+ lvl deep returns parent name and taxon name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:2:1\"}}","Spree::Taxon at ./spec/models/spree/taxon_spec.rb.#pretty_name 2+ lvl deep when name is updated returns the updated pretty name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:2:2:1\"}}","Spree::Taxon at ./spec/models/spree/taxon_spec.rb.#pretty_name 2+ lvl deep when parent name is updated returns the updated pretty name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:2:3:1\"}}","Spree::Taxon at ./spec/models/spree/taxon_spec.rb.#pretty_name when `always_use_translations` is disabled sets the pretty name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:3:1\"}}","Spree::Taxon at ./spec/models/spree/taxon_spec.rb.#pretty_name when `always_use_translations` is enabled sets the pretty name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:4:1\"}}","Spree::Taxon at ./spec/models/spree/taxon_spec.rb.#products_matching_rules when the taxon is automatic when the taxon has no rules returns an empty taxon.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:2:1:1\"}}","Spree::Taxon at ./spec/models/spree/taxon_spec.rb.#products_matching_rules when the taxon is automatic when the taxon has rules when the rule is a sale rule when the match policy is in_not_equal_to matches products that aren't on sale and have price in store's currency.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:2:2:2:2:1\"}}","Spree::Taxon at ./spec/models/spree/taxon_spec.rb.#products_matching_rules when the taxon is automatic when the taxon has rules when the rule is a sale rule when the match policy is is_equal_to matches products that are on sale in store's currency.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:2:2:2:1:1\"}}","Spree::Taxon at ./spec/models/spree/taxon_spec.rb.#products_matching_rules when the taxon is automatic when the taxon has rules when the rule is a tag rule when the match policy is is_equal_to returns products that match cruelty-free tag.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:2:2:1:1:1\"}}","Spree::Taxon at ./spec/models/spree/taxon_spec.rb.#products_matching_rules when the taxon is automatic when the taxon has rules when the rule is a tag rule when the match policy is is_equal_to returns products that match discounted tag.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:2:2:1:1:2\"}}","Spree::Taxon at ./spec/models/spree/taxon_spec.rb.#products_matching_rules when the taxon is automatic when the taxon has rules when the rule is a tag rule when the match policy is is_equal_to with all rules match policy returns products that match both tags.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:2:2:1:1:3:1\"}}","Spree::Taxon at ./spec/models/spree/taxon_spec.rb.#products_matching_rules when the taxon is automatic when the taxon has rules when the rule is a tag rule when the match policy is is_equal_to with any rules match policy returns products that match any tag.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:2:2:1:1:4:1\"}}","Spree::Taxon at ./spec/models/spree/taxon_spec.rb.#products_matching_rules when the taxon is automatic when the taxon has rules when the rule is a tag rule when the match policy is is_not_equal_to returns products that do not match cruelty-free tag.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:2:2:1:2:1\"}}","Spree::Taxon at ./spec/models/spree/taxon_spec.rb.#products_matching_rules when the taxon is automatic when the taxon has rules when the rule is a tag rule when the match policy is is_not_equal_to returns products that do not match discounted tag.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:2:2:1:2:2\"}}","Spree::Taxon at ./spec/models/spree/taxon_spec.rb.#products_matching_rules when the taxon is automatic when the taxon has rules when the rule is a tag rule when the match policy is is_not_equal_to with all rules match policy returns products that do not match both tags.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:2:2:1:2:3:1\"}}","Spree::Taxon at ./spec/models/spree/taxon_spec.rb.#products_matching_rules when the taxon is automatic when the taxon has rules when the rule is a tag rule when the match policy is is_not_equal_to with any rules match policy returns products that do not match any tag.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:2:2:1:2:4:1\"}}","Spree::Taxon at ./spec/models/spree/taxon_spec.rb.#products_matching_rules when the taxon is manual returns an empty taxon.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:1:1\"}}","Spree::Taxon at ./spec/models/spree/taxon_spec.rb.#regenerate_pretty_name_and_permalink regenerates pretty name and permalink.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:1\"}}","Spree::Taxon at ./spec/models/spree/taxon_spec.rb.#regenerate_pretty_name_and_permalink when parent name is changed updates the pretty name and permalink.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:3:1\"}}","Spree::Taxon at ./spec/models/spree/taxon_spec.rb.#regenerate_pretty_name_and_permalink when parent's permalink is changed updates the pretty name and permalink.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:2:1\"}}","Spree::Taxon at ./spec/models/spree/taxon_spec.rb.#regenerate_pretty_name_and_permalink when taxon is moved updates the pretty name and permalink when move is done inside different locales.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:5:2\"}}","Spree::Taxon at ./spec/models/spree/taxon_spec.rb.#regenerate_pretty_name_and_permalink when taxon is moved updates the pretty name and permalink.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:5:1\"}}","Spree::Taxon at ./spec/models/spree/taxon_spec.rb.#regenerate_pretty_name_and_permalink with translations updates the pretty name and permalink for translations as well.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:4:1\"}}","Spree::Taxon at ./spec/models/spree/taxon_spec.rb.#store returns the store from the taxonomy.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:1\"}}","Spree::Taxon at ./spec/models/spree/taxon_spec.rb.#sync_taxonomy_name when none root taxon name is updated does not update the taxonomy name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:1:1\"}}","Spree::Taxon at ./spec/models/spree/taxon_spec.rb.#sync_taxonomy_name when root taxon attribute other than name is updated does not update the taxonomy.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:4:1\"}}","Spree::Taxon at ./spec/models/spree/taxon_spec.rb.#sync_taxonomy_name when root taxon name is updated updates the taxonomy name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:2:1\"}}","Spree::Taxon at ./spec/models/spree/taxon_spec.rb.#sync_taxonomy_name when root taxon name is updated with special characters updates the taxonomy name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:3:1\"}}","Spree::Taxon at ./spec/models/spree/taxon_spec.rb.#to_param example at ./spec/models/spree/taxon_spec.rb:13.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","Spree::Taxon at ./spec/models/spree/taxon_spec.rb.Scopes .for_taxonomy when translations are disabled returns the correct taxon.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1:1\"}}","Spree::Taxon at ./spec/models/spree/taxon_spec.rb.Scopes .for_taxonomy when translations are enabled returns the correct taxon.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:2:1\"}}","Spree::Taxon at ./spec/models/spree/taxon_spec.rb.Scopes .with_matching_name returns the taxon with the matching name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1\"}}","Spree::Taxon at ./spec/models/spree/taxon_spec.rb.Scopes .with_matching_name with translations returns the taxon with the matching name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:2:1\"}}","Spree::Taxon at ./spec/models/spree/taxon_spec.rb.Validations #check_for_root does not validate the taxon.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","Spree::Taxon at ./spec/models/spree/taxon_spec.rb.Validations #check_for_root validates the taxon.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:2\"}}","Spree::Taxon at ./spec/models/spree/taxon_spec.rb.Validations #parent_belongs_to_same_taxonomy does not validate the taxon.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","Spree::Taxon at ./spec/models/spree/taxon_spec.rb.Validations #parent_belongs_to_same_taxonomy validates the taxon.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:2\"}}","Spree::Taxon at ./spec/models/spree/taxon_spec.rb.behaves like metadata can query records by metadata properties.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:10\"}}","Spree::Taxon at ./spec/models/spree/taxon_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:10.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","Spree::Taxon at ./spec/models/spree/taxon_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:11.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","Spree::Taxon at ./spec/models/spree/taxon_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:4.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::Taxon at ./spec/models/spree/taxon_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:5.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","Spree::Taxon at ./spec/models/spree/taxon_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:7.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","Spree::Taxon at ./spec/models/spree/taxon_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:8.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","Spree::Taxon at ./spec/models/spree/taxon_spec.rb.behaves like metadata reads data as not symbolized keys.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8\"}}","Spree::Taxon at ./spec/models/spree/taxon_spec.rb.behaves like metadata reads data as symbolized keys.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7\"}}","Spree::Taxon at ./spec/models/spree/taxon_spec.rb.callbacks regenerate_taxon_products when rule is created calls #regenerate_taxon_products.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:4:1\"}}","Spree::Taxon at ./spec/models/spree/taxon_spec.rb.callbacks regenerate_taxon_products when rule is destroyed calls #regenerate_taxon_products.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:3:1\"}}","Spree::Taxon at ./spec/models/spree/taxon_spec.rb.callbacks regenerate_taxon_products when taxon's rule changes calls #regenerate_taxon_products.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:2:1\"}}","Spree::Taxon at ./spec/models/spree/taxon_spec.rb.callbacks regenerate_taxon_products when taxon's rules_match_policy changes calls #regenerate_taxon_products.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:1:1\"}}","Spree::Taxon at ./spec/models/spree/taxon_spec.rb.creating a child node using first_or_create does not error out.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1\"}}","Spree::Taxon at ./spec/models/spree/taxon_spec.rb.ransackable_associations example at ./spec/models/spree/taxon_spec.rb:266.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1\"}}","Spree::Taxon at ./spec/models/spree/taxon_spec.rb.set_permalink sets permalink correctly when no parent present.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","Spree::Taxon at ./spec/models/spree/taxon_spec.rb.set_permalink stores old slugs in FriendlyIds history.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:3\"}}","Spree::Taxon at ./spec/models/spree/taxon_spec.rb.set_permalink supports Chinese characters.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2\"}}","Spree::Taxon at ./spec/models/spree/taxon_spec.rb.set_permalink with parent taxon sets permalink correctly when taxon has parent.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:4:1\"}}","Spree::Taxon at ./spec/models/spree/taxon_spec.rb.set_permalink with parent taxon sets permalink correctly with existing permalink present.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:4:2\"}}","Spree::Taxon at ./spec/models/spree/taxon_spec.rb.set_permalink with parent taxon setting a new node sibling position via :child_index= taxon is not new passes the desired index move_to_child_with_index of :parent.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:4:4:1:1\"}}","Spree::Taxon at ./spec/models/spree/taxon_spec.rb.set_permalink with parent taxon supports Chinese characters.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:4:3\"}}","Spree::Taxon at ./spec/models/spree/taxon_spec.rb.when using another locale translates taxon fields.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","Spree::TaxonImage at ./spec/models/spree/taxon_image_spec.rb.validation has allowed attachment content type.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::TaxonImage at ./spec/models/spree/taxon_image_spec.rb.validation has no allowed attachment content type.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","Spree::Taxonomy at ./spec/models/spree/taxonomy_spec.rb.#destroy destroys all associated taxons.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","Spree::Taxonomy at ./spec/models/spree/taxonomy_spec.rb.#set_root_taxon_name when Taxonomy is created sets the root Taxonomy name to match.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1\"}}","Spree::Taxonomy at ./spec/models/spree/taxonomy_spec.rb.#set_root_taxon_name when Taxonomy name is updated changes the root Taxon name to match.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1\"}}","Spree::Taxonomy at ./spec/models/spree/taxonomy_spec.rb.#set_root_taxon_name when Taxonomy position is updated does not change the root Taxon name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3:1\"}}","Spree::Taxonomy at ./spec/models/spree/taxonomy_spec.rb.behaves like metadata can query records by metadata properties.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:10\"}}","Spree::Taxonomy at ./spec/models/spree/taxonomy_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:10.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","Spree::Taxonomy at ./spec/models/spree/taxonomy_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:11.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","Spree::Taxonomy at ./spec/models/spree/taxonomy_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:4.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::Taxonomy at ./spec/models/spree/taxonomy_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:5.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","Spree::Taxonomy at ./spec/models/spree/taxonomy_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:7.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","Spree::Taxonomy at ./spec/models/spree/taxonomy_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:8.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","Spree::Taxonomy at ./spec/models/spree/taxonomy_spec.rb.behaves like metadata reads data as not symbolized keys.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8\"}}","Spree::Taxonomy at ./spec/models/spree/taxonomy_spec.rb.behaves like metadata reads data as symbolized keys.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7\"}}","Spree::Taxonomy at ./spec/models/spree/taxonomy_spec.rb.scopes .with_matching_name returns the taxonomy with the matching name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","Spree::Taxonomy at ./spec/models/spree/taxonomy_spec.rb.scopes .with_matching_name with translations returns the taxonomy with the matching name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:2:1\"}}","Spree::Taxons::AddProducts at ./spec/services/spree/taxons/add_products_spec.rb.#call creates classifications for each taxon-product pair.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::Taxons::AddProducts at ./spec/services/spree/taxons/add_products_spec.rb.#call returns a successful result.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","Spree::Taxons::AddProducts at ./spec/services/spree/taxons/add_products_spec.rb.#call sets the correct position for each classification.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","Spree::Taxons::AddProducts at ./spec/services/spree/taxons/add_products_spec.rb.#call touches all products.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","Spree::Taxons::AddProducts at ./spec/services/spree/taxons/add_products_spec.rb.#call touches all taxons.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","Spree::Taxons::AddProducts at ./spec/services/spree/taxons/add_products_spec.rb.#call updates classification_count on products.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7\"}}","Spree::Taxons::AddProducts at ./spec/services/spree/taxons/add_products_spec.rb.#call updates classification_count on taxons.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","Spree::Taxons::Find at ./spec/finders/spree/taxons/find_spec.rb.filtering by taxon property when filtering by taxon name returns taxon with matching name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","Spree::Taxons::RegenerateProducts at ./spec/services/spree/taxons/regenerate_products_spec.rb.after changing rules re-matches products for an automatic taxon.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::Taxons::RegenerateProducts at ./spec/services/spree/taxons/regenerate_products_spec.rb.after changing rules updates classification_count on products.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","Spree::Taxons::RegenerateProducts at ./spec/services/spree/taxons/regenerate_products_spec.rb.after changing rules updates classification_count on taxon.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","Spree::Taxons::RegenerateProducts at ./spec/services/spree/taxons/regenerate_products_spec.rb.when nothing changed doesn't change the taxon.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","Spree::Taxons::RegenerateProducts at ./spec/services/spree/taxons/regenerate_products_spec.rb.with manual order when nothing changed keeps products positions.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","Spree::Taxons::RegenerateProducts at ./spec/services/spree/taxons/regenerate_products_spec.rb.with manual order when products added keeps products positions.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","Spree::Taxons::RegenerateProducts at ./spec/services/spree/taxons/regenerate_products_spec.rb.with manual order when some one product removed and 2 added keeps products positions.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3:1\"}}","Spree::Taxons::RegenerateProducts at ./spec/services/spree/taxons/regenerate_products_spec.rb.with manual order when some one product removed from middle of list and 2 added keeps products positions.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4:1\"}}","Spree::Taxons::RemoveProducts at ./spec/services/spree/taxons/remove_products_spec.rb.#call removes classifications for each taxon-product pair.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::Taxons::RemoveProducts at ./spec/services/spree/taxons/remove_products_spec.rb.#call resets the position for remaining classifications.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","Spree::Taxons::RemoveProducts at ./spec/services/spree/taxons/remove_products_spec.rb.#call returns a successful result.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","Spree::Taxons::RemoveProducts at ./spec/services/spree/taxons/remove_products_spec.rb.#call touches all products.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","Spree::Taxons::RemoveProducts at ./spec/services/spree/taxons/remove_products_spec.rb.#call touches all taxons.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","Spree::Taxons::RemoveProducts at ./spec/services/spree/taxons/remove_products_spec.rb.#call updates classification_count on products.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7\"}}","Spree::Taxons::RemoveProducts at ./spec/services/spree/taxons/remove_products_spec.rb.#call updates classification_count on taxons.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","Spree::UrlValidator at ./spec/validators/spree/url_validator_spec.rb.using a given message or a defined one using the message option adds the given message to the record url errors array.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","Spree::UrlValidator at ./spec/validators/spree/url_validator_spec.rb.using a given message or a defined one without using the message option adds a pre-defined message to the record url error array.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","Spree::UrlValidator at ./spec/validators/spree/url_validator_spec.rb.validating the given URL is invalid example at ./spec/validators/spree/url_validator_spec.rb:16.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","Spree::UrlValidator at ./spec/validators/spree/url_validator_spec.rb.validating the given URL is invalid example at ./spec/validators/spree/url_validator_spec.rb:17.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2\"}}","Spree::UrlValidator at ./spec/validators/spree/url_validator_spec.rb.validating the given URL is invalid example at ./spec/validators/spree/url_validator_spec.rb:18.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3\"}}","Spree::UrlValidator at ./spec/validators/spree/url_validator_spec.rb.validating the given URL is invalid example at ./spec/validators/spree/url_validator_spec.rb:19.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:4\"}}","Spree::UrlValidator at ./spec/validators/spree/url_validator_spec.rb.validating the given URL is invalid example at ./spec/validators/spree/url_validator_spec.rb:20.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:5\"}}","Spree::UrlValidator at ./spec/validators/spree/url_validator_spec.rb.validating the given URL is valid example at ./spec/validators/spree/url_validator_spec.rb:24.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","Spree::UrlValidator at ./spec/validators/spree/url_validator_spec.rb.validating the given URL is valid example at ./spec/validators/spree/url_validator_spec.rb:25.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2\"}}","Spree::UrlValidator at ./spec/validators/spree/url_validator_spec.rb.validating the given URL is valid example at ./spec/validators/spree/url_validator_spec.rb:26.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:3\"}}","Spree::UrlValidator at ./spec/validators/spree/url_validator_spec.rb.validating the given URL is valid example at ./spec/validators/spree/url_validator_spec.rb:27.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:4\"}}","Spree::UrlValidator at ./spec/validators/spree/url_validator_spec.rb.validating the given URL is valid example at ./spec/validators/spree/url_validator_spec.rb:29.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:5\"}}","Spree::UserManagement at ./spec/models/spree/concerns/user_management_spec.rb.associations has many invitations.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3\"}}","Spree::UserManagement at ./spec/models/spree/concerns/user_management_spec.rb.associations has many role_users.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","Spree::UserManagement at ./spec/models/spree/concerns/user_management_spec.rb.associations has many users through role_users.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","Spree::UserManagement at ./spec/models/spree/concerns/user_management_spec.rb.instance methods #add_user adds a user to the resource with a specified role.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2\"}}","Spree::UserManagement at ./spec/models/spree/concerns/user_management_spec.rb.instance methods #add_user adds a user to the resource with the default role.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","Spree::UserManagement at ./spec/models/spree/concerns/user_management_spec.rb.instance methods #default_user_role returns the default admin role.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","Spree::UserManagement at ./spec/models/spree/concerns/user_management_spec.rb.instance methods #remove_user removes a user from the resource.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","Spree::UserMethods at ./spec/models/spree/concerns/user_methods_spec.rb.#can_be_deleted? when user has a role on current store returns false if user is the last with a role on the store.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1:2\"}}","Spree::UserMethods at ./spec/models/spree/concerns/user_methods_spec.rb.#can_be_deleted? when user has a role on current store returns true if another user also has a role on the store.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1:1\"}}","Spree::UserMethods at ./spec/models/spree/concerns/user_methods_spec.rb.#can_be_deleted? when user has no role on current store returns false if user has completed orders.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2:2\"}}","Spree::UserMethods at ./spec/models/spree/concerns/user_methods_spec.rb.#can_be_deleted? when user has no role on current store returns true if user has no completed orders.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2:1\"}}","Spree::UserMethods at ./spec/models/spree/concerns/user_methods_spec.rb.#check_completed_orders allow to destroy dependent destroy does not destroy dependent destroy items.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","Spree::UserMethods at ./spec/models/spree/concerns/user_methods_spec.rb.#check_completed_orders rstrict t delete dependent destroyed does not destroy dependent destroy items.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","Spree::UserMethods at ./spec/models/spree/concerns/user_methods_spec.rb.#invited_by returns the user who invited the current user.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","Spree::UserMethods at ./spec/models/spree/concerns/user_methods_spec.rb.#last_incomplete_spree_order with an incomplete order example at ./spec/models/spree/concerns/user_methods_spec.rb:20.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","Spree::UserMethods at ./spec/models/spree/concerns/user_methods_spec.rb.#last_incomplete_spree_order with incomplete canceled order example at ./spec/models/spree/concerns/user_methods_spec.rb:26.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","Spree::UserMethods at ./spec/models/spree/concerns/user_methods_spec.rb.#last_incomplete_spree_order without an incomplete order example at ./spec/models/spree/concerns/user_methods_spec.rb:30.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","Spree::UserMethods at ./spec/models/spree/concerns/user_methods_spec.rb.#payment_sources does not include credit cards that belong to other user.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","Spree::UserMethods at ./spec/models/spree/concerns/user_methods_spec.rb.#payment_sources does not include credit cards with inactive payment method.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:5\"}}","Spree::UserMethods at ./spec/models/spree/concerns/user_methods_spec.rb.#payment_sources does not include credit cards without payment profile.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3\"}}","Spree::UserMethods at ./spec/models/spree/concerns/user_methods_spec.rb.#payment_sources does not include outdated credit cards.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4\"}}","Spree::UserMethods at ./spec/models/spree/concerns/user_methods_spec.rb.#payment_sources includes only not expired credit cards with payment profile that belong to subject user.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","Spree::UserMethods at ./spec/models/spree/concerns/user_methods_spec.rb.#scramble_email_and_names scramble email and names.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","Spree::UserMethods at ./spec/models/spree/concerns/user_methods_spec.rb..multi_search returns users based on an email.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","Spree::UserMethods at ./spec/models/spree/concerns/user_methods_spec.rb..multi_search returns users based on the first name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2\"}}","Spree::UserRoles at ./spec/models/spree/concerns/user_roles_spec.rb.#add_role adds a role to the user.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::UserRoles at ./spec/models/spree/concerns/user_roles_spec.rb.#add_role when a resource parameter is provided adds a role to the user for the resource.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","Spree::UserRoles at ./spec/models/spree/concerns/user_roles_spec.rb.#has_spree_role? when a resource parameter is provided when the user does not have the role for the resource returns false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3:2:1\"}}","Spree::UserRoles at ./spec/models/spree/concerns/user_roles_spec.rb.#has_spree_role? when a resource parameter is provided when the user has the role for the resource returns true.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3:1:1\"}}","Spree::UserRoles at ./spec/models/spree/concerns/user_roles_spec.rb.#has_spree_role? with a role example at ./spec/models/spree/concerns/user_roles_spec.rb:56.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","Spree::UserRoles at ./spec/models/spree/concerns/user_roles_spec.rb.#has_spree_role? without a role example at ./spec/models/spree/concerns/user_roles_spec.rb:60.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","Spree::UserRoles at ./spec/models/spree/concerns/user_roles_spec.rb.#remove_role removes a role from the user.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","Spree::UserRoles at ./spec/models/spree/concerns/user_roles_spec.rb.#remove_role when a resource parameter is provided removes a role from the user for the resource.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","Spree::UserRoles at ./spec/models/spree/concerns/user_roles_spec.rb.#spree_admin? example at ./spec/models/spree/concerns/user_roles_spec.rb:83.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","Spree::UserRoles at ./spec/models/spree/concerns/user_roles_spec.rb.#spree_admin? when a resource parameter is provided checks against the resource.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1\"}}","Spree::UserRoles at ./spec/models/spree/concerns/user_roles_spec.rb..spree_admin_created? returns false when admin does not exist.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2\"}}","Spree::UserRoles at ./spec/models/spree/concerns/user_roles_spec.rb..spree_admin_created? returns true when admin exists.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.#additional_images returns all images except the default.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:53:1\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.#available? when discontinued when product is available example at ./spec/models/spree/variant_spec.rb:1220.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:43:1:1:1\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.#available? when discontinued when product is not available example at ./spec/models/spree/variant_spec.rb:1228.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:43:1:2:1\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.#available? when not discontinued when product is available example at ./spec/models/spree/variant_spec.rb:1242.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:43:2:1:1\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.#available? when not discontinued when product is not available example at ./spec/models/spree/variant_spec.rb:1250.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:43:2:2:1\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.#backordered? returns false when out of stock and not backorderable.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:47:2\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.#backordered? returns false when there is available item in stock.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:47:3\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.#backordered? returns true when out of stock and backorderable.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:47:1\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.#cost_currency when cost currency is nil populates cost currency with the default value on save.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:1:1\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.#cost_price= uses LocalizedNumber.parse.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:1\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.#created_at creates variant with created_at timestamp.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:45:1\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.#currency returns the globally configured currency.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:1\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.#default_image when variant has images returns the first image.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:50:1:1\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.#default_image when variant has no images falls back to product default image.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:50:2:1\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.#dimension return the dimension if the dimension parameters are different of zero.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:40:1\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.#discontinue! changes updated_at.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:41:2\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.#discontinue! sets the discontinued.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:41:1\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.#discontinued? is false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:42:1\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.#discontinued? is true.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:42:2\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.#display_amount returns a Spree::Money.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:17:1\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.#ensure_not_in_complete_orders adds error on variant destroy.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:48:1\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.#has_images? when images are preloaded but empty returns false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:54:4:1\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.#has_images? when images are preloaded uses loaded association.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:54:3:1\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.#has_images? when variant has images returns true.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:54:2:1\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.#has_images? when variant has no images returns false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:54:1:1\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.#in_stock? #can_supply? calls out to quantifier.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:2:1\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.#in_stock? when stock_items are backorderable when stock_items out of stock can_supply? return true.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:3:1:2\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.#in_stock? when stock_items are backorderable when stock_items out of stock in_stock? returns false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:3:1:1\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.#in_stock? when stock_items are not backorderable when stock_items in stock returns true if stock_items in stock.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:1:1:1\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.#in_stock? when stock_items are not backorderable when stock_items out of stock return false if stock_items out of stock.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:1:2:1\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.#in_stock_or_backorderable? when variant has no stock items example at ./spec/models/spree/variant_spec.rb:482.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:1:1\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.#in_stock_or_backorderable? when variant has stock items when variant stock items count_on_hand <= 0 example at ./spec/models/spree/variant_spec.rb:499.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:2:2:1\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.#in_stock_or_backorderable? when variant has stock items when variant stock items count_on_hand <= 0 when variant track_inventory = false example at ./spec/models/spree/variant_spec.rb:504.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:2:2:2:1\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.#in_stock_or_backorderable? when variant has stock items when variant stock items count_on_hand <= 0 when variant track_inventory = true example at ./spec/models/spree/variant_spec.rb:508.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:2:2:3:1\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.#in_stock_or_backorderable? when variant has stock items when variant stock items count_on_hand <= 0 when variant track_inventory = true with some variant stock item having backorderable = true example at ./spec/models/spree/variant_spec.rb:513.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:2:2:3:2:1\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.#in_stock_or_backorderable? when variant has stock items when variant stock items count_on_hand > 0 example at ./spec/models/spree/variant_spec.rb:493.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:2:1:1\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.#is_backorderable invokes Spree::Stock::Quantifier.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:30:1\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.#on_sale? when existing currency is passed checks if variant is discounted in that currency.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:21:1:1\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.#on_sale? when existing currency is passed when variant is discounted returns true.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:21:1:2:1\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.#on_sale? when existing currency is passed when variant is not discounted returns false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:21:1:3:1\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.#on_sale? when passed currency does not exist returns false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:21:2:1\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.#options returns an array of hashes with option type name, value, and presentation orderd by option type position.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:23:1\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.#options_text when the variant has no option values returns an empty string.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:24:1:1\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.#options_text when the variant has option values returns the options text of the variant.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:24:2:1\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.#price= uses LocalizedNumber.parse.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:1\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.#price_in when currency is EUR returns the value in the EUR.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:2:1\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.#price_in when currency is USD returns the value in the USD.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:3:1\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.#price_in when currency is not specified returns 0.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:1:1\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.#price_in when price exists in a price list does not return price list price.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:5:1\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.#price_in when price exists in a price list when base price also exists returns the base price, not the price list price.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:5:2:1\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.#price_in when there is no price with present amount in given currency returns 0.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:4:1\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.#primary_image returns the first image.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:51:1\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.#purchasable? when stock_items are not backorderable when stock_items in stock returns true if stock_items in stock.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:31:1:1:1\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.#purchasable? when stock_items are not backorderable when stock_items out of stock return false if stock_items out of stock.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:31:1:2:1\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.#purchasable? when stock_items are out of stock when stock item are backorderable returns true if stock_items are backorderable.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:31:2:1:1\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.#purchasable? when stock_items are out of stock when stock_items are not backorderable return false if stock_items are not backorderable.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:31:2:2:1\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.#remove_line_items_from_incomplete_orders deletes the line items from the order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:49:2\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.#remove_line_items_from_incomplete_orders schedules RemoveFromIncompleteOrdersJob.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:49:1\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.#secondary_image returns the second image.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:52:1\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.#set_price creates a base price for the currency.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:20:1\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.#set_price does not update price list price.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:20:3\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.#set_price sets compare_at_amount when provided.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:20:4\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.#set_price updates existing base price.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:20:2\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.#should_track_inventory? does not track inventory when global setting is off.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:35:1\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.#should_track_inventory? does not track inventory when variant is turned off.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:35:2\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.#should_track_inventory? tracks inventory when global and variant are on.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:35:3\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.#tax_category when tax category is deleted also in product with default tax category returns the default tax category.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:33:4:1:1\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.#tax_category when tax category is deleted also in product without default tax category returns nil.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:33:4:2:1\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.#tax_category when tax category is deleted returns the parent products tax_category.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:33:3:1\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.#tax_category when tax_category is nil returns the parent products tax_category.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:33:1:1\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.#tax_category when tax_category is set returns the tax_category set on itself.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:33:2:1\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.#total_on_hand is infinite if track_inventory_levels is false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:32:1\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.#total_on_hand matches quantifier total_on_hand.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:32:2\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.#updated_at creates variant with updated_at timestamp.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:46:1\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.#volume is zero if any dimension parameter is zero.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:39:1\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.#volume return the volume if the dimension parameters are different of zero.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:39:2\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.#weight= uses LocalizedNumber.parse.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:1\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb..amount_in when currency is EUR returns the value in the EUR.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:22:2:1\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb..amount_in when currency is USD returns the value in the USD.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:22:3:1\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb..amount_in when currency is not specified returns nil.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:22:1:1\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.after create #create_default_stock_item existing variant creates a default stock item.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:4:3:1\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.after create #create_default_stock_item when not tracking inventory creates a default stock item.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:4:1:1\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.after create #create_default_stock_item when not tracking inventory when variant is created along with a stock item does not create an another stock item.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:4:1:2:1\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.after create #create_default_stock_item when tracking inventory does not create a default stock item.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:4:2:1\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.after create mark_master_out_of_stock when a variant is created example at ./spec/models/spree/variant_spec.rb:143.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:3:2:1\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.after create mark_master_out_of_stock when product is created without variants but with stock example at ./spec/models/spree/variant_spec.rb:137.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:3:1:1\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.after create propagate to stock items.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.after create stock location has disable propagate all variants propagate to stock items.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2:1\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.after_commit :remove_prices_from_master_variant removes prices from master when variant with price is created.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.after_commit :remove_stock_items_from_master_variant removes stock items from master when variant is created.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.after_update_commit :handle_track_inventory_change when not tracking inventory updates stock item count on hand to 0.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1:1\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.after_update_commit :handle_track_inventory_change when tracking inventory keeps stock items.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2:1\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.behaves like default_price #default_price delegates price.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.behaves like default_price #default_price delegates price_including_vat_for.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:3\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.behaves like default_price #default_price example at ./spec/support/concerns/default_price.rb:23.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.behaves like default_price .has_one :default_price has a dependent destroy.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.behaves like default_price .has_one :default_price has the class name of Spree::Price.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.behaves like default_price .has_one :default_price is a has one association.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.behaves like default_price example at ./spec/support/concerns/default_price.rb:36.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.behaves like lifecycle events lifecycle events variant.created publishes created event when record is created.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1:1\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.behaves like lifecycle events lifecycle events variant.deleted publishes deleted event when record is deleted.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:3:1\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.behaves like lifecycle events lifecycle events variant.updated publishes updated event when record is updated.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:2:1\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.behaves like metadata can query records by metadata properties.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:10\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:10.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:5\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:11.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:6\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:4.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:5.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:7.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:8.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:4\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.behaves like metadata reads data as not symbolized keys.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:8\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.behaves like metadata reads data as symbolized keys.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:7\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.counter cache variant_count on product correctly counts multiple variants.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:55:1:4\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.counter cache variant_count on product decrements when a variant is destroyed.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:55:1:2\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.counter cache variant_count on product does not count master variant.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:55:1:3\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.counter cache variant_count on product increments when a variant is created.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:55:1:1\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.deleted_at scope has a price if deleted.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:36:1\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.descriptive_name master variant returns name with Master identifier.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:27:1:1\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.descriptive_name variant returns options text with name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:27:2:1\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.exchange_name master variant returns name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:25:1:1\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.exchange_name master variant returns name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:26:1:1\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.exchange_name variant returns options text.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:25:2:1\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.exchange_name variant returns options text.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:26:2:1\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.in_stock scope returns all in stock variants.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:38:1\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.product has other variants option value accessors does not duplicate associated option values when set multiple times.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1:2\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.product has other variants option value accessors sets option value.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1:1\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.product has other variants product has other variants option value accessors does not duplicate associated option values when set multiple times.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2:1:2\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.product has other variants product has other variants option value accessors sets option value.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2:1:1\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.scope .active example at ./spec/models/spree/variant_spec.rb:396.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:5:4\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.scope .active finds not_deleted variants.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:5:2\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.scope .active finds not_discontinued variants.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:5:1\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.scope .active finds variants for_currency_and_available_price_amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:5:3\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.scope .eligible when only master variants returns all of them.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1:1:1\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.scope .eligible when product has more than 1 variant filters master variant out.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1:2:1\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.scope .for_currency_and_available_price_amount when currency parameter is nil example at ./spec/models/spree/variant_spec.rb:367.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:4:3:1\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.scope .for_currency_and_available_price_amount when price with currency not present when price do not have amount example at ./spec/models/spree/variant_spec.rb:358.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:4:2:2:1\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.scope .for_currency_and_available_price_amount when price with currency not present when price has amount example at ./spec/models/spree/variant_spec.rb:348.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:4:2:1:1\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.scope .for_currency_and_available_price_amount when price with currency present when price do not have amount example at ./spec/models/spree/variant_spec.rb:338.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:4:1:2:1\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.scope .for_currency_and_available_price_amount when price with currency present when price has amount example at ./spec/models/spree/variant_spec.rb:328.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:4:1:1:1\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.scope .not_deleted when deleted example at ./spec/models/spree/variant_spec.rb:311.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:3:1:1\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.scope .not_deleted when not deleted example at ./spec/models/spree/variant_spec.rb:317.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:3:2:1\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.scope .not_discontinued when discontinue_on not present example at ./spec/models/spree/variant_spec.rb:303.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:2:3:1\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.scope .not_discontinued when discontinued example at ./spec/models/spree/variant_spec.rb:291.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:2:1:1\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.scope .not_discontinued when not discontinued example at ./spec/models/spree/variant_spec.rb:297.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:2:2:1\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.set_position sets variant position after creation.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:28:1\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.sorting responds to set_list_position.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.stock movements builds out collection just fine through stock items.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:37:1\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.touching clears the in_stock cache key.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:34:2\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.touching updates a product.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:34:1\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.touching when unlinking an option value touches variant.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:34:3:1\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.validate :check_price when variant has a default price keeps the default price.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:44:1:1\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.validate :check_price when variant has a default price when the default price is invalid infers price from the default variant.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:44:1:2:1\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.validate :check_price when variant has a default price when the default price is invalid when there is no default variant adds an error.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:44:1:2:2:1\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.validate :check_price when variant has no default price infers price from the default variant.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:44:2:1\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.validate :check_price when variant has no default price when there is no default variant adds an error.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:44:2:2:1\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.validate :check_price when variant has prices keeps the prices.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:44:3:1\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.validations SKU default behaviour invalid with the same SKU.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3:2:1:1\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.validations SKU default behaviour valid with different SKU.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3:2:2:1\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.validations SKU default behaviour valid without SKU.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3:2:2:2\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.validations SKU disabled validation valid with the same SKU.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3:3:1:1\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.validations SKU disabled validation valid without SKU.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3:3:1:2\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.validations SKU normalizes preserves empty string (does not convert to nil).{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3:1:2\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.validations SKU normalizes strips leading and trailing whitespace.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3:1:1\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.validations validates price is 0.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.validations validates price is greater than 0.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.validations validates the dimensions unit.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:4\"}}","Spree::Variant at ./spec/models/spree/variant_spec.rb.validations validates the weight unit.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:5\"}}","Spree::VariantPresenter at ./spec/presenters/spree/variant_presenter_spec.rb.#call generates request body without raising any errors.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","Spree::VariantPresenter at ./spec/presenters/spree/variant_presenter_spec.rb.#call returns an array of variant with option_values and images.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::Variants::OptionTypesFinder at ./spec/finders/spree/variants/option_types_finder_spec.rb.#execute returns ordered Option Types and Option Values.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::Variants::OptionTypesFinder at ./spec/finders/spree/variants/option_types_finder_spec.rb.#execute when Option Type is color returns color Option Type first.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","Spree::Variants::OptionTypesPresenter at ./spec/presenters/spree/variants/option_types_presenter_spec.rb.#default_variant default variant of product backorderable returns the same Variant as Product#default_variant.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","Spree::Variants::OptionTypesPresenter at ./spec/presenters/spree/variants/option_types_presenter_spec.rb.#default_variant default variant of product in stock returns the same Variant as Product#default_variant.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","Spree::Variants::OptionTypesPresenter at ./spec/presenters/spree/variants/option_types_presenter_spec.rb.#default_variant returns first Variant of first Option Value of first Option Type.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","Spree::Variants::OptionTypesPresenter at ./spec/presenters/spree/variants/option_types_presenter_spec.rb.#default_variant with backorderable Variant returns first backorderable Variant.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1\"}}","Spree::Variants::OptionTypesPresenter at ./spec/presenters/spree/variants/option_types_presenter_spec.rb.#default_variant with in-stock Variant returns first in-stock Variant.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","Spree::Variants::OptionTypesPresenter at ./spec/presenters/spree/variants/option_types_presenter_spec.rb.#default_variant without Option Types example at ./spec/presenters/spree/variants/option_types_presenter_spec.rb:85.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5:1\"}}","Spree::Variants::OptionTypesPresenter at ./spec/presenters/spree/variants/option_types_presenter_spec.rb.#options returns serialized options for Option Types and Option Values.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","Spree::Variants::OptionTypesPresenter at ./spec/presenters/spree/variants/option_types_presenter_spec.rb.#options without Option Types example at ./spec/presenters/spree/variants/option_types_presenter_spec.rb:166.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","Spree::Variants::OptionsPresenter at ./spec/presenters/spree/variants/options_presenter_spec.rb.#to_hash when variant has no option values returns empty hash.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","Spree::Variants::OptionsPresenter at ./spec/presenters/spree/variants/options_presenter_spec.rb.#to_hash when variant has option values returns valid hash.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","Spree::Variants::OptionsPresenter at ./spec/presenters/spree/variants/options_presenter_spec.rb.#to_sentence orders by bar than foo.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::Variants::RemoveFromIncompleteOrdersJob at ./spec/jobs/spree/variants/remove_from_incomplete_orders_job_spec.rb.enqueues the removal of variants line items.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","Spree::Variants::RemoveLineItemJob at ./spec/jobs/spree/variants/remove_line_item_job_spec.rb.removes the line item from the order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","Spree::Variants::RemoveLineItems at ./spec/services/spree/variants/remove_line_items_spec.rb.#call when all order states allows to remove line items schedules a Spree::LineItems::RemoveFromOrderJob for each order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","Spree::Variants::RemoveLineItems at ./spec/services/spree/variants/remove_line_items_spec.rb.#call when none of order states allow to remove line items does not schedule a Spree::LineItems::RemoveFromOrderJob for each order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","Spree::Variants::RemoveLineItems at ./spec/services/spree/variants/remove_line_items_spec.rb.#call when some of order states allow to remove line items does not schedule a Spree::LineItems::RemoveFromOrderJob for each cancelled order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:2\"}}","Spree::Variants::RemoveLineItems at ./spec/services/spree/variants/remove_line_items_spec.rb.#call when some of order states allow to remove line items schedules a Spree::LineItems::RemoveFromOrderJob for each pending order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","Spree::Variants::TouchJob at ./spec/jobs/spree/variants/touch_job_spec.rb.handles empty array.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2\"}}","Spree::Variants::TouchJob at ./spec/jobs/spree/variants/touch_job_spec.rb.touches all variants with the given IDs.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","Spree::Variants::VisibleFinder at ./spec/finders/spree/variants/visible_finder_spec.rb.#execute returns variants ordered by option value position for passed currency.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Spree::VatPriceCalculation at ./spec/models/spree/concerns/vat_price_calculation_spec.rb.#gross_amount with a default zone set and zone equal to the default zone does not call 'TaxRate.included_tax_amount_for'.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1:1\"}}","Spree::VatPriceCalculation at ./spec/models/spree/concerns/vat_price_calculation_spec.rb.#gross_amount with a default zone set and zone not equal to default zone calls TaxRate.included_tax_amount_for two times.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:2:1\"}}","Spree::VatPriceCalculation at ./spec/models/spree/concerns/vat_price_calculation_spec.rb.#gross_amount with no default zone set does not call TaxRate.included_tax_amount_for.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","Spree::VatPriceCalculation at ./spec/models/spree/concerns/vat_price_calculation_spec.rb.#gross_amount with no zone given does not call TaxRate.included_tax_amount_for.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","Spree::Wallet::CreatePaymentSource at ./spec/services/spree/wallet/create_payment_source_spec.rb.invalid attributes example at ./spec/services/spree/wallet/create_payment_source_spec.rb:81.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","Spree::Wallet::CreatePaymentSource at ./spec/services/spree/wallet/create_payment_source_spec.rb.invalid attributes example at ./spec/services/spree/wallet/create_payment_source_spec.rb:82.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","Spree::Wallet::CreatePaymentSource at ./spec/services/spree/wallet/create_payment_source_spec.rb.missing attributes example at ./spec/services/spree/wallet/create_payment_source_spec.rb:65.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","Spree::Wallet::CreatePaymentSource at ./spec/services/spree/wallet/create_payment_source_spec.rb.missing attributes example at ./spec/services/spree/wallet/create_payment_source_spec.rb:66.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","Spree::Wallet::CreatePaymentSource at ./spec/services/spree/wallet/create_payment_source_spec.rb.valid attributes with source attributes assigns payment method.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3\"}}","Spree::Wallet::CreatePaymentSource at ./spec/services/spree/wallet/create_payment_source_spec.rb.valid attributes with source attributes creates new payment source record.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","Spree::Wallet::CreatePaymentSource at ./spec/services/spree/wallet/create_payment_source_spec.rb.valid attributes with source attributes returns newly created record in .value.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2\"}}","Spree::Wallet::CreatePaymentSource at ./spec/services/spree/wallet/create_payment_source_spec.rb.valid attributes with source attributes with user assigns payment method.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:4:3\"}}","Spree::Wallet::CreatePaymentSource at ./spec/services/spree/wallet/create_payment_source_spec.rb.valid attributes with source attributes with user assigns user example at ./spec/services/spree/wallet/create_payment_source_spec.rb:56.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:4:4:1\"}}","Spree::Wallet::CreatePaymentSource at ./spec/services/spree/wallet/create_payment_source_spec.rb.valid attributes with source attributes with user creates new payment source record.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:4:1\"}}","Spree::Wallet::CreatePaymentSource at ./spec/services/spree/wallet/create_payment_source_spec.rb.valid attributes with source attributes with user returns newly created record in .value.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:4:2\"}}","Spree::WebhookDelivery at ./spec/models/spree/webhook_delivery_spec.rb.#complete! with connection error records the connection error.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:4:1\"}}","Spree::WebhookDelivery at ./spec/models/spree/webhook_delivery_spec.rb.#complete! with failed HTTP response marks the delivery as failed for 4xx responses.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1\"}}","Spree::WebhookDelivery at ./spec/models/spree/webhook_delivery_spec.rb.#complete! with failed HTTP response marks the delivery as failed for 5xx responses.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:2\"}}","Spree::WebhookDelivery at ./spec/models/spree/webhook_delivery_spec.rb.#complete! with successful HTTP response marks 201 as successful.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:2\"}}","Spree::WebhookDelivery at ./spec/models/spree/webhook_delivery_spec.rb.#complete! with successful HTTP response marks 204 as successful.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:3\"}}","Spree::WebhookDelivery at ./spec/models/spree/webhook_delivery_spec.rb.#complete! with successful HTTP response marks the delivery as successful.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:1\"}}","Spree::WebhookDelivery at ./spec/models/spree/webhook_delivery_spec.rb.#complete! with timeout error records the timeout error.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3:1\"}}","Spree::WebhookDelivery at ./spec/models/spree/webhook_delivery_spec.rb.#failed? returns false when success is nil.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3\"}}","Spree::WebhookDelivery at ./spec/models/spree/webhook_delivery_spec.rb.#failed? returns false when success is true.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","Spree::WebhookDelivery at ./spec/models/spree/webhook_delivery_spec.rb.#failed? returns true when success is false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","Spree::WebhookDelivery at ./spec/models/spree/webhook_delivery_spec.rb.#pending? returns false when delivered_at is present.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2\"}}","Spree::WebhookDelivery at ./spec/models/spree/webhook_delivery_spec.rb.#pending? returns true when delivered_at is nil.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","Spree::WebhookDelivery at ./spec/models/spree/webhook_delivery_spec.rb.#successful? returns false when success is false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","Spree::WebhookDelivery at ./spec/models/spree/webhook_delivery_spec.rb.#successful? returns false when success is nil.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3\"}}","Spree::WebhookDelivery at ./spec/models/spree/webhook_delivery_spec.rb.#successful? returns true when success is true.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","Spree::WebhookDelivery at ./spec/models/spree/webhook_delivery_spec.rb.scopes .failed returns only failed deliveries.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","Spree::WebhookDelivery at ./spec/models/spree/webhook_delivery_spec.rb.scopes .for_event returns deliveries for the specified event.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5:1\"}}","Spree::WebhookDelivery at ./spec/models/spree/webhook_delivery_spec.rb.scopes .pending returns only pending deliveries.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","Spree::WebhookDelivery at ./spec/models/spree/webhook_delivery_spec.rb.scopes .recent orders by created_at desc.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1\"}}","Spree::WebhookDelivery at ./spec/models/spree/webhook_delivery_spec.rb.scopes .successful returns only successful deliveries.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","Spree::WebhookEndpoint at ./spec/models/spree/webhook_endpoint_spec.rb.#subscribed_events with empty subscriptions returns wildcard.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:1\"}}","Spree::WebhookEndpoint at ./spec/models/spree/webhook_endpoint_spec.rb.#subscribed_events with specific subscriptions returns the subscriptions.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1\"}}","Spree::WebhookEndpoint at ./spec/models/spree/webhook_endpoint_spec.rb.#subscribed_to? with empty subscriptions returns true for any event.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1\"}}","Spree::WebhookEndpoint at ./spec/models/spree/webhook_endpoint_spec.rb.#subscribed_to? with mixed subscriptions does not match non-subscribed events.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:5:3\"}}","Spree::WebhookEndpoint at ./spec/models/spree/webhook_endpoint_spec.rb.#subscribed_to? with mixed subscriptions matches exact events.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:5:2\"}}","Spree::WebhookEndpoint at ./spec/models/spree/webhook_endpoint_spec.rb.#subscribed_to? with mixed subscriptions matches pattern events.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:5:1\"}}","Spree::WebhookEndpoint at ./spec/models/spree/webhook_endpoint_spec.rb.#subscribed_to? with pattern subscriptions does not match events outside the pattern.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:4:2\"}}","Spree::WebhookEndpoint at ./spec/models/spree/webhook_endpoint_spec.rb.#subscribed_to? with pattern subscriptions matches events that fit the pattern.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:4:1\"}}","Spree::WebhookEndpoint at ./spec/models/spree/webhook_endpoint_spec.rb.#subscribed_to? with specific subscriptions returns false for non-subscribed events.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3:2\"}}","Spree::WebhookEndpoint at ./spec/models/spree/webhook_endpoint_spec.rb.#subscribed_to? with specific subscriptions returns true for subscribed events.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3:1\"}}","Spree::WebhookEndpoint at ./spec/models/spree/webhook_endpoint_spec.rb.#subscribed_to? with wildcard subscription returns true for any event.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1\"}}","Spree::WebhookEndpoint at ./spec/models/spree/webhook_endpoint_spec.rb.callbacks before_create :generate_secret_key does not overwrite existing secret key.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:2\"}}","Spree::WebhookEndpoint at ./spec/models/spree/webhook_endpoint_spec.rb.callbacks before_create :generate_secret_key generates a secret key on create.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","Spree::WebhookEndpoint at ./spec/models/spree/webhook_endpoint_spec.rb.scopes .active returns only active endpoints.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","Spree::WebhookEndpoint at ./spec/models/spree/webhook_endpoint_spec.rb.scopes .inactive returns only inactive endpoints.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","Spree::WebhookEndpoint at ./spec/models/spree/webhook_endpoint_spec.rb.soft delete soft deletes the record.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","Spree::WebhookEndpoint at ./spec/models/spree/webhook_endpoint_spec.rb.validations active inclusion accepts false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2\"}}","Spree::WebhookEndpoint at ./spec/models/spree/webhook_endpoint_spec.rb.validations active inclusion accepts true.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","Spree::WebhookEndpoint at ./spec/models/spree/webhook_endpoint_spec.rb.validations active inclusion rejects nil.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:3\"}}","Spree::WebhookEndpoint at ./spec/models/spree/webhook_endpoint_spec.rb.validations url format accepts valid http urls.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2\"}}","Spree::WebhookEndpoint at ./spec/models/spree/webhook_endpoint_spec.rb.validations url format accepts valid https urls.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","Spree::WebhookEndpoint at ./spec/models/spree/webhook_endpoint_spec.rb.validations url format rejects ftp urls.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:4\"}}","Spree::WebhookEndpoint at ./spec/models/spree/webhook_endpoint_spec.rb.validations url format rejects invalid urls.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3\"}}","Spree::WishedItem at ./spec/models/spree/wished_item_spec.rb..quantity .display_price example at ./spec/models/spree/wished_item_spec.rb:52.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:10:1\"}}","Spree::WishedItem at ./spec/models/spree/wished_item_spec.rb..quantity .display_total example at ./spec/models/spree/wished_item_spec.rb:56.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:11:1\"}}","Spree::WishedItem at ./spec/models/spree/wished_item_spec.rb..quantity .price example at ./spec/models/spree/wished_item_spec.rb:44.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:8:1\"}}","Spree::WishedItem at ./spec/models/spree/wished_item_spec.rb..quantity .total example at ./spec/models/spree/wished_item_spec.rb:48.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:9:1\"}}","Spree::WishedItem at ./spec/models/spree/wished_item_spec.rb..quantity example at ./spec/models/spree/wished_item_spec.rb:13.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","Spree::WishedItem at ./spec/models/spree/wished_item_spec.rb..quantity example at ./spec/models/spree/wished_item_spec.rb:14.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","Spree::WishedItem at ./spec/models/spree/wished_item_spec.rb..quantity validates numericality must be greater than 0.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:6\"}}","Spree::WishedItem at ./spec/models/spree/wished_item_spec.rb..quantity validates numericality of quantity.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:5\"}}","Spree::WishedItem at ./spec/models/spree/wished_item_spec.rb..quantity validates presence of variant.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:4\"}}","Spree::WishedItem at ./spec/models/spree/wished_item_spec.rb..quantity validates presence of wishlist.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3\"}}","Spree::WishedItem at ./spec/models/spree/wished_item_spec.rb..quantity when wished_item is already associated with the wishlist validates uniqueness of variant within scope of wishlist.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:7:1\"}}","Spree::WishedItem at ./spec/models/spree/wished_item_spec.rb.behaves like lifecycle events lifecycle events wished_item.created publishes created event when record is created.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","Spree::WishedItem at ./spec/models/spree/wished_item_spec.rb.behaves like lifecycle events lifecycle events wished_item.deleted publishes deleted event when record is deleted.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:1\"}}","Spree::WishedItem at ./spec/models/spree/wished_item_spec.rb.behaves like lifecycle events lifecycle events wished_item.updated publishes updated event when record is updated.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","Spree::Wishlist at ./spec/models/spree/wishlist_spec.rb.#destroy deletes associated wished variants.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1\"}}","Spree::Wishlist at ./spec/models/spree/wishlist_spec.rb.#product_ids returns the product ids.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1\"}}","Spree::Wishlist at ./spec/models/spree/wishlist_spec.rb.#variant_ids returns the variant ids.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:1\"}}","Spree::Wishlist at ./spec/models/spree/wishlist_spec.rb.#wished_items_count returns the wished items count.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:1\"}}","Spree::Wishlist at ./spec/models/spree/wishlist_spec.rb..ensure_default_exists_and_is_unique when user creates a new default store does not alter the state of wishlist belonging to other users.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1:3\"}}","Spree::Wishlist at ./spec/models/spree/wishlist_spec.rb..ensure_default_exists_and_is_unique when user creates a new default store does not alter the state of wishlist belonging to same users, but in other stores.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1:4\"}}","Spree::Wishlist at ./spec/models/spree/wishlist_spec.rb..ensure_default_exists_and_is_unique when user creates a new default store preserves is_default: true for new wishlist.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1:1\"}}","Spree::Wishlist at ./spec/models/spree/wishlist_spec.rb..ensure_default_exists_and_is_unique when user creates a new default store sets is_default: false on the wishlist that was the previous default.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1:2\"}}","Spree::Wishlist at ./spec/models/spree/wishlist_spec.rb..get_by_param returns nil when not found.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:2\"}}","Spree::Wishlist at ./spec/models/spree/wishlist_spec.rb..get_by_param returns the wishlist of the token.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1\"}}","Spree::Wishlist at ./spec/models/spree/wishlist_spec.rb..include? is true if the wishlist includes the specified variant.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","Spree::Wishlist at ./spec/models/spree/wishlist_spec.rb..to_param returns the wishlists token.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1\"}}","Spree::Wishlist at ./spec/models/spree/wishlist_spec.rb.has a valid factory.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2\"}}","Spree::Wishlist at ./spec/models/spree/wishlist_spec.rb.lifecycle events wishlist.created publishes created event when record is created.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","Spree::Wishlist at ./spec/models/spree/wishlist_spec.rb.lifecycle events wishlist.deleted publishes deleted event when record is destroyed.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","Spree::Wishlist at ./spec/models/spree/wishlist_spec.rb.lifecycle events wishlist.updated publishes updated event when record is updated.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","Spree::Wishlist at ./spec/models/spree/wishlist_spec.rb.validates presence of name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3\"}}","Spree::Wishlist at ./spec/models/spree/wishlist_spec.rb.validates presence of store.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4\"}}","Spree::Wishlist at ./spec/models/spree/wishlist_spec.rb.validates presence of user.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5\"}}","Spree::Zone at ./spec/models/spree/zone_spec.rb.#contains? when both zones are the same zone is true.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3:1\"}}","Spree::Zone at ./spec/models/spree/zone_spec.rb.#contains? when checking countries against countries when all members are included in the zone we check against is true.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:4:1:1\"}}","Spree::Zone at ./spec/models/spree/zone_spec.rb.#contains? when checking countries against countries when none of the members are included in the zone we check against is false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:4:3:1\"}}","Spree::Zone at ./spec/models/spree/zone_spec.rb.#contains? when checking countries against countries when some members are included in the zone we check against is false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:4:2:1\"}}","Spree::Zone at ./spec/models/spree/zone_spec.rb.#contains? when checking country against state is false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:6:1\"}}","Spree::Zone at ./spec/models/spree/zone_spec.rb.#contains? when checking state against country when all states contained in one of the countries we check against is true.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:7:1:1\"}}","Spree::Zone at ./spec/models/spree/zone_spec.rb.#contains? when checking state against country when none of the states contained in any of the countries we check against is false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:7:3:1\"}}","Spree::Zone at ./spec/models/spree/zone_spec.rb.#contains? when checking state against country when some states contained in one of the countries we check against is false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:7:2:1\"}}","Spree::Zone at ./spec/models/spree/zone_spec.rb.#contains? when checking states against states when all members are included in the zone we check against is true.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:5:1:1\"}}","Spree::Zone at ./spec/models/spree/zone_spec.rb.#contains? when checking states against states when none of the members are included in the zone we check against is false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:5:3:1\"}}","Spree::Zone at ./spec/models/spree/zone_spec.rb.#contains? when checking states against states when some members are included in the zone we check against is false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:5:2:1\"}}","Spree::Zone at ./spec/models/spree/zone_spec.rb.#contains? when the source has no members is false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1\"}}","Spree::Zone at ./spec/models/spree/zone_spec.rb.#contains? when the target has no members is false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:1\"}}","Spree::Zone at ./spec/models/spree/zone_spec.rb.#country_list when zone consists of countries returns a list of countries.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","Spree::Zone at ./spec/models/spree/zone_spec.rb.#country_list when zone consists of states returns a list of countries.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","Spree::Zone at ./spec/models/spree/zone_spec.rb.#include? when zone is country type is true.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","Spree::Zone at ./spec/models/spree/zone_spec.rb.#include? when zone is state type is true.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","Spree::Zone at ./spec/models/spree/zone_spec.rb.#kind returns whatever value you set.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","Spree::Zone at ./spec/models/spree/zone_spec.rb.#kind when the zone consists of country zone members returns the kind of zone member.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2:1\"}}","Spree::Zone at ./spec/models/spree/zone_spec.rb.#match callbacks #nullify_checkout_zone is expected to nullify checkout zone.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:1\"}}","Spree::Zone at ./spec/models/spree/zone_spec.rb.#match callbacks #remove_previous_default is expected to make previous default tax zones to non default tax zones.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1:1\"}}","Spree::Zone at ./spec/models/spree/zone_spec.rb.#match scopes .remove_previous_default is expected to include zone with default tax.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","Spree::Zone at ./spec/models/spree/zone_spec.rb.#match scopes .remove_previous_default is expected to not include zone with default tax.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:2\"}}","Spree::Zone at ./spec/models/spree/zone_spec.rb.#match when there are no qualifying zones returns nil.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6:1\"}}","Spree::Zone at ./spec/models/spree/zone_spec.rb.#match when there are two qualified zones with different member types returns the zone with the more specific member type.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5:1\"}}","Spree::Zone at ./spec/models/spree/zone_spec.rb.#match when there are two qualified zones with same member type when both zones have the same number of members returns the zone that was created first.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1:1\"}}","Spree::Zone at ./spec/models/spree/zone_spec.rb.#match when there are two qualified zones with same member type when one of the zones has fewer members returns the zone with fewer members.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:2:1\"}}","Spree::Zone at ./spec/models/spree/zone_spec.rb.#match when there is only one qualifying zone returns the qualifying zone.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","Spree::Zone at ./spec/models/spree/zone_spec.rb.#potential_matching_zones finding potential matches for a country zone only returns each zone once.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1:2\"}}","Spree::Zone at ./spec/models/spree/zone_spec.rb.#potential_matching_zones finding potential matches for a country zone will find all zones with countries covered by the passed in zone.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1:1\"}}","Spree::Zone at ./spec/models/spree/zone_spec.rb.#potential_matching_zones finding potential matches for a state zone only returns each zone once.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2:3\"}}","Spree::Zone at ./spec/models/spree/zone_spec.rb.#potential_matching_zones finding potential matches for a state zone will find all zones which share states covered by passed in zone.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2:1\"}}","Spree::Zone at ./spec/models/spree/zone_spec.rb.#potential_matching_zones finding potential matches for a state zone will find zones that share countries with any states of the passed in zone.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2:2\"}}","Spree::Zone at ./spec/models/spree/zone_spec.rb.#save when a zone member country is added to an existing zone consisting of state members removes existing country members.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2:1\"}}","Spree::Zone at ./spec/models/spree/zone_spec.rb.#save when default_tax is true clears previous default tax zone.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1:1\"}}","Spree::Zone at ./spec/models/spree/zone_spec.rb.#state_list has countries associated returns states associated to that countries.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1:1\"}}","Spree::Zone at ./spec/models/spree/zone_spec.rb.#state_list has states associated returns that states.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:2:1\"}}","Spree::Zone at ./spec/models/spree/zone_spec.rb.#state_list_for has countries associated returns states associated with the country.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1:1\"}}","Spree::Zone at ./spec/models/spree/zone_spec.rb.#state_list_for has states associated returns states associated with the country.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2:1\"}}","Spree::Zone at ./spec/models/spree/zone_spec.rb..default_tax when there is a default tax zone specified is the correct zone.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1\"}}","Spree::Zone at ./spec/models/spree/zone_spec.rb..default_tax when there is no default tax zone specified is nil.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1\"}}","Spree::Zone at ./spec/models/spree/zone_spec.rb.state and country associations has countries associated can access associated countries.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1:1\"}}","Spree::Zone at ./spec/models/spree/zone_spec.rb.state and country associations has states associated can access associated states.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:2:1\"}}","Spree::ZoneMember at ./spec/models/spree/zone_member_spec.rb.scopes .defunct_without_kind zoneable is absent example at ./spec/models/spree/zone_member_spec.rb:26.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:1\"}}","Spree::ZoneMember at ./spec/models/spree/zone_member_spec.rb.scopes .defunct_without_kind zoneable is not of defunct kind example at ./spec/models/spree/zone_member_spec.rb:20.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","Spree::ZoneMember at ./spec/models/spree/zone_member_spec.rb.scopes .defunct_without_kind zoneable is present and is of defunct kind example at ./spec/models/spree/zone_member_spec.rb:14.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","StoreCreditCategory at ./spec/models/spree/store_credit_category_spec.rb.callbacks store credit category is not used in store credit can delete store credit category.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","StoreCreditCategory at ./spec/models/spree/store_credit_category_spec.rb.callbacks store credit category is used in store credit can not delete store credit category.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","StoreCreditEvent at ./spec/models/spree/store_credit_event_spec.rb.#allocation? action is allocation example at ./spec/models/spree/store_credit_event_spec.rb:122.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1:1\"}}","StoreCreditEvent at ./spec/models/spree/store_credit_event_spec.rb.#allocation? action is not allocation example at ./spec/models/spree/store_credit_event_spec.rb:127.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2:1\"}}","StoreCreditEvent at ./spec/models/spree/store_credit_event_spec.rb.#authorized? action is authorize example at ./spec/models/spree/store_credit_event_spec.rb:186.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1:1\"}}","StoreCreditEvent at ./spec/models/spree/store_credit_event_spec.rb.#authorized? action is not authorize example at ./spec/models/spree/store_credit_event_spec.rb:191.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:2:1\"}}","StoreCreditEvent at ./spec/models/spree/store_credit_event_spec.rb.#captured? action is capture example at ./spec/models/spree/store_credit_event_spec.rb:154.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1:1\"}}","StoreCreditEvent at ./spec/models/spree/store_credit_event_spec.rb.#captured? action is not capture example at ./spec/models/spree/store_credit_event_spec.rb:159.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2:1\"}}","StoreCreditEvent at ./spec/models/spree/store_credit_event_spec.rb.#credit? action is credit example at ./spec/models/spree/store_credit_event_spec.rb:138.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1:1\"}}","StoreCreditEvent at ./spec/models/spree/store_credit_event_spec.rb.#credit? action is not credit example at ./spec/models/spree/store_credit_event_spec.rb:143.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2:1\"}}","StoreCreditEvent at ./spec/models/spree/store_credit_event_spec.rb.#display_action allocation event returns added.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3:1\"}}","StoreCreditEvent at ./spec/models/spree/store_credit_event_spec.rb.#display_action authorize event returns authorized.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","StoreCreditEvent at ./spec/models/spree/store_credit_event_spec.rb.#display_action capture event returns used.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","StoreCreditEvent at ./spec/models/spree/store_credit_event_spec.rb.#display_action credit event returns credit.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:5:1\"}}","StoreCreditEvent at ./spec/models/spree/store_credit_event_spec.rb.#display_action void event returns credit.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4:1\"}}","StoreCreditEvent at ./spec/models/spree/store_credit_event_spec.rb.#display_amount returns a Spree::Money instance.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","StoreCreditEvent at ./spec/models/spree/store_credit_event_spec.rb.#display_amount uses the events amount attribute.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","StoreCreditEvent at ./spec/models/spree/store_credit_event_spec.rb.#display_user_total_amount returns a Spree::Money instance.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","StoreCreditEvent at ./spec/models/spree/store_credit_event_spec.rb.#display_user_total_amount uses the events user_total_amount attribute.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","StoreCreditEvent at ./spec/models/spree/store_credit_event_spec.rb.#order there is an associated payment with the event returns the order associated with the payment.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1\"}}","StoreCreditEvent at ./spec/models/spree/store_credit_event_spec.rb.#order there is no associated payment with the event returns nil.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1\"}}","StoreCreditEvent at ./spec/models/spree/store_credit_event_spec.rb.#store example at ./spec/models/spree/store_credit_event_spec.rb:112.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","StoreCreditEvent at ./spec/models/spree/store_credit_event_spec.rb.#voided? action is not void example at ./spec/models/spree/store_credit_event_spec.rb:175.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:2:1\"}}","StoreCreditEvent at ./spec/models/spree/store_credit_event_spec.rb.#voided? action is void example at ./spec/models/spree/store_credit_event_spec.rb:170.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1:1\"}}","Variant scopes at ./spec/models/spree/variant/scopes_spec.rb.#product_name_or_sku_cont does not return variants of products that do not match name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","Variant scopes at ./spec/models/spree/variant/scopes_spec.rb.#product_name_or_sku_cont does not return variants with not matching skus.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","Variant scopes at ./spec/models/spree/variant/scopes_spec.rb.#product_name_or_sku_cont return multiple variants based on variants sku.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","Variant scopes at ./spec/models/spree/variant/scopes_spec.rb.#product_name_or_sku_cont returns multiple variants based on products name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","Variant scopes at ./spec/models/spree/variant/scopes_spec.rb.#product_name_or_sku_cont returns no variants when products name does not match any.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7\"}}","Variant scopes at ./spec/models/spree/variant/scopes_spec.rb.#product_name_or_sku_cont returns no variants when variants sku does not match any.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8\"}}","Variant scopes at ./spec/models/spree/variant/scopes_spec.rb.#product_name_or_sku_cont returns variants based on products name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","Variant scopes at ./spec/models/spree/variant/scopes_spec.rb.#product_name_or_sku_cont returns variants based on variant sku.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","Variant scopes at ./spec/models/spree/variant/scopes_spec.rb.#product_name_or_sku_cont when using translations does not return variants of products that do not match name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:9:2\"}}","Variant scopes at ./spec/models/spree/variant/scopes_spec.rb.#product_name_or_sku_cont when using translations returns variants based on products translated name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:9:1\"}}","Variant scopes at ./spec/models/spree/variant/scopes_spec.rb.#search_by_product_name_or_sku does not return variants of products that do not match name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3\"}}","Variant scopes at ./spec/models/spree/variant/scopes_spec.rb.#search_by_product_name_or_sku does not return variants with not matching skus.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:4\"}}","Variant scopes at ./spec/models/spree/variant/scopes_spec.rb.#search_by_product_name_or_sku return multiple variants based on variants sku.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:6\"}}","Variant scopes at ./spec/models/spree/variant/scopes_spec.rb.#search_by_product_name_or_sku returns multiple variants based on products name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:5\"}}","Variant scopes at ./spec/models/spree/variant/scopes_spec.rb.#search_by_product_name_or_sku returns no variants when products name does not match any.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:7\"}}","Variant scopes at ./spec/models/spree/variant/scopes_spec.rb.#search_by_product_name_or_sku returns no variants when variants sku does not match any.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:8\"}}","Variant scopes at ./spec/models/spree/variant/scopes_spec.rb.#search_by_product_name_or_sku returns variants based on products name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","Variant scopes at ./spec/models/spree/variant/scopes_spec.rb.#search_by_product_name_or_sku returns variants based on variant sku.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","core:activate_products at ./spec/lib/tasks/core_spec.rb.#prerequisites example at ./spec/lib/tasks/core_spec.rb:9.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","core:activate_products at ./spec/lib/tasks/core_spec.rb.archived, make_active_at in the future -> archived.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5\"}}","core:activate_products at ./spec/lib/tasks/core_spec.rb.archived, make_active_at in the past -> archived.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4\"}}","core:activate_products at ./spec/lib/tasks/core_spec.rb.draft, make_active_at in the future -> draft.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3\"}}","core:activate_products at ./spec/lib/tasks/core_spec.rb.draft, make_active_at in the past -> active.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2\"}}","core:archive_products at ./spec/lib/tasks/core_spec.rb.#prerequisites example at ./spec/lib/tasks/core_spec.rb:70.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"3:1:1\"}}","core:archive_products at ./spec/lib/tasks/core_spec.rb.active, discontinue_on in the future -> active.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"3:5\"}}","core:archive_products at ./spec/lib/tasks/core_spec.rb.active, discontinue_on in the past -> archived.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"3:4\"}}","core:archive_products at ./spec/lib/tasks/core_spec.rb.draft, discontinue_on in the future -> draft.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"3:3\"}}","core:archive_products at ./spec/lib/tasks/core_spec.rb.draft, discontinue_on in the past -> archived.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"3:2\"}}","core:migrate_newsletter_subscribers at ./spec/lib/tasks/core_spec.rb.migrates newsletter subscribers.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:1\"}}","exchanges:charge_unreturned_items at ./spec/lib/tasks/exchanges_spec.rb.#prerequisites example at ./spec/lib/tasks/exchanges_spec.rb:7.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","exchanges:charge_unreturned_items at ./spec/lib/tasks/exchanges_spec.rb.there are no unreturned items example at ./spec/lib/tasks/exchanges_spec.rb:11.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","exchanges:charge_unreturned_items at ./spec/lib/tasks/exchanges_spec.rb.there are unreturned items fewer than the config allowed days have passed does not create a new order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","exchanges:charge_unreturned_items at ./spec/lib/tasks/exchanges_spec.rb.there are unreturned items more than the config allowed days have passed associates the exchanges inventory units with the new line items.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:4\"}}","exchanges:charge_unreturned_items at ./spec/lib/tasks/exchanges_spec.rb.there are unreturned items more than the config allowed days have passed associates the store of the original order with the exchange order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:8\"}}","exchanges:charge_unreturned_items at ./spec/lib/tasks/exchanges_spec.rb.there are unreturned items more than the config allowed days have passed authorizes the order for the full amount of the unreturned items including taxes.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:6\"}}","exchanges:charge_unreturned_items at ./spec/lib/tasks/exchanges_spec.rb.there are unreturned items more than the config allowed days have passed creates a new completed order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","exchanges:charge_unreturned_items at ./spec/lib/tasks/exchanges_spec.rb.there are unreturned items more than the config allowed days have passed creates line items on the order for the unreturned items.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:3\"}}","exchanges:charge_unreturned_items at ./spec/lib/tasks/exchanges_spec.rb.there are unreturned items more than the config allowed days have passed does not attempt to create a new order for the item more than once.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:7\"}}","exchanges:charge_unreturned_items at ./spec/lib/tasks/exchanges_spec.rb.there are unreturned items more than the config allowed days have passed it is unable to authorize the credit card raises an error with the order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:10:1\"}}","exchanges:charge_unreturned_items at ./spec/lib/tasks/exchanges_spec.rb.there are unreturned items more than the config allowed days have passed moves the shipment for the unreturned items to the new order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:2\"}}","exchanges:charge_unreturned_items at ./spec/lib/tasks/exchanges_spec.rb.there are unreturned items more than the config allowed days have passed the exchange inventory unit has been returned does not create a new order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:12:1\"}}","exchanges:charge_unreturned_items at ./spec/lib/tasks/exchanges_spec.rb.there are unreturned items more than the config allowed days have passed the exchange inventory unit is not shipped does not create a new order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:11:1\"}}","exchanges:charge_unreturned_items at ./spec/lib/tasks/exchanges_spec.rb.there are unreturned items more than the config allowed days have passed there is no card from the previous order attempts to use the user's default card.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:9:1\"}}","exchanges:charge_unreturned_items at ./spec/lib/tasks/exchanges_spec.rb.there are unreturned items more than the config allowed days have passed uses the credit card from the previous order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:5\"}}","i18n at ./spec/lib/i18n_spec.rb.#available_locales when SpreeI18n is defined returns all locales from the SpreeI18n.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","i18n at ./spec/lib/i18n_spec.rb.#available_locales when SpreeI18n is defined returns an array with the string \"en\" removed.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2\"}}","i18n at ./spec/lib/i18n_spec.rb.#available_locales when SpreeI18n is not defined returns just default locale.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","i18n at ./spec/lib/i18n_spec.rb.missed + unused translations missed translations does not break when asked for multiple translations.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1:3\"}}","i18n at ./spec/lib/i18n_spec.rb.missed + unused translations missed translations does not log present translations.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1:2\"}}","i18n at ./spec/lib/i18n_spec.rb.missed + unused translations missed translations logs missing translations.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1:1\"}}","i18n at ./spec/lib/i18n_spec.rb.missed + unused translations unused translations does not log used translations.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2:2\"}}","i18n at ./spec/lib/i18n_spec.rb.missed + unused translations unused translations logs translations that aren't used.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2:1\"}}","i18n at ./spec/lib/i18n_spec.rb.prepends a string scope.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4\"}}","i18n at ./spec/lib/i18n_spec.rb.prepends to an array scope.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5\"}}","i18n at ./spec/lib/i18n_spec.rb.raise error without any context when using a path.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3\"}}","i18n at ./spec/lib/i18n_spec.rb.returns reasonable string for missing translations.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7\"}}","i18n at ./spec/lib/i18n_spec.rb.returns two translations.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6\"}}","i18n at ./spec/lib/i18n_spec.rb.translates within the spree scope.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2\"}}","product filters at ./spec/models/spree/product_filter_spec.rb.finds products filtered by brand can find products in the 'Nike' brand.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","product filters at ./spec/models/spree/product_filter_spec.rb.finds products filtered by brand does not attempt to call value method on Arel::Table.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}"],"testSuiteDurations":{"rspec":{" at ./core/spec/models/spree/user_spec.rb":{"source_file":"core/spec/models/spree/user_spec.rb","duration":{"p50":"0","p90":"0"}},"EmailValidator at ./spec/validators/email_validator_spec.rb":{"source_file":"core/spec/validators/email_validator_spec.rb","duration":{"p50":"291514324","p90":"335322854"}},"I18n at ./core/spec/i18n_spec.rb":{"source_file":"core/spec/i18n_spec.rb","duration":{"p50":"0","p90":"0"}},"I18n at ./spec/i18n_spec.rb":{"source_file":"core/spec/i18n_spec.rb","duration":{"p50":"2738495104","p90":"2966584242"}},"Order at ./core/spec/models/spree/order/gift_card_spec.rb":{"source_file":"core/spec/models/spree/order/gift_card_spec.rb","duration":{"p50":"0","p90":"0"}},"Order at ./core/spec/models/spree/order/store_credit_spec.rb":{"source_file":"core/spec/models/spree/order/store_credit_spec.rb","duration":{"p50":"0","p90":"0"}},"Order at ./spec/models/spree/order/gift_card_spec.rb":{"source_file":"core/spec/models/spree/order/gift_card_spec.rb","duration":{"p50":"824785881","p90":"1069698895"}},"Order at ./spec/models/spree/order/store_credit_spec.rb":{"source_file":"core/spec/models/spree/order/store_credit_spec.rb","duration":{"p50":"3344827773","p90":"3771297869"}},"Payment at ./core/spec/models/spree/payment/store_credit_spec.rb":{"source_file":"core/spec/models/spree/payment/store_credit_spec.rb","duration":{"p50":"0","p90":"0"}},"Payment at ./spec/models/spree/payment/store_credit_spec.rb":{"source_file":"core/spec/models/spree/payment/store_credit_spec.rb","duration":{"p50":"635946949","p90":"731516527"}},"Permission Sets Integration with Ability at ./spec/models/spree/permission_sets/ability_integration_spec.rb":{"source_file":"core/spec/models/spree/permission_sets/ability_integration_spec.rb","duration":{"p50":"370590302","p90":"401456752"}},"Product scopes at ./core/spec/models/spree/product/scopes_spec.rb":{"source_file":"core/spec/models/spree/product/scopes_spec.rb","duration":{"p50":"0","p90":"0"}},"Product scopes at ./spec/models/spree/product/scopes_spec.rb":{"source_file":"core/spec/models/spree/product/scopes_spec.rb","duration":{"p50":"16239846362","p90":"16902629603"}},"Spree at ./core/spec/lib/spree/core_spec.rb":{"source_file":"core/spec/lib/spree/core_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree at ./spec/lib/spree/core_spec.rb":{"source_file":"core/spec/lib/spree/core_spec.rb","duration":{"p50":"322174228","p90":"349008105"}},"Spree environment accessors at ./spec/lib/spree/core_environment_spec.rb":{"source_file":"core/spec/lib/spree/core_environment_spec.rb","duration":{"p50":"342097053","p90":"417841070"}},"Spree module dependency accessors at ./spec/models/spree/app_dependencies_spec.rb":{"source_file":"core/spec/models/spree/app_dependencies_spec.rb","duration":{"p50":"315794540","p90":"461787339"}},"Spree::Ability at ./spec/models/spree/ability_spec.rb":{"source_file":"core/spec/models/spree/ability_spec.rb","duration":{"p50":"911532407","p90":"1027754031"}},"Spree::Account::Addresses::Create at ./spec/services/spree/account/addresses/create_spec.rb":{"source_file":"core/spec/services/spree/account/addresses/create_spec.rb","duration":{"p50":"611010298","p90":"661901319"}},"Spree::Account::Addresses::Update at ./spec/services/spree/account/addresses/update_spec.rb":{"source_file":"core/spec/services/spree/account/addresses/update_spec.rb","duration":{"p50":"335322854","p90":"356058774"}},"Spree::Account::Create at ./spec/services/spree/account/create_spec.rb":{"source_file":"core/spec/services/spree/account/create_spec.rb","duration":{"p50":"315794540","p90":"328682798"}},"Spree::Account::Update at ./core/spec/services/spree/account/update_spec.rb":{"source_file":"core/spec/services/spree/account/update_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Account::Update at ./spec/services/spree/account/update_spec.rb":{"source_file":"core/spec/services/spree/account/update_spec.rb","duration":{"p50":"1048516738","p90":"1158794069"}},"Spree::Address at ./core/spec/models/spree/address_spec.rb":{"source_file":"core/spec/models/spree/address_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Address at ./spec/models/spree/address_spec.rb":{"source_file":"core/spec/models/spree/address_spec.rb","duration":{"p50":"5405577038","p90":"6217922653"}},"Spree::Addresses::Find at ./core/spec/finders/spree/addresses/find_spec.rb":{"source_file":"core/spec/finders/spree/addresses/find_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Addresses::Find at ./spec/finders/spree/addresses/find_spec.rb":{"source_file":"core/spec/finders/spree/addresses/find_spec.rb","duration":{"p50":"401456752","p90":"531184355"}},"Spree::Addresses::GeocodeAddressJob at ./core/spec/jobs/spree/addresses/geocode_address_job_spec.rb":{"source_file":"core/spec/jobs/spree/addresses/geocode_address_job_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Addresses::GeocodeAddressJob at ./spec/jobs/spree/addresses/geocode_address_job_spec.rb":{"source_file":"core/spec/jobs/spree/addresses/geocode_address_job_spec.rb","duration":{"p50":"363251880","p90":"452643035"}},"Spree::Addresses::PhoneValidator at ./core/spec/services/spree/addresses/phone_validator_spec.rb":{"source_file":"core/spec/services/spree/addresses/phone_validator_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Addresses::PhoneValidator at ./spec/services/spree/addresses/phone_validator_spec.rb":{"source_file":"core/spec/services/spree/addresses/phone_validator_spec.rb","duration":{"p50":"417841070","p90":"461787339"}},"Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb":{"source_file":"core/spec/services/spree/addresses/update_spec.rb","duration":{"p50":"5626190324","p90":"6217922653"}},"Spree::Adjustable::Adjuster::Base at ./spec/models/spree/adjustable/adjuster/base_spec.rb":{"source_file":"core/spec/models/spree/adjustable/adjuster/base_spec.rb","duration":{"p50":"378076975","p90":"531184355"}},"Spree::Adjustable::Adjuster::Promotion at ./core/spec/models/spree/adjustable/adjuster/promotion_spec.rb":{"source_file":"core/spec/models/spree/adjustable/adjuster/promotion_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Adjustable::Adjuster::Promotion at ./spec/models/spree/adjustable/adjuster/promotion_spec.rb":{"source_file":"core/spec/models/spree/adjustable/adjuster/promotion_spec.rb","duration":{"p50":"3551667475","p90":"3847485705"}},"Spree::Adjustable::Adjuster::Tax at ./core/spec/models/spree/adjustable/adjuster/tax_spec.rb":{"source_file":"core/spec/models/spree/adjustable/adjuster/tax_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Adjustable::Adjuster::Tax at ./spec/models/spree/adjustable/adjuster/tax_spec.rb":{"source_file":"core/spec/models/spree/adjustable/adjuster/tax_spec.rb","duration":{"p50":"1113355619","p90":"1306541891"}},"Spree::Adjustable::AdjustmentsUpdater at ./spec/models/spree/adjustable/adjustments_updater_spec.rb":{"source_file":"core/spec/models/spree/adjustable/adjustments_updater_spec.rb","duration":{"p50":"893482261","p90":"1135847652"}},"Spree::Adjustment at ./core/spec/models/spree/adjustment_spec.rb":{"source_file":"core/spec/models/spree/adjustment_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Adjustment at ./spec/models/spree/adjustment_spec.rb":{"source_file":"core/spec/models/spree/adjustment_spec.rb","duration":{"p50":"1628063388","p90":"1835643687"}},"Spree::Asset at ./spec/models/spree/asset_spec.rb":{"source_file":"core/spec/models/spree/asset_spec.rb","duration":{"p50":"661901319","p90":"792444507"}},"Spree::Base at ./spec/models/spree/base_spec.rb":{"source_file":"core/spec/models/spree/base_spec.rb","duration":{"p50":"315794540","p90":"409566990"}},"Spree::BaseAnalyticsEventHandler at ./core/spec/models/spree/base_analytics_event_handler_spec.rb":{"source_file":"core/spec/models/spree/base_analytics_event_handler_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::BaseAnalyticsEventHandler at ./spec/models/spree/base_analytics_event_handler_spec.rb":{"source_file":"core/spec/models/spree/base_analytics_event_handler_spec.rb","duration":{"p50":"335322854","p90":"363251880"}},"Spree::BaseHelper at ./spec/helpers/base_helper_spec.rb":{"source_file":"core/spec/helpers/base_helper_spec.rb","duration":{"p50":"4338045372","p90":"4794297569"}},"Spree::CSV::CustomerPresenter at ./spec/presenters/spree/csv/customer_presenter_spec.rb":{"source_file":"core/spec/presenters/spree/csv/customer_presenter_spec.rb","duration":{"p50":"3925212689","p90":"4167942623"}},"Spree::CSV::GiftCardPresenter at ./core/spec/presenters/spree/csv/gift_card_presenter_spec.rb":{"source_file":"core/spec/presenters/spree/csv/gift_card_presenter_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::CSV::GiftCardPresenter at ./spec/presenters/spree/csv/gift_card_presenter_spec.rb":{"source_file":"core/spec/presenters/spree/csv/gift_card_presenter_spec.rb","duration":{"p50":"349008105","p90":"370590302"}},"Spree::CSV::NewsletterSubscriberPresenter at ./spec/presenters/spree/csv/newsletter_subscriber_presenter_spec.rb":{"source_file":"core/spec/presenters/spree/csv/newsletter_subscriber_presenter_spec.rb","duration":{"p50":"378076975","p90":"520665853"}},"Spree::CSV::OrderLineItemPresenter at ./core/spec/presenters/spree/csv/order_line_items_presenter_spec.rb":{"source_file":"core/spec/presenters/spree/csv/order_line_items_presenter_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::CSV::OrderLineItemPresenter at ./spec/presenters/spree/csv/order_line_items_presenter_spec.rb":{"source_file":"core/spec/presenters/spree/csv/order_line_items_presenter_spec.rb","duration":{"p50":"1728740663","p90":"2028706782"}},"Spree::CSV::ProductVariantPresenter at ./spec/presenters/spree/csv/product_variant_presenter_spec.rb":{"source_file":"core/spec/presenters/spree/csv/product_variant_presenter_spec.rb","duration":{"p50":"2477884579","p90":"2907840000"}},"Spree::CalculatedAdjustments at ./spec/lib/calculated_adjustments_spec.rb":{"source_file":"core/spec/lib/calculated_adjustments_spec.rb","duration":{"p50":"303411654","p90":"335322854"}},"Spree::Calculator at ./core/spec/models/spree/calculator_spec.rb":{"source_file":"core/spec/models/spree/calculator_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Calculator at ./spec/models/spree/calculator_spec.rb":{"source_file":"core/spec/models/spree/calculator_spec.rb","duration":{"p50":"452643035","p90":"520665853"}},"Spree::Calculator::DefaultTax at ./core/spec/models/spree/calculator/default_tax_spec.rb":{"source_file":"core/spec/models/spree/calculator/default_tax_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Calculator::DefaultTax at ./spec/models/spree/calculator/default_tax_spec.rb":{"source_file":"core/spec/models/spree/calculator/default_tax_spec.rb","duration":{"p50":"3026515237","p90":"3344827773"}},"Spree::Calculator::FlatPercentItemTotal at ./core/spec/models/spree/calculator/flat_percent_item_total_spec.rb":{"source_file":"core/spec/models/spree/calculator/flat_percent_item_total_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Calculator::FlatPercentItemTotal at ./spec/models/spree/calculator/flat_percent_item_total_spec.rb":{"source_file":"core/spec/models/spree/calculator/flat_percent_item_total_spec.rb","duration":{"p50":"335322854","p90":"510355638"}},"Spree::Calculator::FlatRate at ./core/spec/models/spree/calculator/flat_rate_spec.rb":{"source_file":"core/spec/models/spree/calculator/flat_rate_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Calculator::FlatRate at ./spec/models/spree/calculator/flat_rate_spec.rb":{"source_file":"core/spec/models/spree/calculator/flat_rate_spec.rb","duration":{"p50":"1502887919","p90":"1799294307"}},"Spree::Calculator::FlexiRate at ./spec/models/spree/calculator/flexi_rate_spec.rb":{"source_file":"core/spec/models/spree/calculator/flexi_rate_spec.rb","duration":{"p50":"1027754031","p90":"1182204051"}},"Spree::Calculator::PercentOnLineItem at ./core/spec/models/spree/calculator/percent_on_line_item_spec.rb":{"source_file":"core/spec/models/spree/calculator/percent_on_line_item_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Calculator::PercentOnLineItem at ./spec/models/spree/calculator/percent_on_line_item_spec.rb":{"source_file":"core/spec/models/spree/calculator/percent_on_line_item_spec.rb","duration":{"p50":"893482261","p90":"1007402466"}},"Spree::Calculator::PriceSack at ./core/spec/models/spree/calculator/price_sack_spec.rb":{"source_file":"core/spec/models/spree/calculator/price_sack_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Calculator::PriceSack at ./spec/models/spree/calculator/price_sack_spec.rb":{"source_file":"core/spec/models/spree/calculator/price_sack_spec.rb","duration":{"p50":"471116376","p90":"564032090"}},"Spree::Calculator::Returns::DefaultRefundAmount at ./core/spec/models/spree/calculator/refunds/default_refund_amount_spec.rb":{"source_file":"core/spec/models/spree/calculator/refunds/default_refund_amount_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Calculator::Returns::DefaultRefundAmount at ./spec/models/spree/calculator/refunds/default_refund_amount_spec.rb":{"source_file":"core/spec/models/spree/calculator/refunds/default_refund_amount_spec.rb","duration":{"p50":"2242075211","p90":"2380722160"}},"Spree::Calculator::Shipping::DigitalDelivery at ./spec/models/spree/calculator/shipping/digital_delivery_spec.rb":{"source_file":"core/spec/models/spree/calculator/shipping/digital_delivery_spec.rb","duration":{"p50":"2477884579","p90":"2793818237"}},"Spree::Calculator::Shipping::FlatPercentItemTotal at ./core/spec/models/spree/calculator/shipping/flat_percent_item_total_spec.rb":{"source_file":"core/spec/models/spree/calculator/shipping/flat_percent_item_total_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Calculator::Shipping::FlatPercentItemTotal at ./spec/models/spree/calculator/shipping/flat_percent_item_total_spec.rb":{"source_file":"core/spec/models/spree/calculator/shipping/flat_percent_item_total_spec.rb","duration":{"p50":"490343654","p90":"661901319"}},"Spree::Calculator::Shipping::FlatRate at ./spec/models/spree/calculator/shipping/flat_rate_spec.rb":{"source_file":"core/spec/models/spree/calculator/shipping/flat_rate_spec.rb","duration":{"p50":"1182204051","p90":"1332936677"}},"Spree::Calculator::Shipping::FlexiRate at ./spec/models/spree/calculator/shipping/flexi_rate_spec.rb":{"source_file":"core/spec/models/spree/calculator/shipping/flexi_rate_spec.rb","duration":{"p50":"4085409105","p90":"4699360983"}},"Spree::Calculator::Shipping::PerItem at ./spec/models/spree/calculator/shipping/per_item_spec.rb":{"source_file":"core/spec/models/spree/calculator/shipping/per_item_spec.rb","duration":{"p50":"858447176","p90":"1113355619"}},"Spree::Calculator::Shipping::PriceSack at ./spec/models/spree/calculator/shipping/price_sack_spec.rb":{"source_file":"core/spec/models/spree/calculator/shipping/price_sack_spec.rb","duration":{"p50":"434894068","p90":"717031051"}},"Spree::Calculator::TieredFlatRate at ./spec/models/spree/calculator/tiered_flat_rate_spec.rb":{"source_file":"core/spec/models/spree/calculator/tiered_flat_rate_spec.rb","duration":{"p50":"471116376","p90":"510355638"}},"Spree::Calculator::TieredPercent at ./core/spec/models/spree/calculator/tiered_percent_spec.rb":{"source_file":"core/spec/models/spree/calculator/tiered_percent_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Calculator::TieredPercent at ./spec/models/spree/calculator/tiered_percent_spec.rb":{"source_file":"core/spec/models/spree/calculator/tiered_percent_spec.rb","duration":{"p50":"500249586","p90":"702832417"}},"Spree::Cart::AddItem at ./spec/services/spree/cart/add_item_spec.rb":{"source_file":"core/spec/services/spree/cart/add_item_spec.rb","duration":{"p50":"4699360983","p90":"5855807315"}},"Spree::Cart::Associate at ./spec/services/spree/cart/associate_spec.rb":{"source_file":"core/spec/services/spree/cart/associate_spec.rb","duration":{"p50":"349008105","p90":"385714894"}},"Spree::Cart::ChangeCurrency at ./core/spec/services/spree/cart/change_currency_spec.rb":{"source_file":"core/spec/services/spree/cart/change_currency_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Cart::ChangeCurrency at ./spec/services/spree/cart/change_currency_spec.rb":{"source_file":"core/spec/services/spree/cart/change_currency_spec.rb","duration":{"p50":"967900360","p90":"1158794069"}},"Spree::Cart::Create at ./spec/services/spree/cart/create_spec.rb":{"source_file":"core/spec/services/spree/cart/create_spec.rb","duration":{"p50":"1158794069","p90":"1359864691"}},"Spree::Cart::Destroy at ./spec/services/spree/cart/destroy_spec.rb":{"source_file":"core/spec/services/spree/cart/destroy_spec.rb","duration":{"p50":"2527942853","p90":"3087656959"}},"Spree::Cart::Empty at ./core/spec/services/spree/cart/empty_spec.rb":{"source_file":"core/spec/services/spree/cart/empty_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Cart::Empty at ./spec/services/spree/cart/empty_spec.rb":{"source_file":"core/spec/services/spree/cart/empty_spec.rb","duration":{"p50":"393507114","p90":"552863137"}},"Spree::Cart::RemoveItem at ./spec/services/spree/cart/remove_item_spec.rb":{"source_file":"core/spec/services/spree/cart/remove_item_spec.rb","duration":{"p50":"2069690757","p90":"2154159312"}},"Spree::Cart::RemoveLineItem at ./spec/services/spree/cart/remove_line_item_spec.rb":{"source_file":"core/spec/services/spree/cart/remove_line_item_spec.rb","duration":{"p50":"1387336705","p90":"1949157452"}},"Spree::Cart::RemoveOutOfStockItems at ./core/spec/services/spree/cart/remove_out_of_stock_items_spec.rb":{"source_file":"core/spec/services/spree/cart/remove_out_of_stock_items_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Cart::RemoveOutOfStockItems at ./spec/services/spree/cart/remove_out_of_stock_items_spec.rb":{"source_file":"core/spec/services/spree/cart/remove_out_of_stock_items_spec.rb","duration":{"p50":"948734016","p90":"1113355619"}},"Spree::Cart::SetQuantity at ./core/spec/services/spree/cart/set_quantity_spec.rb":{"source_file":"core/spec/services/spree/cart/set_quantity_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Cart::SetQuantity at ./spec/services/spree/cart/set_quantity_spec.rb":{"source_file":"core/spec/services/spree/cart/set_quantity_spec.rb","duration":{"p50":"635946949","p90":"731516527"}},"Spree::Checkout::AddStoreCredit at ./spec/services/spree/checkout/add_store_credit_spec.rb":{"source_file":"core/spec/services/spree/checkout/add_store_credit_spec.rb","duration":{"p50":"688914943","p90":"808453487"}},"Spree::Checkout::Advance at ./core/spec/services/spree/checkout/advance_spec.rb":{"source_file":"core/spec/services/spree/checkout/advance_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Checkout::Advance at ./spec/services/spree/checkout/advance_spec.rb":{"source_file":"core/spec/services/spree/checkout/advance_spec.rb","duration":{"p50":"3771297869","p90":"4252143484"}},"Spree::Checkout::GetShippingRates at ./spec/services/spree/checkout/get_shipping_rates_spec.rb":{"source_file":"core/spec/services/spree/checkout/get_shipping_rates_spec.rb","duration":{"p50":"2380722160","p90":"2579012406"}},"Spree::Checkout::RemoveStoreCredit at ./core/spec/services/spree/checkout/remove_store_credit_spec.rb":{"source_file":"core/spec/services/spree/checkout/remove_store_credit_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Checkout::RemoveStoreCredit at ./spec/services/spree/checkout/remove_store_credit_spec.rb":{"source_file":"core/spec/services/spree/checkout/remove_store_credit_spec.rb","duration":{"p50":"731516527","p90":"841448222"}},"Spree::Checkout::SelectShippingMethod at ./spec/services/spree/checkout/select_shipping_method_spec.rb":{"source_file":"core/spec/services/spree/checkout/select_shipping_method_spec.rb","duration":{"p50":"5626190324","p90":"6094795472"}},"Spree::Checkout::Update at ./spec/services/spree/checkout/update_spec.rb":{"source_file":"core/spec/services/spree/checkout/update_spec.rb","duration":{"p50":"4167942623","p90":"4699360983"}},"Spree::Classification at ./spec/models/spree/classification_spec.rb":{"source_file":"core/spec/models/spree/classification_spec.rb","duration":{"p50":"4699360983","p90":"5405577038"}},"Spree::Classifications::Reposition at ./spec/services/spree/classifications/reposition_spec.rb":{"source_file":"core/spec/services/spree/classifications/reposition_spec.rb","duration":{"p50":"967900360","p90":"1027754031"}},"Spree::Core::ControllerHelpers::Auth at ./spec/lib/spree/core/controller_helpers/auth_spec.rb":{"source_file":"core/spec/lib/spree/core/controller_helpers/auth_spec.rb","duration":{"p50":"297403503","p90":"315794540"}},"Spree::Core::ControllerHelpers::Currency at ./core/spec/lib/spree/core/controller_helpers/currency_spec.rb":{"source_file":"core/spec/lib/spree/core/controller_helpers/currency_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Core::ControllerHelpers::Currency at ./spec/lib/spree/core/controller_helpers/currency_spec.rb":{"source_file":"core/spec/lib/spree/core/controller_helpers/currency_spec.rb","duration":{"p50":"1473127762","p90":"1564224024"}},"Spree::Core::ControllerHelpers::Locale at ./spec/lib/spree/core/controller_helpers/locale_spec.rb":{"source_file":"core/spec/lib/spree/core/controller_helpers/locale_spec.rb","duration":{"p50":"2850259010","p90":"2966584242"}},"Spree::Core::ControllerHelpers::Order at ./core/spec/lib/spree/core/controller_helpers/order_spec.rb":{"source_file":"core/spec/lib/spree/core/controller_helpers/order_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Core::ControllerHelpers::Order at ./spec/lib/spree/core/controller_helpers/order_spec.rb":{"source_file":"core/spec/lib/spree/core/controller_helpers/order_spec.rb","duration":{"p50":"2111502692","p90":"2477884579"}},"Spree::Core::ControllerHelpers::Search at ./core/spec/lib/spree/core/controller_helpers/search_spec.rb":{"source_file":"core/spec/lib/spree/core/controller_helpers/search_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Core::ControllerHelpers::Search at ./spec/lib/spree/core/controller_helpers/search_spec.rb":{"source_file":"core/spec/lib/spree/core/controller_helpers/search_spec.rb","duration":{"p50":"297403503","p90":"335322854"}},"Spree::Core::ControllerHelpers::Store at ./spec/lib/spree/core/controller_helpers/store_spec.rb":{"source_file":"core/spec/lib/spree/core/controller_helpers/store_spec.rb","duration":{"p50":"4252143484","p90":"4891152065"}},"Spree::Core::ControllerHelpers::StrongParameters at ./core/spec/lib/spree/core/controller_helpers/strong_parameters_spec.rb":{"source_file":"core/spec/lib/spree/core/controller_helpers/strong_parameters_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Core::ControllerHelpers::StrongParameters at ./spec/lib/spree/core/controller_helpers/strong_parameters_spec.rb":{"source_file":"core/spec/lib/spree/core/controller_helpers/strong_parameters_spec.rb","duration":{"p50":"322174228","p90":"480633878"}},"Spree::Core::Dependencies at ./spec/models/spree/app_dependencies_spec.rb":{"source_file":"core/spec/models/spree/app_dependencies_spec.rb","duration":{"p50":"335322854","p90":"385714894"}},"Spree::Core::Importer::Order at ./core/spec/lib/spree/core/importer/order_spec.rb":{"source_file":"core/spec/lib/spree/core/importer/order_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb":{"source_file":"core/spec/lib/spree/core/importer/order_spec.rb","duration":{"p50":"5090770556","p90":"5405577038"}},"Spree::Core::NumberGenerator at ./core/spec/lib/spree/core/number_generator_spec.rb":{"source_file":"core/spec/lib/spree/core/number_generator_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Core::NumberGenerator at ./spec/lib/spree/core/number_generator_spec.rb":{"source_file":"core/spec/lib/spree/core/number_generator_spec.rb","duration":{"p50":"480633878","p90":"520665853"}},"Spree::Core::Partials at ./core/spec/lib/spree/core/partials_spec.rb":{"source_file":"core/spec/lib/spree/core/partials_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Core::Partials at ./spec/lib/spree/core/partials_spec.rb":{"source_file":"core/spec/lib/spree/core/partials_spec.rb","duration":{"p50":"303411654","p90":"490343654"}},"Spree::Core::Search::Base at ./core/spec/lib/search/base_spec.rb":{"source_file":"core/spec/lib/search/base_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Core::Search::Base at ./spec/lib/search/base_spec.rb":{"source_file":"core/spec/lib/search/base_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Core::TokenGenerator at ./core/spec/lib/spree/core/token_generator_spec.rb":{"source_file":"core/spec/lib/spree/core/token_generator_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Core::TokenGenerator at ./spec/lib/spree/core/token_generator_spec.rb":{"source_file":"core/spec/lib/spree/core/token_generator_spec.rb","duration":{"p50":"291514324","p90":"309541183"}},"Spree::Country at ./core/spec/models/spree/country_spec.rb":{"source_file":"core/spec/models/spree/country_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Country at ./spec/models/spree/country_spec.rb":{"source_file":"core/spec/models/spree/country_spec.rb","duration":{"p50":"746294639","p90":"761371298"}},"Spree::CouponCode at ./spec/models/spree/coupon_code_spec.rb":{"source_file":"core/spec/models/spree/coupon_code_spec.rb","duration":{"p50":"356058774","p90":"426282304"}},"Spree::CouponCodes::BulkGenerateJob at ./spec/jobs/spree/coupon_codes/bulk_generate_job_spec.rb":{"source_file":"core/spec/jobs/spree/coupon_codes/bulk_generate_job_spec.rb","duration":{"p50":"746294639","p90":"841448222"}},"Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb":{"source_file":"core/spec/models/spree/credit_card_spec.rb","duration":{"p50":"5193614405","p90":"6217922653"}},"Spree::CreditCards::Destroy at ./core/spec/services/spree/credit_cards/destroy_spec.rb":{"source_file":"core/spec/services/spree/credit_cards/destroy_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::CreditCards::Destroy at ./spec/services/spree/credit_cards/destroy_spec.rb":{"source_file":"core/spec/services/spree/credit_cards/destroy_spec.rb","duration":{"p50":"1443956915","p90":"1660953558"}},"Spree::CurrencyHelper at ./spec/helpers/currency_helper_spec.rb":{"source_file":"core/spec/helpers/currency_helper_spec.rb","duration":{"p50":"1872727398","p90":"2028706782"}},"Spree::Current at ./core/spec/models/spree/current_spec.rb":{"source_file":"core/spec/models/spree/current_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Current at ./spec/models/spree/current_spec.rb":{"source_file":"core/spec/models/spree/current_spec.rb","duration":{"p50":"4989963218","p90":"5514780614"}},"Spree::CustomDomain at ./core/spec/models/spree/custom_domain_spec.rb":{"source_file":"core/spec/models/spree/custom_domain_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::CustomDomain at ./spec/models/spree/custom_domain_spec.rb":{"source_file":"core/spec/models/spree/custom_domain_spec.rb","duration":{"p50":"1280669775","p90":"1415363709"}},"Spree::CustomerGroup at ./core/spec/models/spree/customer_group_spec.rb":{"source_file":"core/spec/models/spree/customer_group_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::CustomerGroup at ./spec/models/spree/customer_group_spec.rb":{"source_file":"core/spec/models/spree/customer_group_spec.rb","duration":{"p50":"911532407","p90":"1158794069"}},"Spree::CustomerGroupUser at ./core/spec/models/spree/customer_group_user_spec.rb":{"source_file":"core/spec/models/spree/customer_group_user_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::CustomerGroupUser at ./spec/models/spree/customer_group_user_spec.rb":{"source_file":"core/spec/models/spree/customer_group_user_spec.rb","duration":{"p50":"335322854","p90":"349008105"}},"Spree::CustomerReturn at ./core/spec/models/spree/customer_return_spec.rb":{"source_file":"core/spec/models/spree/customer_return_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::CustomerReturn at ./spec/models/spree/customer_return_spec.rb":{"source_file":"core/spec/models/spree/customer_return_spec.rb","duration":{"p50":"25725512621","p90":"28431183178"}},"Spree::DataFeed::Google at ./core/spec/models/spree/data_feed/google_spec.rb":{"source_file":"core/spec/models/spree/data_feed/google_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::DataFeed::Google at ./spec/models/spree/data_feed/google_spec.rb":{"source_file":"core/spec/models/spree/data_feed/google_spec.rb","duration":{"p50":"858447176","p90":"1007402466"}},"Spree::DataFeeds::Google::RequiredAttributes at ./core/spec/services/spree/data_feeds/google/required_attributes_spec.rb":{"source_file":"core/spec/services/spree/data_feeds/google/required_attributes_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::DataFeeds::Google::RequiredAttributes at ./spec/services/spree/data_feeds/google/required_attributes_spec.rb":{"source_file":"core/spec/services/spree/data_feeds/google/required_attributes_spec.rb","duration":{"p50":"490343654","p90":"541915353"}},"Spree::DataFeeds::Google::Rss at ./spec/services/spree/data_feeds/google/rss_spec.rb":{"source_file":"core/spec/services/spree/data_feeds/google/rss_spec.rb","duration":{"p50":"2966584242","p90":"3344827773"}},"Spree::Digital at ./spec/models/spree/digital_spec.rb":{"source_file":"core/spec/models/spree/digital_spec.rb","duration":{"p50":"987453902","p90":"1091308973"}},"Spree::DigitalLink at ./core/spec/models/spree/digital_link_spec.rb":{"source_file":"core/spec/models/spree/digital_link_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::DigitalLink at ./spec/models/spree/digital_link_spec.rb":{"source_file":"core/spec/models/spree/digital_link_spec.rb","duration":{"p50":"6471689520","p90":"8227195624"}},"Spree::DisplayMoney at ./core/spec/models/spree/concerns/display_money_spec.rb":{"source_file":"core/spec/models/spree/concerns/display_money_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::DisplayMoney at ./spec/models/spree/concerns/display_money_spec.rb":{"source_file":"core/spec/models/spree/concerns/display_money_spec.rb","duration":{"p50":"335322854","p90":"520665853"}},"Spree::Event at ./spec/models/spree/event_spec.rb":{"source_file":"core/spec/models/spree/event_spec.rb","duration":{"p50":"531184355","p90":"552863137"}},"Spree::EventLogSubscriber at ./spec/subscribers/spree/event_log_subscriber_spec.rb":{"source_file":"core/spec/subscribers/spree/event_log_subscriber_spec.rb","duration":{"p50":"315794540","p90":"322174228"}},"Spree::Events at ./spec/lib/spree/events_spec.rb":{"source_file":"core/spec/lib/spree/events_spec.rb","duration":{"p50":"335322854","p90":"480633878"}},"Spree::Events::AssetSerializer at ./core/spec/serializers/spree/events/asset_serializer_spec.rb":{"source_file":"core/spec/serializers/spree/events/asset_serializer_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Events::AssetSerializer at ./spec/serializers/spree/events/asset_serializer_spec.rb":{"source_file":"core/spec/serializers/spree/events/asset_serializer_spec.rb","duration":{"p50":"717031051","p90":"948734016"}},"Spree::Events::BaseSerializer at ./core/spec/serializers/spree/events/base_serializer_spec.rb":{"source_file":"core/spec/serializers/spree/events/base_serializer_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Events::BaseSerializer at ./spec/serializers/spree/events/base_serializer_spec.rb":{"source_file":"core/spec/serializers/spree/events/base_serializer_spec.rb","duration":{"p50":"342097053","p90":"378076975"}},"Spree::Events::CustomerReturnSerializer at ./spec/serializers/spree/events/customer_return_serializer_spec.rb":{"source_file":"core/spec/serializers/spree/events/customer_return_serializer_spec.rb","duration":{"p50":"1835643687","p90":"2197677682"}},"Spree::Events::DigitalLinkSerializer at ./spec/serializers/spree/events/digital_link_serializer_spec.rb":{"source_file":"core/spec/serializers/spree/events/digital_link_serializer_spec.rb","duration":{"p50":"1113355619","p90":"1280669775"}},"Spree::Events::DigitalSerializer at ./spec/serializers/spree/events/digital_serializer_spec.rb":{"source_file":"core/spec/serializers/spree/events/digital_serializer_spec.rb","duration":{"p50":"717031051","p90":"1069698895"}},"Spree::Events::ExportSerializer at ./spec/serializers/spree/events/export_serializer_spec.rb":{"source_file":"core/spec/serializers/spree/events/export_serializer_spec.rb","duration":{"p50":"393507114","p90":"417841070"}},"Spree::Events::GiftCardBatchSerializer at ./core/spec/serializers/spree/events/gift_card_batch_serializer_spec.rb":{"source_file":"core/spec/serializers/spree/events/gift_card_batch_serializer_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Events::GiftCardBatchSerializer at ./spec/serializers/spree/events/gift_card_batch_serializer_spec.rb":{"source_file":"core/spec/serializers/spree/events/gift_card_batch_serializer_spec.rb","duration":{"p50":"443679807","p90":"480633878"}},"Spree::Events::GiftCardSerializer at ./core/spec/serializers/spree/events/gift_card_serializer_spec.rb":{"source_file":"core/spec/serializers/spree/events/gift_card_serializer_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Events::GiftCardSerializer at ./spec/serializers/spree/events/gift_card_serializer_spec.rb":{"source_file":"core/spec/serializers/spree/events/gift_card_serializer_spec.rb","duration":{"p50":"322174228","p90":"461787339"}},"Spree::Events::ImportRowSerializer at ./spec/serializers/spree/events/import_row_serializer_spec.rb":{"source_file":"core/spec/serializers/spree/events/import_row_serializer_spec.rb","duration":{"p50":"893482261","p90":"1113355619"}},"Spree::Events::ImportSerializer at ./core/spec/serializers/spree/events/import_serializer_spec.rb":{"source_file":"core/spec/serializers/spree/events/import_serializer_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Events::ImportSerializer at ./spec/serializers/spree/events/import_serializer_spec.rb":{"source_file":"core/spec/serializers/spree/events/import_serializer_spec.rb","duration":{"p50":"426282304","p90":"461787339"}},"Spree::Events::InvitationSerializer at ./core/spec/serializers/spree/events/invitation_serializer_spec.rb":{"source_file":"core/spec/serializers/spree/events/invitation_serializer_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Events::InvitationSerializer at ./spec/serializers/spree/events/invitation_serializer_spec.rb":{"source_file":"core/spec/serializers/spree/events/invitation_serializer_spec.rb","duration":{"p50":"552863137","p90":"611010298"}},"Spree::Events::LineItemSerializer at ./core/spec/serializers/spree/events/line_item_serializer_spec.rb":{"source_file":"core/spec/serializers/spree/events/line_item_serializer_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Events::LineItemSerializer at ./spec/serializers/spree/events/line_item_serializer_spec.rb":{"source_file":"core/spec/serializers/spree/events/line_item_serializer_spec.rb","duration":{"p50":"1135847652","p90":"1280669775"}},"Spree::Events::NewsletterSubscriberSerializer at ./spec/serializers/spree/events/newsletter_subscriber_serializer_spec.rb":{"source_file":"core/spec/serializers/spree/events/newsletter_subscriber_serializer_spec.rb","duration":{"p50":"309541183","p90":"328682798"}},"Spree::Events::OrderSerializer at ./core/spec/serializers/spree/events/order_serializer_spec.rb":{"source_file":"core/spec/serializers/spree/events/order_serializer_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Events::OrderSerializer at ./spec/serializers/spree/events/order_serializer_spec.rb":{"source_file":"core/spec/serializers/spree/events/order_serializer_spec.rb","duration":{"p50":"1660953558","p90":"1949157452"}},"Spree::Events::PaymentSerializer at ./spec/serializers/spree/events/payment_serializer_spec.rb":{"source_file":"core/spec/serializers/spree/events/payment_serializer_spec.rb","duration":{"p50":"1595824509","p90":"1835643687"}},"Spree::Events::PostCategorySerializer at ./core/spec/serializers/spree/events/post_category_serializer_spec.rb":{"source_file":"core/spec/serializers/spree/events/post_category_serializer_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Events::PostCategorySerializer at ./spec/serializers/spree/events/post_category_serializer_spec.rb":{"source_file":"core/spec/serializers/spree/events/post_category_serializer_spec.rb","duration":{"p50":"328682798","p90":"363251880"}},"Spree::Events::PostSerializer at ./spec/serializers/spree/events/post_serializer_spec.rb":{"source_file":"core/spec/serializers/spree/events/post_serializer_spec.rb","duration":{"p50":"531184355","p90":"587051459"}},"Spree::Events::PriceSerializer at ./spec/serializers/spree/events/price_serializer_spec.rb":{"source_file":"core/spec/serializers/spree/events/price_serializer_spec.rb","duration":{"p50":"841448222","p90":"1113355619"}},"Spree::Events::ProductSerializer at ./spec/serializers/spree/events/product_serializer_spec.rb":{"source_file":"core/spec/serializers/spree/events/product_serializer_spec.rb","duration":{"p50":"623353940","p90":"808453487"}},"Spree::Events::PromotionSerializer at ./spec/serializers/spree/events/promotion_serializer_spec.rb":{"source_file":"core/spec/serializers/spree/events/promotion_serializer_spec.rb","duration":{"p50":"443679807","p90":"480633878"}},"Spree::Events::RefundSerializer at ./core/spec/serializers/spree/events/refund_serializer_spec.rb":{"source_file":"core/spec/serializers/spree/events/refund_serializer_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Events::RefundSerializer at ./spec/serializers/spree/events/refund_serializer_spec.rb":{"source_file":"core/spec/serializers/spree/events/refund_serializer_spec.rb","duration":{"p50":"623353940","p90":"675273063"}},"Spree::Events::Registry at ./core/spec/lib/spree/events/registry_spec.rb":{"source_file":"core/spec/lib/spree/events/registry_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Events::Registry at ./spec/lib/spree/events/registry_spec.rb":{"source_file":"core/spec/lib/spree/events/registry_spec.rb","duration":{"p50":"309541183","p90":"342097053"}},"Spree::Events::ReimbursementSerializer at ./spec/serializers/spree/events/reimbursement_serializer_spec.rb":{"source_file":"core/spec/serializers/spree/events/reimbursement_serializer_spec.rb","duration":{"p50":"3026515237","p90":"3551667475"}},"Spree::Events::ReportSerializer at ./core/spec/serializers/spree/events/report_serializer_spec.rb":{"source_file":"core/spec/serializers/spree/events/report_serializer_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Events::ReportSerializer at ./spec/serializers/spree/events/report_serializer_spec.rb":{"source_file":"core/spec/serializers/spree/events/report_serializer_spec.rb","duration":{"p50":"401456752","p90":"417841070"}},"Spree::Events::ReturnAuthorizationSerializer at ./spec/serializers/spree/events/return_authorization_serializer_spec.rb":{"source_file":"core/spec/serializers/spree/events/return_authorization_serializer_spec.rb","duration":{"p50":"1473127762","p90":"1694508175"}},"Spree::Events::ReturnItemSerializer at ./spec/serializers/spree/events/return_item_serializer_spec.rb":{"source_file":"core/spec/serializers/spree/events/return_item_serializer_spec.rb","duration":{"p50":"3150033867","p90":"3771297869"}},"Spree::Events::ShipmentSerializer at ./spec/serializers/spree/events/shipment_serializer_spec.rb":{"source_file":"core/spec/serializers/spree/events/shipment_serializer_spec.rb","duration":{"p50":"702832417","p90":"746294639"}},"Spree::Events::StockItemSerializer at ./spec/serializers/spree/events/stock_item_serializer_spec.rb":{"source_file":"core/spec/serializers/spree/events/stock_item_serializer_spec.rb","duration":{"p50":"929947204","p90":"1027754031"}},"Spree::Events::StockMovementSerializer at ./core/spec/serializers/spree/events/stock_movement_serializer_spec.rb":{"source_file":"core/spec/serializers/spree/events/stock_movement_serializer_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Events::StockMovementSerializer at ./spec/serializers/spree/events/stock_movement_serializer_spec.rb":{"source_file":"core/spec/serializers/spree/events/stock_movement_serializer_spec.rb","duration":{"p50":"1007402466","p90":"1206086961"}},"Spree::Events::StockTransferSerializer at ./spec/serializers/spree/events/stock_transfer_serializer_spec.rb":{"source_file":"core/spec/serializers/spree/events/stock_transfer_serializer_spec.rb","duration":{"p50":"858447176","p90":"1158794069"}},"Spree::Events::StoreCreditSerializer at ./spec/serializers/spree/events/store_credit_serializer_spec.rb":{"source_file":"core/spec/serializers/spree/events/store_credit_serializer_spec.rb","duration":{"p50":"552863137","p90":"675273063"}},"Spree::Events::UserSerializer at ./spec/serializers/spree/events/user_serializer_spec.rb":{"source_file":"core/spec/serializers/spree/events/user_serializer_spec.rb","duration":{"p50":"309541183","p90":"322174228"}},"Spree::Events::VariantSerializer at ./spec/serializers/spree/events/variant_serializer_spec.rb":{"source_file":"core/spec/serializers/spree/events/variant_serializer_spec.rb","duration":{"p50":"1660953558","p90":"1988534370"}},"Spree::Events::WishedItemSerializer at ./spec/serializers/spree/events/wished_item_serializer_spec.rb":{"source_file":"core/spec/serializers/spree/events/wished_item_serializer_spec.rb","duration":{"p50":"776752537","p90":"841448222"}},"Spree::Events::WishlistSerializer at ./spec/serializers/spree/events/wishlist_serializer_spec.rb":{"source_file":"core/spec/serializers/spree/events/wishlist_serializer_spec.rb","duration":{"p50":"342097053","p90":"541915353"}},"Spree::Exchange at ./spec/models/spree/exchange_spec.rb":{"source_file":"core/spec/models/spree/exchange_spec.rb","duration":{"p50":"3771297869","p90":"4425682652"}},"Spree::Export at ./spec/models/spree/export_spec.rb":{"source_file":"core/spec/models/spree/export_spec.rb","duration":{"p50":"5514780614","p90":"6343537252"}},"Spree::ExportMailer at ./core/spec/mailers/spree/export_mailer_spec.rb":{"source_file":"core/spec/mailers/spree/export_mailer_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::ExportMailer at ./spec/mailers/spree/export_mailer_spec.rb":{"source_file":"core/spec/mailers/spree/export_mailer_spec.rb","duration":{"p50":"531184355","p90":"648794362"}},"Spree::ExportSubscriber at ./core/spec/subscribers/spree/export_subscriber_spec.rb":{"source_file":"core/spec/subscribers/spree/export_subscriber_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::ExportSubscriber at ./spec/subscribers/spree/export_subscriber_spec.rb":{"source_file":"core/spec/subscribers/spree/export_subscriber_spec.rb","duration":{"p50":"315794540","p90":"452643035"}},"Spree::Exports::Customers at ./core/spec/models/spree/exports/customers_spec.rb":{"source_file":"core/spec/models/spree/exports/customers_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Exports::Customers at ./spec/models/spree/exports/customers_spec.rb":{"source_file":"core/spec/models/spree/exports/customers_spec.rb","duration":{"p50":"309541183","p90":"434894068"}},"Spree::Exports::GenerateJob at ./spec/jobs/spree/exports/generate_job_spec.rb":{"source_file":"core/spec/jobs/spree/exports/generate_job_spec.rb","duration":{"p50":"342097053","p90":"461787339"}},"Spree::Exports::GiftCards at ./core/spec/models/spree/exports/gift_cards_spec.rb":{"source_file":"core/spec/models/spree/exports/gift_cards_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Exports::GiftCards at ./spec/models/spree/exports/gift_cards_spec.rb":{"source_file":"core/spec/models/spree/exports/gift_cards_spec.rb","duration":{"p50":"385714894","p90":"434894068"}},"Spree::Exports::NewsletterSubscribers at ./spec/models/spree/exports/newsletter_subscribers_spec.rb":{"source_file":"core/spec/models/spree/exports/newsletter_subscribers_spec.rb","duration":{"p50":"309541183","p90":"322174228"}},"Spree::Exports::Orders at ./spec/models/spree/exports/orders_spec.rb":{"source_file":"core/spec/models/spree/exports/orders_spec.rb","duration":{"p50":"315794540","p90":"328682798"}},"Spree::Exports::Products at ./spec/models/spree/exports/products_spec.rb":{"source_file":"core/spec/models/spree/exports/products_spec.rb","duration":{"p50":"541915353","p90":"635946949"}},"Spree::Filters::OptionsPresenter at ./core/spec/presenters/spree/filters/options_presenter_spec.rb":{"source_file":"core/spec/presenters/spree/filters/options_presenter_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Filters::OptionsPresenter at ./spec/presenters/spree/filters/options_presenter_spec.rb":{"source_file":"core/spec/presenters/spree/filters/options_presenter_spec.rb","duration":{"p50":"328682798","p90":"349008105"}},"Spree::Filters::PricePresenter at ./core/spec/presenters/spree/filters/price_presenter_spec.rb":{"source_file":"core/spec/presenters/spree/filters/price_presenter_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Filters::PricePresenter at ./spec/presenters/spree/filters/price_presenter_spec.rb":{"source_file":"core/spec/presenters/spree/filters/price_presenter_spec.rb","duration":{"p50":"297403503","p90":"309541183"}},"Spree::Filters::PriceRangePresenter at ./spec/presenters/spree/filters/price_range_presenter_spec.rb":{"source_file":"core/spec/presenters/spree/filters/price_range_presenter_spec.rb","duration":{"p50":"297403503","p90":"409566990"}},"Spree::Filters::PropertiesPresenter at ./core/spec/presenters/spree/filters/properties_presenter_spec.rb":{"source_file":"core/spec/presenters/spree/filters/properties_presenter_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Filters::PropertiesPresenter at ./spec/presenters/spree/filters/properties_presenter_spec.rb":{"source_file":"core/spec/presenters/spree/filters/properties_presenter_spec.rb","duration":{"p50":"675273063","p90":"875789543"}},"Spree::Filters::PropertyPresenter at ./spec/presenters/spree/filters/property_presenter_spec.rb":{"source_file":"core/spec/presenters/spree/filters/property_presenter_spec.rb","duration":{"p50":"552863137","p90":"635946949"}},"Spree::Filters::QuantifiedPriceRangePresenter at ./core/spec/presenters/spree/filters/quantified_price_range_presenter_spec.rb":{"source_file":"core/spec/presenters/spree/filters/quantified_price_range_presenter_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Filters::QuantifiedPriceRangePresenter at ./spec/presenters/spree/filters/quantified_price_range_presenter_spec.rb":{"source_file":"core/spec/presenters/spree/filters/quantified_price_range_presenter_spec.rb","duration":{"p50":"291514324","p90":"328682798"}},"Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb":{"source_file":"core/spec/models/spree/fulfilment_changer_spec.rb","duration":{"p50":"15603052073","p90":"19057737897"}},"Spree::Gateway at ./core/spec/models/spree/gateway_spec.rb":{"source_file":"core/spec/models/spree/gateway_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Gateway at ./spec/models/spree/gateway_spec.rb":{"source_file":"core/spec/models/spree/gateway_spec.rb","duration":{"p50":"510355638","p90":"552863137"}},"Spree::Gateway::Bogus at ./core/spec/models/spree/gateway/bogus_spec.rb":{"source_file":"core/spec/models/spree/gateway/bogus_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Gateway::Bogus at ./spec/models/spree/gateway/bogus_spec.rb":{"source_file":"core/spec/models/spree/gateway/bogus_spec.rb","duration":{"p50":"322174228","p90":"363251880"}},"Spree::GiftCard at ./core/spec/models/spree/gift_card_spec.rb":{"source_file":"core/spec/models/spree/gift_card_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::GiftCard at ./spec/models/spree/gift_card_spec.rb":{"source_file":"core/spec/models/spree/gift_card_spec.rb","duration":{"p50":"611010298","p90":"675273063"}},"Spree::GiftCardBatch at ./spec/models/spree/gift_card_batch_spec.rb":{"source_file":"core/spec/models/spree/gift_card_batch_spec.rb","duration":{"p50":"378076975","p90":"452643035"}},"Spree::GiftCards::Apply at ./core/spec/services/spree/gift_cards/apply_spec.rb":{"source_file":"core/spec/services/spree/gift_cards/apply_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::GiftCards::Apply at ./spec/services/spree/gift_cards/apply_spec.rb":{"source_file":"core/spec/services/spree/gift_cards/apply_spec.rb","duration":{"p50":"824785881","p90":"911532407"}},"Spree::GiftCards::BulkGenerateJob at ./core/spec/jobs/spree/gift_cards/bulk_generate_job_spec.rb":{"source_file":"core/spec/jobs/spree/gift_cards/bulk_generate_job_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::GiftCards::BulkGenerateJob at ./spec/jobs/spree/gift_cards/bulk_generate_job_spec.rb":{"source_file":"core/spec/jobs/spree/gift_cards/bulk_generate_job_spec.rb","duration":{"p50":"291514324","p90":"461787339"}},"Spree::GiftCards::Redeem at ./spec/services/spree/gift_cards/redeem_spec.rb":{"source_file":"core/spec/services/spree/gift_cards/redeem_spec.rb","duration":{"p50":"393507114","p90":"510355638"}},"Spree::GiftCards::Remove at ./core/spec/services/spree/gift_cards/remove_spec.rb":{"source_file":"core/spec/services/spree/gift_cards/remove_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::GiftCards::Remove at ./spec/services/spree/gift_cards/remove_spec.rb":{"source_file":"core/spec/services/spree/gift_cards/remove_spec.rb","duration":{"p50":"575426677","p90":"702832417"}},"Spree::HasImageAltText at ./core/spec/models/concerns/spree/has_image_alt_text_spec.rb":{"source_file":"core/spec/models/concerns/spree/has_image_alt_text_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::HasImageAltText at ./spec/models/concerns/spree/has_image_alt_text_spec.rb":{"source_file":"core/spec/models/concerns/spree/has_image_alt_text_spec.rb","duration":{"p50":"322174228","p90":"490343654"}},"Spree::Image at ./core/spec/models/spree/image_spec.rb":{"source_file":"core/spec/models/spree/image_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Image at ./spec/models/spree/image_spec.rb":{"source_file":"core/spec/models/spree/image_spec.rb","duration":{"p50":"1835643687","p90":"2333579147"}},"Spree::ImageMethods at ./core/spec/models/concerns/spree/image_methods_spec.rb":{"source_file":"core/spec/models/concerns/spree/image_methods_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::ImageMethods at ./spec/models/concerns/spree/image_methods_spec.rb":{"source_file":"core/spec/models/concerns/spree/image_methods_spec.rb","duration":{"p50":"841448222","p90":"967900360"}},"Spree::Images::SaveFromUrlJob at ./spec/jobs/spree/images/save_from_url_job_spec.rb":{"source_file":"core/spec/jobs/spree/images/save_from_url_job_spec.rb","duration":{"p50":"1113355619","p90":"1230452354"}},"Spree::ImagesHelper at ./spec/helpers/images_helper_spec.rb":{"source_file":"core/spec/helpers/images_helper_spec.rb","duration":{"p50":"2287369659","p90":"2579012406"}},"Spree::Import at ./core/spec/models/spree/import_spec.rb":{"source_file":"core/spec/models/spree/import_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Import at ./spec/models/spree/import_spec.rb":{"source_file":"core/spec/models/spree/import_spec.rb","duration":{"p50":"2738495104","p90":"2907840000"}},"Spree::ImportMapping at ./spec/models/spree/import_mapping_spec.rb":{"source_file":"core/spec/models/spree/import_mapping_spec.rb","duration":{"p50":"1048516738","p90":"1359864691"}},"Spree::ImportRow at ./core/spec/models/spree/import_row_spec.rb":{"source_file":"core/spec/models/spree/import_row_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::ImportRow at ./spec/models/spree/import_row_spec.rb":{"source_file":"core/spec/models/spree/import_row_spec.rb","duration":{"p50":"1628063388","p90":"1763664717"}},"Spree::Imports::CreateRowsJob at ./core/spec/jobs/spree/imports/create_rows_job_spec.rb":{"source_file":"core/spec/jobs/spree/imports/create_rows_job_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Imports::CreateRowsJob at ./spec/jobs/spree/imports/create_rows_job_spec.rb":{"source_file":"core/spec/jobs/spree/imports/create_rows_job_spec.rb","duration":{"p50":"510355638","p90":"564032090"}},"Spree::Imports::ProcessRowsJob at ./core/spec/jobs/spree/imports/process_rows_job_spec.rb":{"source_file":"core/spec/jobs/spree/imports/process_rows_job_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Imports::ProcessRowsJob at ./spec/jobs/spree/imports/process_rows_job_spec.rb":{"source_file":"core/spec/jobs/spree/imports/process_rows_job_spec.rb","duration":{"p50":"792444507","p90":"948734016"}},"Spree::Imports::RowProcessors::ProductVariant at ./core/spec/services/spree/imports/row_processors/product_variant_spec.rb":{"source_file":"core/spec/services/spree/imports/row_processors/product_variant_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Imports::RowProcessors::ProductVariant at ./spec/services/spree/imports/row_processors/product_variant_spec.rb":{"source_file":"core/spec/services/spree/imports/row_processors/product_variant_spec.rb","duration":{"p50":"9276174270","p90":"9849800553"}},"Spree::Integration at ./spec/models/spree/integration_spec.rb":{"source_file":"core/spec/models/spree/integration_spec.rb","duration":{"p50":"309541183","p90":"426282304"}},"Spree::InventoryUnit at ./spec/models/spree/inventory_unit_spec.rb":{"source_file":"core/spec/models/spree/inventory_unit_spec.rb","duration":{"p50":"11330020377","p90":"12273697282"}},"Spree::Invitation at ./core/spec/models/spree/invitation_spec.rb":{"source_file":"core/spec/models/spree/invitation_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Invitation at ./spec/models/spree/invitation_spec.rb":{"source_file":"core/spec/models/spree/invitation_spec.rb","duration":{"p50":"3925212689","p90":"4004509915"}},"Spree::InvitationEmailSubscriber at ./spec/subscribers/spree/invitation_email_subscriber_spec.rb":{"source_file":"core/spec/subscribers/spree/invitation_email_subscriber_spec.rb","duration":{"p50":"575426677","p90":"648794362"}},"Spree::InvitationMailer at ./spec/mailers/spree/invitation_mailer_spec.rb":{"source_file":"core/spec/mailers/spree/invitation_mailer_spec.rb","duration":{"p50":"717031051","p90":"776752537"}},"Spree::LegacyUser at ./core/spec/models/spree/admin_user_spec.rb":{"source_file":"core/spec/models/spree/admin_user_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::LegacyUser at ./core/spec/models/spree/user_spec.rb":{"source_file":"core/spec/models/spree/user_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::LegacyUser at ./spec/models/spree/admin_user_spec.rb":{"source_file":"core/spec/models/spree/admin_user_spec.rb","duration":{"p50":"2907840000","p90":"2966584242"}},"Spree::LegacyUser at ./spec/models/spree/user_spec.rb":{"source_file":"core/spec/models/spree/user_spec.rb","duration":{"p50":"808453487","p90":"4085409105"}},"Spree::LineItem at ./spec/models/spree/line_item_spec.rb":{"source_file":"core/spec/models/spree/line_item_spec.rb","duration":{"p50":"12774613405","p90":"14694371668"}},"Spree::LineItems::Create at ./core/spec/services/spree/line_items/create_spec.rb":{"source_file":"core/spec/services/spree/line_items/create_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::LineItems::Create at ./spec/services/spree/line_items/create_spec.rb":{"source_file":"core/spec/services/spree/line_items/create_spec.rb","duration":{"p50":"531184355","p90":"611010298"}},"Spree::LineItems::Destroy at ./spec/services/spree/line_items/destroy_spec.rb":{"source_file":"core/spec/services/spree/line_items/destroy_spec.rb","duration":{"p50":"1113355619","p90":"1280669775"}},"Spree::LineItems::Update at ./core/spec/services/spree/line_items/update_spec.rb":{"source_file":"core/spec/services/spree/line_items/update_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::LineItems::Update at ./spec/services/spree/line_items/update_spec.rb":{"source_file":"core/spec/services/spree/line_items/update_spec.rb","duration":{"p50":"1306541891","p90":"1595824509"}},"Spree::LocaleHelper at ./spec/helpers/locale_helper_spec.rb":{"source_file":"core/spec/helpers/locale_helper_spec.rb","duration":{"p50":"1332936677","p90":"1443956915"}},"Spree::Locales::SetFallbackLocaleForStore at ./spec/services/spree/locales/set_fallback_locale_for_store_spec.rb":{"source_file":"core/spec/services/spree/locales/set_fallback_locale_for_store_spec.rb","duration":{"p50":"911532407","p90":"1091308973"}},"Spree::LocalizedNumber at ./core/spec/lib/spree/localized_number_spec.rb":{"source_file":"core/spec/lib/spree/localized_number_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::LocalizedNumber at ./spec/lib/spree/localized_number_spec.rb":{"source_file":"core/spec/lib/spree/localized_number_spec.rb","duration":{"p50":"291514324","p90":"328682798"}},"Spree::LogEntry at ./spec/models/spree/log_entry_spec.rb":{"source_file":"core/spec/models/spree/log_entry_spec.rb","duration":{"p50":"315794540","p90":"426282304"}},"Spree::Metafield at ./spec/models/spree/metafield_spec.rb":{"source_file":"core/spec/models/spree/metafield_spec.rb","duration":{"p50":"598911084","p90":"675273063"}},"Spree::MetafieldDefinition at ./core/spec/models/spree/metafield_definition_spec.rb":{"source_file":"core/spec/models/spree/metafield_definition_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::MetafieldDefinition at ./spec/models/spree/metafield_definition_spec.rb":{"source_file":"core/spec/models/spree/metafield_definition_spec.rb","duration":{"p50":"342097053","p90":"409566990"}},"Spree::Metafields at ./core/spec/models/concerns/spree/metafields_spec.rb":{"source_file":"core/spec/models/concerns/spree/metafields_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Metafields at ./spec/models/concerns/spree/metafields_spec.rb":{"source_file":"core/spec/models/concerns/spree/metafields_spec.rb","duration":{"p50":"2111502692","p90":"2333579147"}},"Spree::Metafields::Boolean at ./spec/models/spree/metafields/boolean_spec.rb":{"source_file":"core/spec/models/spree/metafields/boolean_spec.rb","duration":{"p50":"297403503","p90":"328682798"}},"Spree::Metafields::Json at ./core/spec/models/spree/metafields/json_spec.rb":{"source_file":"core/spec/models/spree/metafields/json_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Metafields::Json at ./spec/models/spree/metafields/json_spec.rb":{"source_file":"core/spec/models/spree/metafields/json_spec.rb","duration":{"p50":"1048516738","p90":"1182204051"}},"Spree::Metafields::Number at ./core/spec/models/spree/metafields/number_spec.rb":{"source_file":"core/spec/models/spree/metafields/number_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Metafields::Number at ./spec/models/spree/metafields/number_spec.rb":{"source_file":"core/spec/models/spree/metafields/number_spec.rb","duration":{"p50":"541915353","p90":"688914943"}},"Spree::Metafields::RichText at ./core/spec/models/spree/metafields/rich_text_spec.rb":{"source_file":"core/spec/models/spree/metafields/rich_text_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Metafields::RichText at ./spec/models/spree/metafields/rich_text_spec.rb":{"source_file":"core/spec/models/spree/metafields/rich_text_spec.rb","duration":{"p50":"315794540","p90":"342097053"}},"Spree::Migrations at ./core/spec/lib/spree/migrations_spec.rb":{"source_file":"core/spec/lib/spree/migrations_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Migrations at ./spec/lib/spree/migrations_spec.rb":{"source_file":"core/spec/lib/spree/migrations_spec.rb","duration":{"p50":"309541183","p90":"426282304"}},"Spree::Money at ./core/spec/lib/spree/money_spec.rb":{"source_file":"core/spec/lib/spree/money_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Money at ./spec/lib/spree/money_spec.rb":{"source_file":"core/spec/lib/spree/money_spec.rb","duration":{"p50":"409566990","p90":"426282304"}},"Spree::Newsletter::Subscribe at ./spec/services/spree/newsletter/subscribe_spec.rb":{"source_file":"core/spec/services/spree/newsletter/subscribe_spec.rb","duration":{"p50":"401456752","p90":"443679807"}},"Spree::Newsletter::Verify at ./core/spec/services/spree/newsletter/verify_spec.rb":{"source_file":"core/spec/services/spree/newsletter/verify_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Newsletter::Verify at ./spec/services/spree/newsletter/verify_spec.rb":{"source_file":"core/spec/services/spree/newsletter/verify_spec.rb","duration":{"p50":"342097053","p90":"434894068"}},"Spree::NewsletterSubscriber at ./core/spec/models/spree/newsletter_subscriber_spec.rb":{"source_file":"core/spec/models/spree/newsletter_subscriber_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::NewsletterSubscriber at ./spec/models/spree/newsletter_subscriber_spec.rb":{"source_file":"core/spec/models/spree/newsletter_subscriber_spec.rb","duration":{"p50":"370590302","p90":"471116376"}},"Spree::OptionType at ./core/spec/models/spree/option_type_spec.rb":{"source_file":"core/spec/models/spree/option_type_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::OptionType at ./spec/models/spree/option_type_spec.rb":{"source_file":"core/spec/models/spree/option_type_spec.rb","duration":{"p50":"552863137","p90":"648794362"}},"Spree::OptionValue at ./core/spec/models/spree/option_value_spec.rb":{"source_file":"core/spec/models/spree/option_value_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::OptionValue at ./spec/models/spree/option_value_spec.rb":{"source_file":"core/spec/models/spree/option_value_spec.rb","duration":{"p50":"967900360","p90":"1113355619"}},"Spree::OptionValueVariant at ./core/spec/models/spree/option_value_variant_spec.rb":{"source_file":"core/spec/models/spree/option_value_variant_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::OptionValueVariant at ./spec/models/spree/option_value_variant_spec.rb":{"source_file":"core/spec/models/spree/option_value_variant_spec.rb","duration":{"p50":"461787339","p90":"587051459"}},"Spree::OptionValues::FindAvailable at ./spec/finders/spree/option_values/find_available_spec.rb":{"source_file":"core/spec/finders/spree/option_values/find_available_spec.rb","duration":{"p50":"2287369659","p90":"2793818237"}},"Spree::Order at ./core/spec/models/spree/order/callbacks_spec.rb":{"source_file":"core/spec/models/spree/order/callbacks_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Order at ./core/spec/models/spree/order/checkout_spec.rb":{"source_file":"core/spec/models/spree/order/checkout_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Order at ./core/spec/models/spree/order/finalizing_spec.rb":{"source_file":"core/spec/models/spree/order/finalizing_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Order at ./core/spec/models/spree/order/payment_spec.rb":{"source_file":"core/spec/models/spree/order/payment_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Order at ./core/spec/models/spree/order/risk_assessment_spec.rb":{"source_file":"core/spec/models/spree/order/risk_assessment_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Order at ./core/spec/models/spree/order/totals_spec.rb":{"source_file":"core/spec/models/spree/order/totals_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Order at ./core/spec/models/spree/order/updating_spec.rb":{"source_file":"core/spec/models/spree/order/updating_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Order at ./core/spec/models/spree/order/validations_spec.rb":{"source_file":"core/spec/models/spree/order/validations_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Order at ./spec/models/spree/order/address_spec.rb":{"source_file":"core/spec/models/spree/order/address_spec.rb","duration":{"p50":"702832417","p90":"824785881"}},"Spree::Order at ./spec/models/spree/order/adjustments_spec.rb":{"source_file":"core/spec/models/spree/order/adjustments_spec.rb","duration":{"p50":"776752537","p90":"893482261"}},"Spree::Order at ./spec/models/spree/order/callbacks_spec.rb":{"source_file":"core/spec/models/spree/order/callbacks_spec.rb","duration":{"p50":"370590302","p90":"401456752"}},"Spree::Order at ./spec/models/spree/order/checkout_spec.rb":{"source_file":"core/spec/models/spree/order/checkout_spec.rb","duration":{"p50":"11105663538","p90":"11792423004"}},"Spree::Order at ./spec/models/spree/order/currency_updater_spec.rb":{"source_file":"core/spec/models/spree/order/currency_updater_spec.rb","duration":{"p50":"858447176","p90":"948734016"}},"Spree::Order at ./spec/models/spree/order/digital_spec.rb":{"source_file":"core/spec/models/spree/order/digital_spec.rb","duration":{"p50":"6735813161","p90":"7594638512"}},"Spree::Order at ./spec/models/spree/order/finalizing_spec.rb":{"source_file":"core/spec/models/spree/order/finalizing_spec.rb","duration":{"p50":"461787339","p90":"541915353"}},"Spree::Order at ./spec/models/spree/order/payment_spec.rb":{"source_file":"core/spec/models/spree/order/payment_spec.rb","duration":{"p50":"3925212689","p90":"4085409105"}},"Spree::Order at ./spec/models/spree/order/risk_assessment_spec.rb":{"source_file":"core/spec/models/spree/order/risk_assessment_spec.rb","duration":{"p50":"1230452354","p90":"1306541891"}},"Spree::Order at ./spec/models/spree/order/shipments_spec.rb":{"source_file":"core/spec/models/spree/order/shipments_spec.rb","duration":{"p50":"717031051","p90":"792444507"}},"Spree::Order at ./spec/models/spree/order/state_machine_spec.rb":{"source_file":"core/spec/models/spree/order/state_machine_spec.rb","duration":{"p50":"3150033867","p90":"3551667475"}},"Spree::Order at ./spec/models/spree/order/tax_spec.rb":{"source_file":"core/spec/models/spree/order/tax_spec.rb","duration":{"p50":"417841070","p90":"541915353"}},"Spree::Order at ./spec/models/spree/order/totals_spec.rb":{"source_file":"core/spec/models/spree/order/totals_spec.rb","duration":{"p50":"575426677","p90":"688914943"}},"Spree::Order at ./spec/models/spree/order/updating_spec.rb":{"source_file":"core/spec/models/spree/order/updating_spec.rb","duration":{"p50":"328682798","p90":"461787339"}},"Spree::Order at ./spec/models/spree/order/validations_spec.rb":{"source_file":"core/spec/models/spree/order/validations_spec.rb","duration":{"p50":"315794540","p90":"342097053"}},"Spree::Order at ./spec/models/spree/order_spec.rb":{"source_file":"core/spec/models/spree/order_spec.rb","duration":{"p50":"45037788250","p90":"53920345630"}},"Spree::OrderContents at ./spec/models/spree/order_contents_spec.rb":{"source_file":"core/spec/models/spree/order_contents_spec.rb","duration":{"p50":"13564578512","p90":"14694371668"}},"Spree::OrderInventory at ./spec/models/spree/order_inventory_spec.rb":{"source_file":"core/spec/models/spree/order_inventory_spec.rb","duration":{"p50":"6217922653","p90":"7010716259"}},"Spree::OrderMerger at ./spec/models/spree/order_merger_spec.rb":{"source_file":"core/spec/models/spree/order_merger_spec.rb","duration":{"p50":"2428817558","p90":"2631113667"}},"Spree::OrderPromotion at ./spec/models/spree/order_promotion_spec.rb":{"source_file":"core/spec/models/spree/order_promotion_spec.rb","duration":{"p50":"1564224024","p90":"1799294307"}},"Spree::OrderUpdater at ./spec/models/spree/order_updater_spec.rb":{"source_file":"core/spec/models/spree/order_updater_spec.rb","duration":{"p50":"2579012406","p90":"2684267478"}},"Spree::Orders::Approve at ./core/spec/services/spree/orders/approve_spec.rb":{"source_file":"core/spec/services/spree/orders/approve_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Orders::Approve at ./spec/services/spree/orders/approve_spec.rb":{"source_file":"core/spec/services/spree/orders/approve_spec.rb","duration":{"p50":"1443956915","p90":"1660953558"}},"Spree::Orders::Cancel at ./core/spec/services/spree/orders/cancel_spec.rb":{"source_file":"core/spec/services/spree/orders/cancel_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Orders::Cancel at ./spec/services/spree/orders/cancel_spec.rb":{"source_file":"core/spec/services/spree/orders/cancel_spec.rb","duration":{"p50":"2197677682","p90":"2380722160"}},"Spree::Orders::CreateUserAccount at ./spec/services/spree/orders/create_user_account_spec.rb":{"source_file":"core/spec/services/spree/orders/create_user_account_spec.rb","duration":{"p50":"1332936677","p90":"1502887919"}},"Spree::Payment at ./core/spec/models/spree/payment_spec.rb":{"source_file":"core/spec/models/spree/payment_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Payment at ./spec/models/spree/payment_spec.rb":{"source_file":"core/spec/models/spree/payment_spec.rb","duration":{"p50":"9092487651","p90":"9849800553"}},"Spree::Payment::CustomEvents at ./core/spec/models/spree/payment/custom_events_spec.rb":{"source_file":"core/spec/models/spree/payment/custom_events_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Payment::CustomEvents at ./spec/models/spree/payment/custom_events_spec.rb":{"source_file":"core/spec/models/spree/payment/custom_events_spec.rb","duration":{"p50":"1443956915","p90":"1660953558"}},"Spree::Payment::GatewayOptions at ./spec/models/spree/payment/gateway_options_spec.rb":{"source_file":"core/spec/models/spree/payment/gateway_options_spec.rb","duration":{"p50":"328682798","p90":"378076975"}},"Spree::PaymentMethod at ./core/spec/models/spree/payment_method_spec.rb":{"source_file":"core/spec/models/spree/payment_method_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::PaymentMethod at ./spec/models/spree/payment_method_spec.rb":{"source_file":"core/spec/models/spree/payment_method_spec.rb","duration":{"p50":"1799294307","p90":"1988534370"}},"Spree::PaymentMethod::StoreCredit at ./spec/models/spree/payment_method/store_credit_spec.rb":{"source_file":"core/spec/models/spree/payment_method/store_credit_spec.rb","duration":{"p50":"2197677682","p90":"2793818237"}},"Spree::PaymentSource at ./core/spec/models/spree/payment_source_spec.rb":{"source_file":"core/spec/models/spree/payment_source_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::PaymentSource at ./spec/models/spree/payment_source_spec.rb":{"source_file":"core/spec/models/spree/payment_source_spec.rb","duration":{"p50":"328682798","p90":"349008105"}},"Spree::Payments::Create at ./spec/services/spree/payments/create_spec.rb":{"source_file":"core/spec/services/spree/payments/create_spec.rb","duration":{"p50":"2477884579","p90":"2850259010"}},"Spree::PermissionConfiguration at ./spec/lib/spree/core/permission_configuration_spec.rb":{"source_file":"core/spec/lib/spree/core/permission_configuration_spec.rb","duration":{"p50":"328682798","p90":"490343654"}},"Spree::PermissionSets::Base at ./spec/models/spree/permission_sets/base_spec.rb":{"source_file":"core/spec/models/spree/permission_sets/base_spec.rb","duration":{"p50":"322174228","p90":"356058774"}},"Spree::PermissionSets::DefaultCustomer at ./core/spec/models/spree/permission_sets/default_customer_spec.rb":{"source_file":"core/spec/models/spree/permission_sets/default_customer_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::PermissionSets::DefaultCustomer at ./spec/models/spree/permission_sets/default_customer_spec.rb":{"source_file":"core/spec/models/spree/permission_sets/default_customer_spec.rb","duration":{"p50":"731516527","p90":"824785881"}},"Spree::PermissionSets::OrderManagement at ./core/spec/models/spree/permission_sets/order_management_spec.rb":{"source_file":"core/spec/models/spree/permission_sets/order_management_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::PermissionSets::OrderManagement at ./spec/models/spree/permission_sets/order_management_spec.rb":{"source_file":"core/spec/models/spree/permission_sets/order_management_spec.rb","duration":{"p50":"393507114","p90":"564032090"}},"Spree::PermissionSets::ProductManagement at ./spec/models/spree/permission_sets/product_management_spec.rb":{"source_file":"core/spec/models/spree/permission_sets/product_management_spec.rb","duration":{"p50":"363251880","p90":"417841070"}},"Spree::PermissionSets::SuperUser at ./core/spec/models/spree/permission_sets/super_user_spec.rb":{"source_file":"core/spec/models/spree/permission_sets/super_user_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::PermissionSets::SuperUser at ./spec/models/spree/permission_sets/super_user_spec.rb":{"source_file":"core/spec/models/spree/permission_sets/super_user_spec.rb","duration":{"p50":"401456752","p90":"461787339"}},"Spree::Policy at ./spec/models/spree/policy_spec.rb":{"source_file":"core/spec/models/spree/policy_spec.rb","duration":{"p50":"1415363709","p90":"1628063388"}},"Spree::Post at ./spec/models/spree/post_spec.rb":{"source_file":"core/spec/models/spree/post_spec.rb","duration":{"p50":"761371298","p90":"841448222"}},"Spree::PostCategory at ./core/spec/models/spree/post_category_spec.rb":{"source_file":"core/spec/models/spree/post_category_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::PostCategory at ./spec/models/spree/post_category_spec.rb":{"source_file":"core/spec/models/spree/post_category_spec.rb","duration":{"p50":"531184355","p90":"648794362"}},"Spree::Preference at ./spec/models/spree/preference_spec.rb":{"source_file":"core/spec/models/spree/preference_spec.rb","duration":{"p50":"328682798","p90":"356058774"}},"Spree::Preferences::Configuration at ./core/spec/models/spree/preferences/configuration_spec.rb":{"source_file":"core/spec/models/spree/preferences/configuration_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Preferences::Configuration at ./spec/models/spree/preferences/configuration_spec.rb":{"source_file":"core/spec/models/spree/preferences/configuration_spec.rb","duration":{"p50":"291514324","p90":"370590302"}},"Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb":{"source_file":"core/spec/models/spree/preferences/preferable_spec.rb","duration":{"p50":"417841070","p90":"443679807"}},"Spree::Preferences::RuntimeConfiguration at ./spec/models/spree/preferences/runtime_configuration_spec.rb":{"source_file":"core/spec/models/spree/preferences/runtime_configuration_spec.rb","duration":{"p50":"297403503","p90":"315794540"}},"Spree::Preferences::ScopedStore at ./spec/models/spree/preferences/scoped_store_spec.rb":{"source_file":"core/spec/models/spree/preferences/scoped_store_spec.rb","duration":{"p50":"303411654","p90":"385714894"}},"Spree::Preferences::Store at ./core/spec/models/spree/preferences/store_spec.rb":{"source_file":"core/spec/models/spree/preferences/store_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Preferences::Store at ./spec/models/spree/preferences/store_spec.rb":{"source_file":"core/spec/models/spree/preferences/store_spec.rb","duration":{"p50":"303411654","p90":"349008105"}},"Spree::Price at ./core/spec/models/spree/price_spec.rb":{"source_file":"core/spec/models/spree/price_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Price at ./spec/models/spree/price_spec.rb":{"source_file":"core/spec/models/spree/price_spec.rb","duration":{"p50":"3412400051","p90":"4004509915"}},"Spree::PriceList at ./core/spec/models/spree/price_list_spec.rb":{"source_file":"core/spec/models/spree/price_list_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::PriceList at ./spec/models/spree/price_list_spec.rb":{"source_file":"core/spec/models/spree/price_list_spec.rb","duration":{"p50":"10251792209","p90":"11330020377"}},"Spree::PriceRules::CustomerGroupRule at ./core/spec/models/spree/price_rules/customer_group_rule_spec.rb":{"source_file":"core/spec/models/spree/price_rules/customer_group_rule_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::PriceRules::CustomerGroupRule at ./spec/models/spree/price_rules/customer_group_rule_spec.rb":{"source_file":"core/spec/models/spree/price_rules/customer_group_rule_spec.rb","duration":{"p50":"1359864691","p90":"1564224024"}},"Spree::PriceRules::UserRule at ./spec/models/spree/price_rules/user_rule_spec.rb":{"source_file":"core/spec/models/spree/price_rules/user_rule_spec.rb","duration":{"p50":"1048516738","p90":"1255309977"}},"Spree::PriceRules::VolumeRule at ./spec/models/spree/price_rules/volume_rule_spec.rb":{"source_file":"core/spec/models/spree/price_rules/volume_rule_spec.rb","duration":{"p50":"987453902","p90":"1091308973"}},"Spree::PriceRules::ZoneRule at ./spec/models/spree/price_rules/zone_rule_spec.rb":{"source_file":"core/spec/models/spree/price_rules/zone_rule_spec.rb","duration":{"p50":"1048516738","p90":"1182204051"}},"Spree::Pricing::Context at ./spec/lib/spree/core/pricing/context_spec.rb":{"source_file":"core/spec/lib/spree/core/pricing/context_spec.rb","duration":{"p50":"3623418333","p90":"4167942623"}},"Spree::Pricing::Resolver at ./core/spec/lib/spree/pricing/resolver_spec.rb":{"source_file":"core/spec/lib/spree/pricing/resolver_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Pricing::Resolver at ./spec/lib/spree/pricing/resolver_spec.rb":{"source_file":"core/spec/lib/spree/pricing/resolver_spec.rb","duration":{"p50":"4004509915","p90":"4425682652"}},"Spree::Product at ./core/spec/models/spree/product/normalizes_spec.rb":{"source_file":"core/spec/models/spree/product/normalizes_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Product at ./core/spec/models/spree/product_spec.rb":{"source_file":"core/spec/models/spree/product_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Product at ./spec/models/spree/product/normalizes_spec.rb":{"source_file":"core/spec/models/spree/product/normalizes_spec.rb","duration":{"p50":"500249586","p90":"587051459"}},"Spree::Product at ./spec/models/spree/product_spec.rb":{"source_file":"core/spec/models/spree/product_spec.rb","duration":{"p50":"22364581883","p90":"28431183178"}},"Spree::Product::Slugs at ./core/spec/models/spree/product/slugs_spec.rb":{"source_file":"core/spec/models/spree/product/slugs_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Product::Slugs at ./spec/models/spree/product/slugs_spec.rb":{"source_file":"core/spec/models/spree/product/slugs_spec.rb","duration":{"p50":"4252143484","p90":"4989963218"}},"Spree::ProductMetricsSubscriber at ./core/spec/subscribers/spree/product_metrics_subscriber_spec.rb":{"source_file":"core/spec/subscribers/spree/product_metrics_subscriber_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::ProductMetricsSubscriber at ./spec/subscribers/spree/product_metrics_subscriber_spec.rb":{"source_file":"core/spec/subscribers/spree/product_metrics_subscriber_spec.rb","duration":{"p50":"1502887919","p90":"1628063388"}},"Spree::ProductProperties::FindAvailable at ./spec/finders/spree/product_properties/find_available_spec.rb":{"source_file":"core/spec/finders/spree/product_properties/find_available_spec.rb","duration":{"p50":"1027754031","p90":"1206086961"}},"Spree::ProductProperty at ./core/spec/models/spree/product_property_spec.rb":{"source_file":"core/spec/models/spree/product_property_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::ProductProperty at ./spec/models/spree/product_property_spec.rb":{"source_file":"core/spec/models/spree/product_property_spec.rb","duration":{"p50":"967900360","p90":"1069698895"}},"Spree::Products::AutoMatchTaxons at ./core/spec/services/spree/products/auto_match_taxons_spec.rb":{"source_file":"core/spec/services/spree/products/auto_match_taxons_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Products::AutoMatchTaxons at ./spec/services/spree/products/auto_match_taxons_spec.rb":{"source_file":"core/spec/services/spree/products/auto_match_taxons_spec.rb","duration":{"p50":"731516527","p90":"841448222"}},"Spree::Products::Duplicator at ./core/spec/services/spree/products/duplicator_spec.rb":{"source_file":"core/spec/services/spree/products/duplicator_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Products::Duplicator at ./spec/services/spree/products/duplicator_spec.rb":{"source_file":"core/spec/services/spree/products/duplicator_spec.rb","duration":{"p50":"6602430722","p90":"7296838747"}},"Spree::Products::Find at ./spec/finders/spree/products/find_spec.rb":{"source_file":"core/spec/finders/spree/products/find_spec.rb","duration":{"p50":"16239846362","p90":"17592462461"}},"Spree::Products::PrepareNestedAttributes at ./spec/services/spree/products/prepare_nested_attributes_spec.rb":{"source_file":"core/spec/services/spree/products/prepare_nested_attributes_spec.rb","duration":{"p50":"7296838747","p90":"7594638512"}},"Spree::Products::RefreshMetricsJob at ./core/spec/jobs/spree/products/refresh_metrics_job_spec.rb":{"source_file":"core/spec/jobs/spree/products/refresh_metrics_job_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Products::RefreshMetricsJob at ./spec/jobs/spree/products/refresh_metrics_job_spec.rb":{"source_file":"core/spec/jobs/spree/products/refresh_metrics_job_spec.rb","duration":{"p50":"717031051","p90":"808453487"}},"Spree::Products::TouchTaxonsJob at ./core/spec/jobs/spree/products/touch_taxons_job_spec.rb":{"source_file":"core/spec/jobs/spree/products/touch_taxons_job_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Products::TouchTaxonsJob at ./spec/jobs/spree/products/touch_taxons_job_spec.rb":{"source_file":"core/spec/jobs/spree/products/touch_taxons_job_spec.rb","duration":{"p50":"611010298","p90":"648794362"}},"Spree::ProductsHelper at ./core/spec/helpers/products_helper_spec.rb":{"source_file":"core/spec/helpers/products_helper_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::ProductsHelper at ./spec/helpers/products_helper_spec.rb":{"source_file":"core/spec/helpers/products_helper_spec.rb","duration":{"p50":"2738495104","p90":"3087656959"}},"Spree::Promotion at ./core/spec/models/spree/promotion_spec.rb":{"source_file":"core/spec/models/spree/promotion_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Promotion at ./spec/models/spree/promotion_spec.rb":{"source_file":"core/spec/models/spree/promotion_spec.rb","duration":{"p50":"5193614405","p90":"5974106452"}},"Spree::Promotion::Actions::CreateAdjustment at ./spec/models/spree/promotion/actions/create_adjustment_spec.rb":{"source_file":"core/spec/models/spree/promotion/actions/create_adjustment_spec.rb","duration":{"p50":"1595824509","p90":"1988534370"}},"Spree::Promotion::Actions::CreateItemAdjustments at ./spec/models/spree/promotion/actions/create_item_adjustments_spec.rb":{"source_file":"core/spec/models/spree/promotion/actions/create_item_adjustments_spec.rb","duration":{"p50":"3150033867","p90":"3623418333"}},"Spree::Promotion::Actions::CreateLineItems at ./spec/models/spree/promotion/actions/create_line_items_spec.rb":{"source_file":"core/spec/models/spree/promotion/actions/create_line_items_spec.rb","duration":{"p50":"2684267478","p90":"3150033867"}},"Spree::Promotion::Actions::FreeShipping at ./spec/models/spree/promotion/actions/free_shipping_spec.rb":{"source_file":"core/spec/models/spree/promotion/actions/free_shipping_spec.rb","duration":{"p50":"1564224024","p90":"1910560275"}},"Spree::Promotion::Rules::Country at ./spec/models/spree/promotion/rules/country_spec.rb":{"source_file":"core/spec/models/spree/promotion/rules/country_spec.rb","duration":{"p50":"1660953558","p90":"1835643687"}},"Spree::Promotion::Rules::Currency at ./spec/models/spree/promotion/rules/currency_spec.rb":{"source_file":"core/spec/models/spree/promotion/rules/currency_spec.rb","duration":{"p50":"342097053","p90":"500249586"}},"Spree::Promotion::Rules::CustomerGroup at ./spec/models/spree/promotion/rules/customer_group_spec.rb":{"source_file":"core/spec/models/spree/promotion/rules/customer_group_spec.rb","duration":{"p50":"370590302","p90":"500249586"}},"Spree::Promotion::Rules::FirstOrder at ./core/spec/models/spree/promotion/rules/first_order_spec.rb":{"source_file":"core/spec/models/spree/promotion/rules/first_order_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Promotion::Rules::FirstOrder at ./spec/models/spree/promotion/rules/first_order_spec.rb":{"source_file":"core/spec/models/spree/promotion/rules/first_order_spec.rb","duration":{"p50":"1473127762","p90":"1628063388"}},"Spree::Promotion::Rules::ItemTotal at ./core/spec/models/spree/promotion/rules/item_total_spec.rb":{"source_file":"core/spec/models/spree/promotion/rules/item_total_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Promotion::Rules::ItemTotal at ./spec/models/spree/promotion/rules/item_total_spec.rb":{"source_file":"core/spec/models/spree/promotion/rules/item_total_spec.rb","duration":{"p50":"434894068","p90":"575426677"}},"Spree::Promotion::Rules::OneUsePerUser at ./core/spec/models/spree/promotion/rules/one_use_per_user_spec.rb":{"source_file":"core/spec/models/spree/promotion/rules/one_use_per_user_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Promotion::Rules::OneUsePerUser at ./spec/models/spree/promotion/rules/one_use_per_user_spec.rb":{"source_file":"core/spec/models/spree/promotion/rules/one_use_per_user_spec.rb","duration":{"p50":"393507114","p90":"500249586"}},"Spree::Promotion::Rules::OptionValue at ./spec/models/spree/promotion/rules/option_value_spec.rb":{"source_file":"core/spec/models/spree/promotion/rules/option_value_spec.rb","duration":{"p50":"1069698895","p90":"1158794069"}},"Spree::Promotion::Rules::Product at ./spec/models/spree/promotion/rules/product_spec.rb":{"source_file":"core/spec/models/spree/promotion/rules/product_spec.rb","duration":{"p50":"4004509915","p90":"4515090383"}},"Spree::Promotion::Rules::Taxon at ./spec/models/spree/promotion/rules/taxon_spec.rb":{"source_file":"core/spec/models/spree/promotion/rules/taxon_spec.rb","duration":{"p50":"3087656959","p90":"3481337426"}},"Spree::Promotion::Rules::User at ./core/spec/models/spree/promotion/rules/user_spec.rb":{"source_file":"core/spec/models/spree/promotion/rules/user_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Promotion::Rules::User at ./spec/models/spree/promotion/rules/user_spec.rb":{"source_file":"core/spec/models/spree/promotion/rules/user_spec.rb","duration":{"p50":"461787339","p90":"520665853"}},"Spree::Promotion::Rules::UserLoggedIn at ./core/spec/models/spree/promotion/rules/user_logged_in_spec.rb":{"source_file":"core/spec/models/spree/promotion/rules/user_logged_in_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Promotion::Rules::UserLoggedIn at ./spec/models/spree/promotion/rules/user_logged_in_spec.rb":{"source_file":"core/spec/models/spree/promotion/rules/user_logged_in_spec.rb","duration":{"p50":"309541183","p90":"328682798"}},"Spree::PromotionAction at ./core/spec/models/spree/promotion_action_spec.rb":{"source_file":"core/spec/models/spree/promotion_action_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::PromotionAction at ./spec/models/spree/promotion_action_spec.rb":{"source_file":"core/spec/models/spree/promotion_action_spec.rb","duration":{"p50":"297403503","p90":"335322854"}},"Spree::PromotionCategory at ./spec/models/spree/promotion_category_spec.rb":{"source_file":"core/spec/models/spree/promotion_category_spec.rb","duration":{"p50":"291514324","p90":"349008105"}},"Spree::PromotionHandler::Cart at ./spec/models/spree/promotion_handler/cart_spec.rb":{"source_file":"core/spec/models/spree/promotion_handler/cart_spec.rb","duration":{"p50":"1206086961","p90":"1280669775"}},"Spree::PromotionHandler::Coupon at ./spec/models/spree/promotion_handler/coupon_spec.rb":{"source_file":"core/spec/models/spree/promotion_handler/coupon_spec.rb","duration":{"p50":"11105663538","p90":"12030653772"}},"Spree::PromotionHandler::Coupon at ./spec/models/spree/promotion_handler/coupon_with_gift_card_spec.rb":{"source_file":"core/spec/models/spree/promotion_handler/coupon_with_gift_card_spec.rb","duration":{"p50":"1230452354","p90":"1359864691"}},"Spree::PromotionHandler::FreeShipping at ./core/spec/models/spree/promotion_handler/free_shipping_spec.rb":{"source_file":"core/spec/models/spree/promotion_handler/free_shipping_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::PromotionHandler::FreeShipping at ./spec/models/spree/promotion_handler/free_shipping_spec.rb":{"source_file":"core/spec/models/spree/promotion_handler/free_shipping_spec.rb","duration":{"p50":"761371298","p90":"893482261"}},"Spree::PromotionHandler::Page at ./core/spec/models/spree/promotion_handler/page_spec.rb":{"source_file":"core/spec/models/spree/promotion_handler/page_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::PromotionHandler::Page at ./spec/models/spree/promotion_handler/page_spec.rb":{"source_file":"core/spec/models/spree/promotion_handler/page_spec.rb","duration":{"p50":"858447176","p90":"948734016"}},"Spree::PromotionHandler::PromotionDuplicator at ./core/spec/models/spree/promotion_handler/promotion_duplicator_spec.rb":{"source_file":"core/spec/models/spree/promotion_handler/promotion_duplicator_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::PromotionHandler::PromotionDuplicator at ./spec/models/spree/promotion_handler/promotion_duplicator_spec.rb":{"source_file":"core/spec/models/spree/promotion_handler/promotion_duplicator_spec.rb","duration":{"p50":"3213670915","p90":"3696618704"}},"Spree::PromotionRule at ./spec/models/spree/promotion_rule_spec.rb":{"source_file":"core/spec/models/spree/promotion_rule_spec.rb","duration":{"p50":"335322854","p90":"356058774"}},"Spree::Property at ./core/spec/models/spree/property_spec.rb":{"source_file":"core/spec/models/spree/property_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Property at ./spec/models/spree/property_spec.rb":{"source_file":"core/spec/models/spree/property_spec.rb","duration":{"p50":"2197677682","p90":"2428817558"}},"Spree::Prototype at ./spec/models/spree/prototype_spec.rb":{"source_file":"core/spec/models/spree/prototype_spec.rb","duration":{"p50":"385714894","p90":"417841070"}},"Spree::Publishable at ./spec/models/concerns/spree/publishable_spec.rb":{"source_file":"core/spec/models/concerns/spree/publishable_spec.rb","duration":{"p50":"393507114","p90":"461787339"}},"Spree::RansackConfiguration at ./core/spec/lib/spree/core/ransack_configuration_spec.rb":{"source_file":"core/spec/lib/spree/core/ransack_configuration_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::RansackConfiguration at ./spec/lib/spree/core/ransack_configuration_spec.rb":{"source_file":"core/spec/lib/spree/core/ransack_configuration_spec.rb","duration":{"p50":"349008105","p90":"409566990"}},"Spree::RansackableAttributes at ./spec/models/spree/concerns/ransackable_attributes_spec.rb":{"source_file":"core/spec/models/spree/concerns/ransackable_attributes_spec.rb","duration":{"p50":"309541183","p90":"452643035"}},"Spree::Refund at ./spec/models/spree/refund_spec.rb":{"source_file":"core/spec/models/spree/refund_spec.rb","duration":{"p50":"3551667475","p90":"3771297869"}},"Spree::RefundReason at ./spec/models/spree/refund_reason_spec.rb":{"source_file":"core/spec/models/spree/refund_reason_spec.rb","duration":{"p50":"315794540","p90":"349008105"}},"Spree::Reimbursement at ./spec/models/spree/reimbursement_spec.rb":{"source_file":"core/spec/models/spree/reimbursement_spec.rb","duration":{"p50":"9654754998","p90":"10670190014"}},"Spree::Reimbursement::Credit at ./core/spec/models/spree/reimbursement/credit_spec.rb":{"source_file":"core/spec/models/spree/reimbursement/credit_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Reimbursement::Credit at ./spec/models/spree/reimbursement/credit_spec.rb":{"source_file":"core/spec/models/spree/reimbursement/credit_spec.rb","duration":{"p50":"875789543","p90":"929947204"}},"Spree::Reimbursement::ReimbursementTypeEngine at ./spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb":{"source_file":"core/spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb","duration":{"p50":"10458899123","p90":"11105663538"}},"Spree::Reimbursement::ReimbursementTypeValidator at ./spec/models/spree/reimbursement/reimbursement_type_validator_spec.rb":{"source_file":"core/spec/models/spree/reimbursement/reimbursement_type_validator_spec.rb","duration":{"p50":"3623418333","p90":"3696618704"}},"Spree::ReimbursementPerformer at ./spec/models/spree/reimbursement_performer_spec.rb":{"source_file":"core/spec/models/spree/reimbursement_performer_spec.rb","duration":{"p50":"1359864691","p90":"1763664717"}},"Spree::ReimbursementTaxCalculator at ./spec/models/spree/reimbursement_tax_calculator_spec.rb":{"source_file":"core/spec/models/spree/reimbursement_tax_calculator_spec.rb","duration":{"p50":"2154159312","p90":"2242075211"}},"Spree::ReimbursementType::Credit at ./core/spec/models/spree/reimbursement_type/credit_spec.rb":{"source_file":"core/spec/models/spree/reimbursement_type/credit_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::ReimbursementType::Credit at ./spec/models/spree/reimbursement_type/credit_spec.rb":{"source_file":"core/spec/models/spree/reimbursement_type/credit_spec.rb","duration":{"p50":"1949157452","p90":"2333579147"}},"Spree::ReimbursementType::Exchange at ./core/spec/models/spree/reimbursement_type/exchange_spec.rb":{"source_file":"core/spec/models/spree/reimbursement_type/exchange_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::ReimbursementType::Exchange at ./spec/models/spree/reimbursement_type/exchange_spec.rb":{"source_file":"core/spec/models/spree/reimbursement_type/exchange_spec.rb","duration":{"p50":"1949157452","p90":"2069690757"}},"Spree::ReimbursementType::OriginalPayment at ./spec/models/spree/reimbursement_type/original_payment_spec.rb":{"source_file":"core/spec/models/spree/reimbursement_type/original_payment_spec.rb","duration":{"p50":"2477884579","p90":"2738495104"}},"Spree::ReimbursementType::StoreCredit at ./core/spec/models/spree/reimbursement_type/store_credit_spec.rb":{"source_file":"core/spec/models/spree/reimbursement_type/store_credit_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::ReimbursementType::StoreCredit at ./spec/models/spree/reimbursement_type/store_credit_spec.rb":{"source_file":"core/spec/models/spree/reimbursement_type/store_credit_spec.rb","duration":{"p50":"7748065553","p90":"8562965265"}},"Spree::Report at ./core/spec/models/spree/report_spec.rb":{"source_file":"core/spec/models/spree/report_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Report at ./spec/models/spree/report_spec.rb":{"source_file":"core/spec/models/spree/report_spec.rb","duration":{"p50":"1158794069","p90":"1280669775"}},"Spree::ReportLineItem at ./core/spec/models/spree/report_line_item_spec.rb":{"source_file":"core/spec/models/spree/report_line_item_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::ReportLineItem at ./spec/models/spree/report_line_item_spec.rb":{"source_file":"core/spec/models/spree/report_line_item_spec.rb","duration":{"p50":"297403503","p90":"315794540"}},"Spree::ReportLineItems::ProductsPerformance at ./core/spec/models/spree/report_line_items/products_performance_spec.rb":{"source_file":"core/spec/models/spree/report_line_items/products_performance_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::ReportLineItems::ProductsPerformance at ./spec/models/spree/report_line_items/products_performance_spec.rb":{"source_file":"core/spec/models/spree/report_line_items/products_performance_spec.rb","duration":{"p50":"2028706782","p90":"2111502692"}},"Spree::ReportLineItems::SalesTotal at ./spec/models/spree/report_line_items/sales_total_spec.rb":{"source_file":"core/spec/models/spree/report_line_items/sales_total_spec.rb","duration":{"p50":"1728740663","p90":"1910560275"}},"Spree::ReportMailer at ./core/spec/mailers/spree/report_mailer_spec.rb":{"source_file":"core/spec/mailers/spree/report_mailer_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::ReportMailer at ./spec/mailers/spree/report_mailer_spec.rb":{"source_file":"core/spec/mailers/spree/report_mailer_spec.rb","duration":{"p50":"434894068","p90":"480633878"}},"Spree::ReportSubscriber at ./core/spec/subscribers/spree/report_subscriber_spec.rb":{"source_file":"core/spec/subscribers/spree/report_subscriber_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::ReportSubscriber at ./spec/subscribers/spree/report_subscriber_spec.rb":{"source_file":"core/spec/subscribers/spree/report_subscriber_spec.rb","duration":{"p50":"328682798","p90":"342097053"}},"Spree::Reports::ProductsPerformance at ./core/spec/models/spree/reports/products_performance_spec.rb":{"source_file":"core/spec/models/spree/reports/products_performance_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Reports::ProductsPerformance at ./spec/models/spree/reports/products_performance_spec.rb":{"source_file":"core/spec/models/spree/reports/products_performance_spec.rb","duration":{"p50":"2527942853","p90":"2793818237"}},"Spree::Reports::SalesTotal at ./spec/models/spree/reports/sales_total_spec.rb":{"source_file":"core/spec/models/spree/reports/sales_total_spec.rb","duration":{"p50":"1988534370","p90":"2197677682"}},"Spree::ReturnAuthorization at ./spec/models/spree/return_authorization_spec.rb":{"source_file":"core/spec/models/spree/return_authorization_spec.rb","duration":{"p50":"15603052073","p90":"17947865743"}},"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb":{"source_file":"core/spec/models/spree/return_item_spec.rb","duration":{"p50":"47822865191","p90":"52852616014"}},"Spree::ReturnItem::EligibilityValidator::Default at ./core/spec/models/spree/return_item/eligibility_validator/default_spec.rb":{"source_file":"core/spec/models/spree/return_item/eligibility_validator/default_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::ReturnItem::EligibilityValidator::Default at ./spec/models/spree/return_item/eligibility_validator/default_spec.rb":{"source_file":"core/spec/models/spree/return_item/eligibility_validator/default_spec.rb","duration":{"p50":"3087656959","p90":"3278593560"}},"Spree::ReturnItem::EligibilityValidator::InventoryShipped at ./spec/models/spree/return_item/eligibility_validator/inventory_shipped_spec.rb":{"source_file":"core/spec/models/spree/return_item/eligibility_validator/inventory_shipped_spec.rb","duration":{"p50":"3026515237","p90":"3344827773"}},"Spree::ReturnItem::EligibilityValidator::NoReimbursements at ./spec/models/spree/return_item/eligibility_validator/no_reimbursements_spec.rb":{"source_file":"core/spec/models/spree/return_item/eligibility_validator/no_reimbursements_spec.rb","duration":{"p50":"3213670915","p90":"3551667475"}},"Spree::ReturnItem::EligibilityValidator::OrderCompleted at ./core/spec/models/spree/return_item/eligibility_validator/order_completed_spec.rb":{"source_file":"core/spec/models/spree/return_item/eligibility_validator/order_completed_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::ReturnItem::EligibilityValidator::OrderCompleted at ./spec/models/spree/return_item/eligibility_validator/order_completed_spec.rb":{"source_file":"core/spec/models/spree/return_item/eligibility_validator/order_completed_spec.rb","duration":{"p50":"2111502692","p90":"2287369659"}},"Spree::ReturnItem::EligibilityValidator::RMARequired at ./core/spec/models/spree/return_item/eligibility_validator/rma_required_spec.rb":{"source_file":"core/spec/models/spree/return_item/eligibility_validator/rma_required_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::ReturnItem::EligibilityValidator::RMARequired at ./spec/models/spree/return_item/eligibility_validator/rma_required_spec.rb":{"source_file":"core/spec/models/spree/return_item/eligibility_validator/rma_required_spec.rb","duration":{"p50":"1359864691","p90":"1533249291"}},"Spree::ReturnItem::EligibilityValidator::TimeSincePurchase at ./spec/models/spree/return_item/eligibility_validator/time_since_purchase_spec.rb":{"source_file":"core/spec/models/spree/return_item/eligibility_validator/time_since_purchase_spec.rb","duration":{"p50":"2579012406","p90":"2907840000"}},"Spree::ReturnItem::ExchangeVariantEligibility::SameOptionValue at ./spec/models/spree/return_item/exchange_variant_eligibility/same_option_value_spec.rb":{"source_file":"core/spec/models/spree/return_item/exchange_variant_eligibility/same_option_value_spec.rb","duration":{"p50":"1255309977","p90":"1473127762"}},"Spree::ReturnItem::ExchangeVariantEligibility::SameProduct at ./spec/models/spree/return_item/exchange_variant_eligibility/same_product_spec.rb":{"source_file":"core/spec/models/spree/return_item/exchange_variant_eligibility/same_product_spec.rb","duration":{"p50":"1443956915","p90":"1835643687"}},"Spree::ReturnsCalculator at ./core/spec/models/spree/returns_calculator_spec.rb":{"source_file":"core/spec/models/spree/returns_calculator_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::ReturnsCalculator at ./spec/models/spree/returns_calculator_spec.rb":{"source_file":"core/spec/models/spree/returns_calculator_spec.rb","duration":{"p50":"824785881","p90":"1027754031"}},"Spree::Role at ./spec/models/spree/role_spec.rb":{"source_file":"core/spec/models/spree/role_spec.rb","duration":{"p50":"309541183","p90":"363251880"}},"Spree::RoleUser at ./core/spec/models/spree/role_user_spec.rb":{"source_file":"core/spec/models/spree/role_user_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::RoleUser at ./spec/models/spree/role_user_spec.rb":{"source_file":"core/spec/models/spree/role_user_spec.rb","duration":{"p50":"349008105","p90":"363251880"}},"Spree::Seeds::All at ./core/spec/services/spree/seeds/all_spec.rb":{"source_file":"core/spec/services/spree/seeds/all_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Seeds::All at ./spec/services/spree/seeds/all_spec.rb":{"source_file":"core/spec/services/spree/seeds/all_spec.rb","duration":{"p50":"1910560275","p90":"2028706782"}},"Spree::Seeds::DigitalDelivery at ./core/spec/services/spree/seeds/digital_delivery_spec.rb":{"source_file":"core/spec/services/spree/seeds/digital_delivery_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Seeds::DigitalDelivery at ./spec/services/spree/seeds/digital_delivery_spec.rb":{"source_file":"core/spec/services/spree/seeds/digital_delivery_spec.rb","duration":{"p50":"370590302","p90":"500249586"}},"Spree::Seeds::PaymentMethods at ./spec/services/spree/seeds/payment_methods_spec.rb":{"source_file":"core/spec/services/spree/seeds/payment_methods_spec.rb","duration":{"p50":"746294639","p90":"858447176"}},"Spree::Seeds::ReturnsEnvironment at ./core/spec/services/spree/seeds/returns_environment_spec.rb":{"source_file":"core/spec/services/spree/seeds/returns_environment_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Seeds::ReturnsEnvironment at ./spec/services/spree/seeds/returns_environment_spec.rb":{"source_file":"core/spec/services/spree/seeds/returns_environment_spec.rb","duration":{"p50":"461787339","p90":"575426677"}},"Spree::Seeds::TaxCategories at ./core/spec/services/spree/seeds/tax_categories_spec.rb":{"source_file":"core/spec/services/spree/seeds/tax_categories_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Seeds::TaxCategories at ./spec/services/spree/seeds/tax_categories_spec.rb":{"source_file":"core/spec/services/spree/seeds/tax_categories_spec.rb","duration":{"p50":"303411654","p90":"328682798"}},"Spree::ServiceModule at ./spec/lib/spree/service_module_spec.rb":{"source_file":"core/spec/lib/spree/service_module_spec.rb","duration":{"p50":"322174228","p90":"335322854"}},"Spree::Shipment at ./spec/models/spree/shipment_spec.rb":{"source_file":"core/spec/models/spree/shipment_spec.rb","duration":{"p50":"88901102526","p90":"104326966700"}},"Spree::Shipment::CustomEvents at ./spec/models/spree/shipment/custom_events_spec.rb":{"source_file":"core/spec/models/spree/shipment/custom_events_spec.rb","duration":{"p50":"1660953558","p90":"2197677682"}},"Spree::ShipmentHelper at ./core/spec/helpers/shipment_helper_spec.rb":{"source_file":"core/spec/helpers/shipment_helper_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::ShipmentHelper at ./spec/helpers/shipment_helper_spec.rb":{"source_file":"core/spec/helpers/shipment_helper_spec.rb","duration":{"p50":"587051459","p90":"746294639"}},"Spree::Shipments::AddItem at ./core/spec/services/spree/shipments/add_item_spec.rb":{"source_file":"core/spec/services/spree/shipments/add_item_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Shipments::AddItem at ./spec/services/spree/shipments/add_item_spec.rb":{"source_file":"core/spec/services/spree/shipments/add_item_spec.rb","duration":{"p50":"2527942853","p90":"2850259010"}},"Spree::Shipments::Create at ./spec/services/spree/shipments/create_spec.rb":{"source_file":"core/spec/services/spree/shipments/create_spec.rb","duration":{"p50":"3481337426","p90":"3847485705"}},"Spree::Shipments::RemoveItem at ./spec/services/spree/shipments/remove_item_spec.rb":{"source_file":"core/spec/services/spree/shipments/remove_item_spec.rb","duration":{"p50":"4989963218","p90":"5626190324"}},"Spree::ShippingCalculator at ./spec/models/spree/shipping_calculator_spec.rb":{"source_file":"core/spec/models/spree/shipping_calculator_spec.rb","duration":{"p50":"1069698895","p90":"1182204051"}},"Spree::ShippingCategory at ./core/spec/models/spree/shipping_category_spec.rb":{"source_file":"core/spec/models/spree/shipping_category_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::ShippingCategory at ./spec/models/spree/shipping_category_spec.rb":{"source_file":"core/spec/models/spree/shipping_category_spec.rb","duration":{"p50":"322174228","p90":"363251880"}},"Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb":{"source_file":"core/spec/models/spree/shipping_method_spec.rb","duration":{"p50":"1443956915","p90":"1660953558"}},"Spree::ShippingRate at ./core/spec/models/spree/shipping_rate_spec.rb":{"source_file":"core/spec/models/spree/shipping_rate_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::ShippingRate at ./spec/models/spree/shipping_rate_spec.rb":{"source_file":"core/spec/models/spree/shipping_rate_spec.rb","duration":{"p50":"2111502692","p90":"2738495104"}},"Spree::State at ./spec/models/spree/state_spec.rb":{"source_file":"core/spec/models/spree/state_spec.rb","duration":{"p50":"309541183","p90":"356058774"}},"Spree::Stock::AvailabilityValidator at ./core/spec/models/spree/stock/availability_validator_spec.rb":{"source_file":"core/spec/models/spree/stock/availability_validator_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Stock::AvailabilityValidator at ./spec/models/spree/stock/availability_validator_spec.rb":{"source_file":"core/spec/models/spree/stock/availability_validator_spec.rb","duration":{"p50":"761371298","p90":"776752537"}},"Spree::Stock::ContentItem at ./spec/models/spree/stock/content_item_spec.rb":{"source_file":"core/spec/models/spree/stock/content_item_spec.rb","duration":{"p50":"1069698895","p90":"1502887919"}},"Spree::Stock::Coordinator at ./core/spec/models/spree/stock/coordinator_spec.rb":{"source_file":"core/spec/models/spree/stock/coordinator_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Stock::Coordinator at ./spec/models/spree/stock/coordinator_spec.rb":{"source_file":"core/spec/models/spree/stock/coordinator_spec.rb","duration":{"p50":"1660953558","p90":"1694508175"}},"Spree::Stock::Differentiator at ./core/spec/models/spree/stock/differentiator_spec.rb":{"source_file":"core/spec/models/spree/stock/differentiator_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Stock::Differentiator at ./spec/models/spree/stock/differentiator_spec.rb":{"source_file":"core/spec/models/spree/stock/differentiator_spec.rb","duration":{"p50":"1502887919","p90":"1694508175"}},"Spree::Stock::Estimator at ./spec/models/spree/stock/estimator_spec.rb":{"source_file":"core/spec/models/spree/stock/estimator_spec.rb","duration":{"p50":"1280669775","p90":"1443956915"}},"Spree::Stock::InventoryUnitBuilder at ./spec/models/spree/stock/inventory_unit_builder_spec.rb":{"source_file":"core/spec/models/spree/stock/inventory_unit_builder_spec.rb","duration":{"p50":"808453487","p90":"911532407"}},"Spree::Stock::Package at ./spec/models/spree/stock/package_spec.rb":{"source_file":"core/spec/models/spree/stock/package_spec.rb","duration":{"p50":"5626190324","p90":"6094795472"}},"Spree::Stock::Packer at ./spec/models/spree/stock/packer_spec.rb":{"source_file":"core/spec/models/spree/stock/packer_spec.rb","duration":{"p50":"1564224024","p90":"1872727398"}},"Spree::Stock::Prioritizer at ./spec/models/spree/stock/prioritizer_spec.rb":{"source_file":"core/spec/models/spree/stock/prioritizer_spec.rb","duration":{"p50":"1988534370","p90":"2154159312"}},"Spree::Stock::Quantifier at ./spec/models/spree/stock/quantifier_spec.rb":{"source_file":"core/spec/models/spree/stock/quantifier_spec.rb","duration":{"p50":"3150033867","p90":"3412400051"}},"Spree::Stock::Splitter::Backordered at ./core/spec/models/spree/stock/splitter/backordered_spec.rb":{"source_file":"core/spec/models/spree/stock/splitter/backordered_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Stock::Splitter::Backordered at ./spec/models/spree/stock/splitter/backordered_spec.rb":{"source_file":"core/spec/models/spree/stock/splitter/backordered_spec.rb","duration":{"p50":"552863137","p90":"702832417"}},"Spree::Stock::Splitter::Base at ./core/spec/models/spree/stock/splitter/base_spec.rb":{"source_file":"core/spec/models/spree/stock/splitter/base_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Stock::Splitter::Base at ./spec/models/spree/stock/splitter/base_spec.rb":{"source_file":"core/spec/models/spree/stock/splitter/base_spec.rb","duration":{"p50":"297403503","p90":"315794540"}},"Spree::Stock::Splitter::Digital at ./core/spec/models/spree/stock/splitter/digital_spec.rb":{"source_file":"core/spec/models/spree/stock/splitter/digital_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Stock::Splitter::Digital at ./spec/models/spree/stock/splitter/digital_spec.rb":{"source_file":"core/spec/models/spree/stock/splitter/digital_spec.rb","duration":{"p50":"2154159312","p90":"2579012406"}},"Spree::Stock::Splitter::ShippingCategory at ./spec/models/spree/stock/splitter/shipping_category_spec.rb":{"source_file":"core/spec/models/spree/stock/splitter/shipping_category_spec.rb","duration":{"p50":"370590302","p90":"385714894"}},"Spree::Stock::Splitter::Weight at ./spec/models/spree/stock/splitter/weight_spec.rb":{"source_file":"core/spec/models/spree/stock/splitter/weight_spec.rb","duration":{"p50":"426282304","p90":"510355638"}},"Spree::StockItem at ./core/spec/models/spree/stock_item_spec.rb":{"source_file":"core/spec/models/spree/stock_item_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::StockItem at ./spec/models/spree/stock_item_spec.rb":{"source_file":"core/spec/models/spree/stock_item_spec.rb","duration":{"p50":"8562965265","p90":"9463571730"}},"Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb":{"source_file":"core/spec/models/spree/stock_location_spec.rb","duration":{"p50":"6343537252","p90":"7594638512"}},"Spree::StockLocations::StockItems::Create at ./spec/services/spree/stock_locations/stock_items/create_spec.rb":{"source_file":"core/spec/services/spree/stock_locations/stock_items/create_spec.rb","duration":{"p50":"1799294307","p90":"1988534370"}},"Spree::StockLocations::StockItems::CreateJob at ./core/spec/jobs/spree/stock_locations/stock_items/create_job_spec.rb":{"source_file":"core/spec/jobs/spree/stock_locations/stock_items/create_job_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::StockLocations::StockItems::CreateJob at ./spec/jobs/spree/stock_locations/stock_items/create_job_spec.rb":{"source_file":"core/spec/jobs/spree/stock_locations/stock_items/create_job_spec.rb","duration":{"p50":"309541183","p90":"363251880"}},"Spree::StockMovement at ./core/spec/models/spree/stock_movement_spec.rb":{"source_file":"core/spec/models/spree/stock_movement_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::StockMovement at ./spec/models/spree/stock_movement_spec.rb":{"source_file":"core/spec/models/spree/stock_movement_spec.rb","duration":{"p50":"1763664717","p90":"2111502692"}},"Spree::StockMovement::CustomEvents at ./core/spec/models/spree/stock_movement/custom_events_spec.rb":{"source_file":"core/spec/models/spree/stock_movement/custom_events_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::StockMovement::CustomEvents at ./spec/models/spree/stock_movement/custom_events_spec.rb":{"source_file":"core/spec/models/spree/stock_movement/custom_events_spec.rb","duration":{"p50":"1048516738","p90":"1306541891"}},"Spree::StockTransfer at ./spec/models/spree/stock_transfer_spec.rb":{"source_file":"core/spec/models/spree/stock_transfer_spec.rb","duration":{"p50":"4252143484","p90":"4891152065"}},"Spree::Store at ./spec/models/spree/store_spec.rb":{"source_file":"core/spec/models/spree/store_spec.rb","duration":{"p50":"24716767886","p90":"27868189452"}},"Spree::StoreCredit at ./core/spec/models/spree/store_credit_spec.rb":{"source_file":"core/spec/models/spree/store_credit_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb":{"source_file":"core/spec/models/spree/store_credit_spec.rb","duration":{"p50":"4699360983","p90":"5514780614"}},"Spree::StoreFaviconImage at ./core/spec/models/spree/store_favicon_image_spec.rb":{"source_file":"core/spec/models/spree/store_favicon_image_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::StoreFaviconImage at ./spec/models/spree/store_favicon_image_spec.rb":{"source_file":"core/spec/models/spree/store_favicon_image_spec.rb","duration":{"p50":"426282304","p90":"575426677"}},"Spree::StoreProduct at ./spec/models/spree/store_product_spec.rb":{"source_file":"core/spec/models/spree/store_product_spec.rb","duration":{"p50":"2631113667","p90":"3026515237"}},"Spree::Stores::FindCurrent at ./core/spec/finders/spree/stores/find_current_spec.rb":{"source_file":"core/spec/finders/spree/stores/find_current_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Stores::FindCurrent at ./spec/finders/spree/stores/find_current_spec.rb":{"source_file":"core/spec/finders/spree/stores/find_current_spec.rb","duration":{"p50":"1763664717","p90":"1949157452"}},"Spree::Stores::SettingsDefaultsByCountry at ./spec/services/spree/stores/settings_defaults_by_country_spec.rb":{"source_file":"core/spec/services/spree/stores/settings_defaults_by_country_spec.rb","duration":{"p50":"309541183","p90":"349008105"}},"Spree::Subscriber at ./spec/models/spree/subscriber_spec.rb":{"source_file":"core/spec/models/spree/subscriber_spec.rb","duration":{"p50":"309541183","p90":"452643035"}},"Spree::Tags::BulkAdd at ./spec/services/spree/tags/bulk_add_spec.rb":{"source_file":"core/spec/services/spree/tags/bulk_add_spec.rb","duration":{"p50":"1533249291","p90":"1799294307"}},"Spree::Tags::BulkRemove at ./core/spec/services/spree/tags/bulk_remove_spec.rb":{"source_file":"core/spec/services/spree/tags/bulk_remove_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Tags::BulkRemove at ./spec/services/spree/tags/bulk_remove_spec.rb":{"source_file":"core/spec/services/spree/tags/bulk_remove_spec.rb","duration":{"p50":"1027754031","p90":"1280669775"}},"Spree::TaxCategory at ./core/spec/models/spree/tax_category_spec.rb":{"source_file":"core/spec/models/spree/tax_category_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::TaxCategory at ./spec/models/spree/tax_category_spec.rb":{"source_file":"core/spec/models/spree/tax_category_spec.rb","duration":{"p50":"611010298","p90":"648794362"}},"Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb":{"source_file":"core/spec/models/spree/tax_rate_spec.rb","duration":{"p50":"8227195624","p90":"9092487651"}},"Spree::Taxon at ./spec/models/spree/taxon_spec.rb":{"source_file":"core/spec/models/spree/taxon_spec.rb","duration":{"p50":"9092487651","p90":"10048786423"}},"Spree::TaxonImage at ./spec/models/spree/taxon_image_spec.rb":{"source_file":"core/spec/models/spree/taxon_image_spec.rb","duration":{"p50":"309541183","p90":"393507114"}},"Spree::Taxonomy at ./core/spec/models/spree/taxonomy_spec.rb":{"source_file":"core/spec/models/spree/taxonomy_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Taxonomy at ./spec/models/spree/taxonomy_spec.rb":{"source_file":"core/spec/models/spree/taxonomy_spec.rb","duration":{"p50":"858447176","p90":"1113355619"}},"Spree::Taxons::AddProducts at ./core/spec/services/spree/taxons/add_products_spec.rb":{"source_file":"core/spec/services/spree/taxons/add_products_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Taxons::AddProducts at ./spec/services/spree/taxons/add_products_spec.rb":{"source_file":"core/spec/services/spree/taxons/add_products_spec.rb","duration":{"p50":"2333579147","p90":"2850259010"}},"Spree::Taxons::Find at ./core/spec/finders/spree/taxons/find_spec.rb":{"source_file":"core/spec/finders/spree/taxons/find_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Taxons::Find at ./spec/finders/spree/taxons/find_spec.rb":{"source_file":"core/spec/finders/spree/taxons/find_spec.rb","duration":{"p50":"401456752","p90":"575426677"}},"Spree::Taxons::RegenerateProducts at ./core/spec/services/spree/taxons/regenerate_products_spec.rb":{"source_file":"core/spec/services/spree/taxons/regenerate_products_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Taxons::RegenerateProducts at ./spec/services/spree/taxons/regenerate_products_spec.rb":{"source_file":"core/spec/services/spree/taxons/regenerate_products_spec.rb","duration":{"p50":"3150033867","p90":"3551667475"}},"Spree::Taxons::RemoveProducts at ./core/spec/services/spree/taxons/remove_products_spec.rb":{"source_file":"core/spec/services/spree/taxons/remove_products_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Taxons::RemoveProducts at ./spec/services/spree/taxons/remove_products_spec.rb":{"source_file":"core/spec/services/spree/taxons/remove_products_spec.rb","duration":{"p50":"2527942853","p90":"2684267478"}},"Spree::UrlValidator at ./spec/validators/spree/url_validator_spec.rb":{"source_file":"core/spec/validators/spree/url_validator_spec.rb","duration":{"p50":"315794540","p90":"443679807"}},"Spree::UserManagement at ./core/spec/models/spree/concerns/user_management_spec.rb":{"source_file":"core/spec/models/spree/concerns/user_management_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::UserManagement at ./spec/models/spree/concerns/user_management_spec.rb":{"source_file":"core/spec/models/spree/concerns/user_management_spec.rb","duration":{"p50":"1694508175","p90":"1910560275"}},"Spree::UserMethods at ./core/spec/models/spree/concerns/user_methods_spec.rb":{"source_file":"core/spec/models/spree/concerns/user_methods_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::UserMethods at ./spec/models/spree/concerns/user_methods_spec.rb":{"source_file":"core/spec/models/spree/concerns/user_methods_spec.rb","duration":{"p50":"1255309977","p90":"1387336705"}},"Spree::UserRoles at ./spec/models/spree/concerns/user_roles_spec.rb":{"source_file":"core/spec/models/spree/concerns/user_roles_spec.rb","duration":{"p50":"1443956915","p90":"1728740663"}},"Spree::Variant at ./spec/models/spree/variant_spec.rb":{"source_file":"core/spec/models/spree/variant_spec.rb","duration":{"p50":"19057737897","p90":"20236243068"}},"Spree::VariantPresenter at ./core/spec/presenters/spree/variant_presenter_spec.rb":{"source_file":"core/spec/presenters/spree/variant_presenter_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::VariantPresenter at ./spec/presenters/spree/variant_presenter_spec.rb":{"source_file":"core/spec/presenters/spree/variant_presenter_spec.rb","duration":{"p50":"731516527","p90":"929947204"}},"Spree::Variants::OptionTypesFinder at ./spec/finders/spree/variants/option_types_finder_spec.rb":{"source_file":"core/spec/finders/spree/variants/option_types_finder_spec.rb","duration":{"p50":"841448222","p90":"987453902"}},"Spree::Variants::OptionTypesPresenter at ./core/spec/presenters/spree/variants/option_types_presenter_spec.rb":{"source_file":"core/spec/presenters/spree/variants/option_types_presenter_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Variants::OptionTypesPresenter at ./spec/presenters/spree/variants/option_types_presenter_spec.rb":{"source_file":"core/spec/presenters/spree/variants/option_types_presenter_spec.rb","duration":{"p50":"3150033867","p90":"3847485705"}},"Spree::Variants::OptionsPresenter at ./core/spec/presenters/spree/variants/options_presenter_spec.rb":{"source_file":"core/spec/presenters/spree/variants/options_presenter_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Variants::OptionsPresenter at ./spec/presenters/spree/variants/options_presenter_spec.rb":{"source_file":"core/spec/presenters/spree/variants/options_presenter_spec.rb","duration":{"p50":"510355638","p90":"661901319"}},"Spree::Variants::RemoveFromIncompleteOrdersJob at ./spec/jobs/spree/variants/remove_from_incomplete_orders_job_spec.rb":{"source_file":"core/spec/jobs/spree/variants/remove_from_incomplete_orders_job_spec.rb","duration":{"p50":"417841070","p90":"587051459"}},"Spree::Variants::RemoveLineItemJob at ./core/spec/jobs/spree/variants/remove_line_item_job_spec.rb":{"source_file":"core/spec/jobs/spree/variants/remove_line_item_job_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Variants::RemoveLineItemJob at ./spec/jobs/spree/variants/remove_line_item_job_spec.rb":{"source_file":"core/spec/jobs/spree/variants/remove_line_item_job_spec.rb","duration":{"p50":"461787339","p90":"510355638"}},"Spree::Variants::RemoveLineItems at ./core/spec/services/spree/variants/remove_line_items_spec.rb":{"source_file":"core/spec/services/spree/variants/remove_line_items_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Variants::RemoveLineItems at ./spec/services/spree/variants/remove_line_items_spec.rb":{"source_file":"core/spec/services/spree/variants/remove_line_items_spec.rb","duration":{"p50":"3150033867","p90":"3481337426"}},"Spree::Variants::TouchJob at ./spec/jobs/spree/variants/touch_job_spec.rb":{"source_file":"core/spec/jobs/spree/variants/touch_job_spec.rb","duration":{"p50":"761371298","p90":"911532407"}},"Spree::Variants::VisibleFinder at ./core/spec/finders/spree/variants/visible_finder_spec.rb":{"source_file":"core/spec/finders/spree/variants/visible_finder_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Variants::VisibleFinder at ./spec/finders/spree/variants/visible_finder_spec.rb":{"source_file":"core/spec/finders/spree/variants/visible_finder_spec.rb","duration":{"p50":"480633878","p90":"587051459"}},"Spree::VatPriceCalculation at ./core/spec/models/spree/concerns/vat_price_calculation_spec.rb":{"source_file":"core/spec/models/spree/concerns/vat_price_calculation_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::VatPriceCalculation at ./spec/models/spree/concerns/vat_price_calculation_spec.rb":{"source_file":"core/spec/models/spree/concerns/vat_price_calculation_spec.rb","duration":{"p50":"309541183","p90":"328682798"}},"Spree::Wallet::CreatePaymentSource at ./core/spec/services/spree/wallet/create_payment_source_spec.rb":{"source_file":"core/spec/services/spree/wallet/create_payment_source_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Wallet::CreatePaymentSource at ./spec/services/spree/wallet/create_payment_source_spec.rb":{"source_file":"core/spec/services/spree/wallet/create_payment_source_spec.rb","duration":{"p50":"409566990","p90":"443679807"}},"Spree::WebhookDelivery at ./core/spec/models/spree/webhook_delivery_spec.rb":{"source_file":"core/spec/models/spree/webhook_delivery_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::WebhookDelivery at ./spec/models/spree/webhook_delivery_spec.rb":{"source_file":"core/spec/models/spree/webhook_delivery_spec.rb","duration":{"p50":"426282304","p90":"461787339"}},"Spree::WebhookEndpoint at ./spec/models/spree/webhook_endpoint_spec.rb":{"source_file":"core/spec/models/spree/webhook_endpoint_spec.rb","duration":{"p50":"370590302","p90":"401456752"}},"Spree::WishedItem at ./spec/models/spree/wished_item_spec.rb":{"source_file":"core/spec/models/spree/wished_item_spec.rb","duration":{"p50":"2477884579","p90":"3278593560"}},"Spree::Wishlist at ./spec/models/spree/wishlist_spec.rb":{"source_file":"core/spec/models/spree/wishlist_spec.rb","duration":{"p50":"5405577038","p90":"6217922653"}},"Spree::Zone at ./core/spec/models/spree/zone_spec.rb":{"source_file":"core/spec/models/spree/zone_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Zone at ./spec/models/spree/zone_spec.rb":{"source_file":"core/spec/models/spree/zone_spec.rb","duration":{"p50":"911532407","p90":"948734016"}},"Spree::ZoneMember at ./spec/models/spree/zone_member_spec.rb":{"source_file":"core/spec/models/spree/zone_member_spec.rb","duration":{"p50":"342097053","p90":"471116376"}},"StoreCreditCategory at ./spec/models/spree/store_credit_category_spec.rb":{"source_file":"core/spec/models/spree/store_credit_category_spec.rb","duration":{"p50":"356058774","p90":"378076975"}},"StoreCreditEvent at ./core/spec/models/spree/store_credit_event_spec.rb":{"source_file":"core/spec/models/spree/store_credit_event_spec.rb","duration":{"p50":"0","p90":"0"}},"StoreCreditEvent at ./spec/models/spree/store_credit_event_spec.rb":{"source_file":"core/spec/models/spree/store_credit_event_spec.rb","duration":{"p50":"1069698895","p90":"1206086961"}},"Variant scopes at ./spec/models/spree/variant/scopes_spec.rb":{"source_file":"core/spec/models/spree/variant/scopes_spec.rb","duration":{"p50":"6094795472","p90":"6602430722"}},"core:activate_products at ./spec/lib/tasks/core_spec.rb":{"source_file":"core/spec/lib/tasks/core_spec.rb","duration":{"p50":"623353940","p90":"746294639"}},"core:archive_products at ./spec/lib/tasks/core_spec.rb":{"source_file":"core/spec/lib/tasks/core_spec.rb","duration":{"p50":"688914943","p90":"761371298"}},"core:migrate_newsletter_subscribers at ./spec/lib/tasks/core_spec.rb":{"source_file":"core/spec/lib/tasks/core_spec.rb","duration":{"p50":"349008105","p90":"480633878"}},"exchanges:charge_unreturned_items at ./spec/lib/tasks/exchanges_spec.rb":{"source_file":"core/spec/lib/tasks/exchanges_spec.rb","duration":{"p50":"15918265246","p90":"16567924067"}},"i18n at ./core/spec/lib/i18n_spec.rb":{"source_file":"core/spec/lib/i18n_spec.rb","duration":{"p50":"0","p90":"0"}},"i18n at ./spec/lib/i18n_spec.rb":{"source_file":"core/spec/lib/i18n_spec.rb","duration":{"p50":"328682798","p90":"490343654"}},"product filters at ./core/spec/models/spree/product_filter_spec.rb":{"source_file":"core/spec/models/spree/product_filter_spec.rb","duration":{"p50":"0","p90":"0"}},"product filters at ./spec/models/spree/product_filter_spec.rb":{"source_file":"core/spec/models/spree/product_filter_spec.rb","duration":{"p50":"443679807","p90":"587051459"}}}},"expectedRunnableTestFiles":["spec/models/spree/app_dependencies_spec.rb","spec/services/spree/orders/cancel_spec.rb"],"expectedParallelRunners":1,"originalParallelRunners":3} \ No newline at end of file +{"source":{"repository":"anmarchenko/spree-dd-testopt","workflowRun":26236954724,"headSha":"796307d65f584ff8a92b19ec62d610708ac44240","ddtestSha":"078dea03eb5beae6a9639a8049dcdd83ec85be6a"},"tests":[{"name":"#execute without any filter parameters returns all addresses without filtering","suite":"Spree::Addresses::Find at ./spec/finders/spree/addresses/find_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/finders/spree/addresses/find_spec.rb"},{"name":"#execute with exclude_quick_checkout filter set to truthy value returns only non-quick-checkout addresses","suite":"Spree::Addresses::Find at ./spec/finders/spree/addresses/find_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/finders/spree/addresses/find_spec.rb"},{"name":"#execute with exclude_quick_checkout filter set to falsey value returns all addresses without filtering","suite":"Spree::Addresses::Find at ./spec/finders/spree/addresses/find_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","suiteSourceFile":"core/spec/finders/spree/addresses/find_spec.rb"},{"name":"#execute finds available Option Values","suite":"Spree::OptionValues::FindAvailable at ./spec/finders/spree/option_values/find_available_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/finders/spree/option_values/find_available_spec.rb"},{"name":"#execute when given a predefined scope finds available Option Values with respect to a predefined scope","suite":"Spree::OptionValues::FindAvailable at ./spec/finders/spree/option_values/find_available_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/finders/spree/option_values/find_available_spec.rb"},{"name":"#execute when given a predefined products scope finds filterable Option Values with respect to a predefined Products scope","suite":"Spree::OptionValues::FindAvailable at ./spec/finders/spree/option_values/find_available_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","suiteSourceFile":"core/spec/finders/spree/option_values/find_available_spec.rb"},{"name":"#execute ordering orders the option values by option type position and option value position","suite":"Spree::OptionValues::FindAvailable at ./spec/finders/spree/option_values/find_available_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1\"}}","suiteSourceFile":"core/spec/finders/spree/option_values/find_available_spec.rb"},{"name":"#execute finds available Product Properties","suite":"Spree::ProductProperties::FindAvailable at ./spec/finders/spree/product_properties/find_available_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/finders/spree/product_properties/find_available_spec.rb"},{"name":"#execute when given a predefined scope finds available Product Properties with respect to a predefined scope","suite":"Spree::ProductProperties::FindAvailable at ./spec/finders/spree/product_properties/find_available_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/finders/spree/product_properties/find_available_spec.rb"},{"name":"#execute when given a predefined products scope finds filterable Product Properties with respect to a predefined Products scope","suite":"Spree::ProductProperties::FindAvailable at ./spec/finders/spree/product_properties/find_available_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","suiteSourceFile":"core/spec/finders/spree/product_properties/find_available_spec.rb"},{"name":"include discontinued returns products with discontinued","suite":"Spree::Products::Find at ./spec/finders/spree/products/find_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/finders/spree/products/find_spec.rb"},{"name":"include deleted returns products with deleted","suite":"Spree::Products::Find at ./spec/finders/spree/products/find_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/finders/spree/products/find_spec.rb"},{"name":"in stock returns products with variants in stock","suite":"Spree::Products::Find at ./spec/finders/spree/products/find_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/finders/spree/products/find_spec.rb"},{"name":"backorderable returns products with backorderable variants","suite":"Spree::Products::Find at ./spec/finders/spree/products/find_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/finders/spree/products/find_spec.rb"},{"name":"purchasable returns products with purchasable variants","suite":"Spree::Products::Find at ./spec/finders/spree/products/find_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","suiteSourceFile":"core/spec/finders/spree/products/find_spec.rb"},{"name":"exclude discontinued and deleted returns not discontinued and not deleted products","suite":"Spree::Products::Find at ./spec/finders/spree/products/find_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","suiteSourceFile":"core/spec/finders/spree/products/find_spec.rb"},{"name":"filter by options and option values for options returns products matching all given options","suite":"Spree::Products::Find at ./spec/finders/spree/products/find_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1:1\"}}","suiteSourceFile":"core/spec/finders/spree/products/find_spec.rb"},{"name":"filter by options and option values for option values filtering by one option returns products with proper option values","suite":"Spree::Products::Find at ./spec/finders/spree/products/find_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2:1:1\"}}","suiteSourceFile":"core/spec/finders/spree/products/find_spec.rb"},{"name":"filter by options and option values for option values filtering by several options returns products that have both options","suite":"Spree::Products::Find at ./spec/finders/spree/products/find_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2:2:1\"}}","suiteSourceFile":"core/spec/finders/spree/products/find_spec.rb"},{"name":"filter by taxons one taxon is requested in params behaves like returns distinct products associated both to self and descendants example at ./spec/finders/spree/products/find_spec.rb:265","suite":"Spree::Products::Find at ./spec/finders/spree/products/find_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1:1:1\"}}","suiteSourceFile":"core/spec/finders/spree/products/find_spec.rb"},{"name":"filter by taxons one taxon is requested in params when product is already related to both taxons behaves like returns distinct products associated both to self and descendants example at ./spec/finders/spree/products/find_spec.rb:265","suite":"Spree::Products::Find at ./spec/finders/spree/products/find_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1:2:1:1\"}}","suiteSourceFile":"core/spec/finders/spree/products/find_spec.rb"},{"name":"filter by taxons multiple taxons are requested example at ./spec/finders/spree/products/find_spec.rb:292","suite":"Spree::Products::Find at ./spec/finders/spree/products/find_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2:1\"}}","suiteSourceFile":"core/spec/finders/spree/products/find_spec.rb"},{"name":"filter by taxons multiple taxons + 1 concat_taxons are requested example at ./spec/finders/spree/products/find_spec.rb:308","suite":"Spree::Products::Find at ./spec/finders/spree/products/find_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:3:1\"}}","suiteSourceFile":"core/spec/finders/spree/products/find_spec.rb"},{"name":"filter by taxons only multiple concat_taxons are requested example at ./spec/finders/spree/products/find_spec.rb:324","suite":"Spree::Products::Find at ./spec/finders/spree/products/find_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:4:1\"}}","suiteSourceFile":"core/spec/finders/spree/products/find_spec.rb"},{"name":"filter by taxons only one concat_taxons is requested example at ./spec/finders/spree/products/find_spec.rb:340","suite":"Spree::Products::Find at ./spec/finders/spree/products/find_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:5:1\"}}","suiteSourceFile":"core/spec/finders/spree/products/find_spec.rb"},{"name":"filter by prices for a price less than 20 example at ./spec/finders/spree/products/find_spec.rb:357","suite":"Spree::Products::Find at ./spec/finders/spree/products/find_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1:1\"}}","suiteSourceFile":"core/spec/finders/spree/products/find_spec.rb"},{"name":"filter by prices for a price between 16 and 24 example at ./spec/finders/spree/products/find_spec.rb:363","suite":"Spree::Products::Find at ./spec/finders/spree/products/find_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:2:1\"}}","suiteSourceFile":"core/spec/finders/spree/products/find_spec.rb"},{"name":"filter by prices for a price more than 23 example at ./spec/finders/spree/products/find_spec.rb:369","suite":"Spree::Products::Find at ./spec/finders/spree/products/find_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:3:1\"}}","suiteSourceFile":"core/spec/finders/spree/products/find_spec.rb"},{"name":"filter by properties when filtering by one Property finds Products matching any of Property values","suite":"Spree::Products::Find at ./spec/finders/spree/products/find_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1:1\"}}","suiteSourceFile":"core/spec/finders/spree/products/find_spec.rb"},{"name":"filter by properties when filtering by many Properties finds Products matching any of Property values, but for all given Properties","suite":"Spree::Products::Find at ./spec/finders/spree/products/find_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:2:1\"}}","suiteSourceFile":"core/spec/finders/spree/products/find_spec.rb"},{"name":"ordered returns products in newest-first order","suite":"Spree::Products::Find at ./spec/finders/spree/products/find_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2\"}}","suiteSourceFile":"core/spec/finders/spree/products/find_spec.rb"},{"name":"ordered returns products in price-high-to-low order","suite":"Spree::Products::Find at ./spec/finders/spree/products/find_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:3\"}}","suiteSourceFile":"core/spec/finders/spree/products/find_spec.rb"},{"name":"ordered returns products in price-low-to-high order","suite":"Spree::Products::Find at ./spec/finders/spree/products/find_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:4\"}}","suiteSourceFile":"core/spec/finders/spree/products/find_spec.rb"},{"name":"ordered returns products in name-a-z order","suite":"Spree::Products::Find at ./spec/finders/spree/products/find_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:5\"}}","suiteSourceFile":"core/spec/finders/spree/products/find_spec.rb"},{"name":"ordered returns products in name-z-a order","suite":"Spree::Products::Find at ./spec/finders/spree/products/find_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:6\"}}","suiteSourceFile":"core/spec/finders/spree/products/find_spec.rb"},{"name":"ordered default when not filtering by taxons returns products in default order","suite":"Spree::Products::Find at ./spec/finders/spree/products/find_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1:1:1\"}}","suiteSourceFile":"core/spec/finders/spree/products/find_spec.rb"},{"name":"ordered default when filtering by taxons returns products ordered by associated taxon position","suite":"Spree::Products::Find at ./spec/finders/spree/products/find_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1:2:1\"}}","suiteSourceFile":"core/spec/finders/spree/products/find_spec.rb"},{"name":"filter by slug when product with given slug is present returns products with the given slug","suite":"Spree::Products::Find at ./spec/finders/spree/products/find_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:1:1\"}}","suiteSourceFile":"core/spec/finders/spree/products/find_spec.rb"},{"name":"filter by slug when product with given slug is not present returns all products","suite":"Spree::Products::Find at ./spec/finders/spree/products/find_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:2:1\"}}","suiteSourceFile":"core/spec/finders/spree/products/find_spec.rb"},{"name":"filter by slug when slug is not present returns all products","suite":"Spree::Products::Find at ./spec/finders/spree/products/find_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:3:1\"}}","suiteSourceFile":"core/spec/finders/spree/products/find_spec.rb"},{"name":"no arguments example at ./spec/finders/spree/stores/find_current_spec.rb:18","suite":"Spree::Stores::FindCurrent at ./spec/finders/spree/stores/find_current_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/finders/spree/stores/find_current_spec.rb"},{"name":"no arguments example at ./spec/finders/spree/stores/find_current_spec.rb:19","suite":"Spree::Stores::FindCurrent at ./spec/finders/spree/stores/find_current_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/finders/spree/stores/find_current_spec.rb"},{"name":"existing store example at ./spec/finders/spree/stores/find_current_spec.rb:25","suite":"Spree::Stores::FindCurrent at ./spec/finders/spree/stores/find_current_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/finders/spree/stores/find_current_spec.rb"},{"name":"existing store example at ./spec/finders/spree/stores/find_current_spec.rb:26","suite":"Spree::Stores::FindCurrent at ./spec/finders/spree/stores/find_current_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","suiteSourceFile":"core/spec/finders/spree/stores/find_current_spec.rb"},{"name":"non-existing store example at ./spec/finders/spree/stores/find_current_spec.rb:32","suite":"Spree::Stores::FindCurrent at ./spec/finders/spree/stores/find_current_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/finders/spree/stores/find_current_spec.rb"},{"name":"with scope example at ./spec/finders/spree/stores/find_current_spec.rb:39","suite":"Spree::Stores::FindCurrent at ./spec/finders/spree/stores/find_current_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/finders/spree/stores/find_current_spec.rb"},{"name":"with custom domain example at ./spec/finders/spree/stores/find_current_spec.rb:46","suite":"Spree::Stores::FindCurrent at ./spec/finders/spree/stores/find_current_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","suiteSourceFile":"core/spec/finders/spree/stores/find_current_spec.rb"},{"name":"filtering by taxon property when filtering by taxon name returns taxon with matching name","suite":"Spree::Taxons::Find at ./spec/finders/spree/taxons/find_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/finders/spree/taxons/find_spec.rb"},{"name":"#execute returns ordered Option Types and Option Values","suite":"Spree::Variants::OptionTypesFinder at ./spec/finders/spree/variants/option_types_finder_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/finders/spree/variants/option_types_finder_spec.rb"},{"name":"#execute when Option Type is color returns color Option Type first","suite":"Spree::Variants::OptionTypesFinder at ./spec/finders/spree/variants/option_types_finder_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/finders/spree/variants/option_types_finder_spec.rb"},{"name":"#execute returns variants ordered by option value position for passed currency","suite":"Spree::Variants::VisibleFinder at ./spec/finders/spree/variants/visible_finder_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/finders/spree/variants/visible_finder_spec.rb"},{"name":"available_countries with checkout zone assigned to the store return only the countries defined by the checkout_zone_id","suite":"Spree::BaseHelper at ./spec/helpers/base_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/helpers/base_helper_spec.rb"},{"name":"available_countries with no checkout zone defined return complete list of countries","suite":"Spree::BaseHelper at ./spec/helpers/base_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/helpers/base_helper_spec.rb"},{"name":"#spree_storefront_resource_url for Product URL example at ./spec/helpers/base_helper_spec.rb:56","suite":"Spree::BaseHelper at ./spec/helpers/base_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","suiteSourceFile":"core/spec/helpers/base_helper_spec.rb"},{"name":"#spree_storefront_resource_url for Product URL when a locale is passed example at ./spec/helpers/base_helper_spec.rb:63","suite":"Spree::BaseHelper at ./spec/helpers/base_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:2:1\"}}","suiteSourceFile":"core/spec/helpers/base_helper_spec.rb"},{"name":"#spree_storefront_resource_url for Product URL when locale_param is present example at ./spec/helpers/base_helper_spec.rb:71","suite":"Spree::BaseHelper at ./spec/helpers/base_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:3:1\"}}","suiteSourceFile":"core/spec/helpers/base_helper_spec.rb"},{"name":"#spree_storefront_resource_url for Product URL when preview_id is not present returns the product url","suite":"Spree::BaseHelper at ./spec/helpers/base_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:4:1\"}}","suiteSourceFile":"core/spec/helpers/base_helper_spec.rb"},{"name":"#spree_storefront_resource_url for Product URL when preview_id is present returns the product preview url","suite":"Spree::BaseHelper at ./spec/helpers/base_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:5:1\"}}","suiteSourceFile":"core/spec/helpers/base_helper_spec.rb"},{"name":"#spree_storefront_resource_url for Product URL for product with custom domain returns the product url","suite":"Spree::BaseHelper at ./spec/helpers/base_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:6:1\"}}","suiteSourceFile":"core/spec/helpers/base_helper_spec.rb"},{"name":"#spree_storefront_resource_url for Product URL for product with relative option returns the product url","suite":"Spree::BaseHelper at ./spec/helpers/base_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:7:1\"}}","suiteSourceFile":"core/spec/helpers/base_helper_spec.rb"},{"name":"#spree_storefront_resource_url for Taxon URL example at ./spec/helpers/base_helper_spec.rb:102","suite":"Spree::BaseHelper at ./spec/helpers/base_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","suiteSourceFile":"core/spec/helpers/base_helper_spec.rb"},{"name":"#spree_storefront_resource_url for Taxon URL when a locale is passed example at ./spec/helpers/base_helper_spec.rb:105","suite":"Spree::BaseHelper at ./spec/helpers/base_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:2:1\"}}","suiteSourceFile":"core/spec/helpers/base_helper_spec.rb"},{"name":"#spree_storefront_resource_url for Taxon URL when locale_param is present example at ./spec/helpers/base_helper_spec.rb:113","suite":"Spree::BaseHelper at ./spec/helpers/base_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:3:1\"}}","suiteSourceFile":"core/spec/helpers/base_helper_spec.rb"},{"name":"defining custom image helpers does not raise errors when style exists","suite":"Spree::BaseHelper at ./spec/helpers/base_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/helpers/base_helper_spec.rb"},{"name":"defining custom image helpers raises NoMethodError when style is not exists","suite":"Spree::BaseHelper at ./spec/helpers/base_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","suiteSourceFile":"core/spec/helpers/base_helper_spec.rb"},{"name":"defining custom image helpers does not raise errors when helper method called","suite":"Spree::BaseHelper at ./spec/helpers/base_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3\"}}","suiteSourceFile":"core/spec/helpers/base_helper_spec.rb"},{"name":"defining custom image helpers raises NoMethodError when statement with name equal to style name called","suite":"Spree::BaseHelper at ./spec/helpers/base_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4\"}}","suiteSourceFile":"core/spec/helpers/base_helper_spec.rb"},{"name":"link_to_tracking returns tracking link if available","suite":"Spree::BaseHelper at ./spec/helpers/base_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/helpers/base_helper_spec.rb"},{"name":"link_to_tracking returns tracking without link if link unavailable","suite":"Spree::BaseHelper at ./spec/helpers/base_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2\"}}","suiteSourceFile":"core/spec/helpers/base_helper_spec.rb"},{"name":"link_to_tracking returns nothing when no shipping method","suite":"Spree::BaseHelper at ./spec/helpers/base_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3\"}}","suiteSourceFile":"core/spec/helpers/base_helper_spec.rb"},{"name":"link_to_tracking returns nothing when no tracking","suite":"Spree::BaseHelper at ./spec/helpers/base_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:4\"}}","suiteSourceFile":"core/spec/helpers/base_helper_spec.rb"},{"name":"spree_base_cache_key when try_spree_current_user defined when admin user returns base cache key","suite":"Spree::BaseHelper at ./spec/helpers/base_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:1:1\"}}","suiteSourceFile":"core/spec/helpers/base_helper_spec.rb"},{"name":"spree_base_cache_key when try_spree_current_user defined when user without admin role returns base cache key","suite":"Spree::BaseHelper at ./spec/helpers/base_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:2:1\"}}","suiteSourceFile":"core/spec/helpers/base_helper_spec.rb"},{"name":"spree_base_cache_key when try_spree_current_user defined when spree_current_user is nil returns base cache key","suite":"Spree::BaseHelper at ./spec/helpers/base_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:3:1\"}}","suiteSourceFile":"core/spec/helpers/base_helper_spec.rb"},{"name":"spree_base_cache_key when try_spree_current_user is undefined returns base cache key","suite":"Spree::BaseHelper at ./spec/helpers/base_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1\"}}","suiteSourceFile":"core/spec/helpers/base_helper_spec.rb"},{"name":"pretty_time prints in a format","suite":"Spree::BaseHelper at ./spec/helpers/base_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","suiteSourceFile":"core/spec/helpers/base_helper_spec.rb"},{"name":"pretty_time return empty string when nil is supplied","suite":"Spree::BaseHelper at ./spec/helpers/base_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2\"}}","suiteSourceFile":"core/spec/helpers/base_helper_spec.rb"},{"name":"pretty_date prints in a format","suite":"Spree::BaseHelper at ./spec/helpers/base_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","suiteSourceFile":"core/spec/helpers/base_helper_spec.rb"},{"name":"pretty_date return empty string when nil is supplied","suite":"Spree::BaseHelper at ./spec/helpers/base_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2\"}}","suiteSourceFile":"core/spec/helpers/base_helper_spec.rb"},{"name":"#display_price when there is no current order returns the price including default vat","suite":"Spree::BaseHelper at ./spec/helpers/base_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1:1\"}}","suiteSourceFile":"core/spec/helpers/base_helper_spec.rb"},{"name":"#display_price when there is no current order with a default VAT returns the price adding the VAT","suite":"Spree::BaseHelper at ./spec/helpers/base_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1:2:1\"}}","suiteSourceFile":"core/spec/helpers/base_helper_spec.rb"},{"name":"#display_price with an order that has a tax zone that matches no VAT returns the price excluding VAT","suite":"Spree::BaseHelper at ./spec/helpers/base_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2:1:1\"}}","suiteSourceFile":"core/spec/helpers/base_helper_spec.rb"},{"name":"#display_price with an order that has a tax zone that matches a VAT returns the price adding the VAT","suite":"Spree::BaseHelper at ./spec/helpers/base_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2:2:1\"}}","suiteSourceFile":"core/spec/helpers/base_helper_spec.rb"},{"name":"#spree_favicon_path when a store has its own favicon example at ./spec/helpers/base_helper_spec.rb:324","suite":"Spree::BaseHelper at ./spec/helpers/base_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1:1\"}}","suiteSourceFile":"core/spec/helpers/base_helper_spec.rb"},{"name":"#spree_favicon_path when a store has no favicon example at ./spec/helpers/base_helper_spec.rb:331","suite":"Spree::BaseHelper at ./spec/helpers/base_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:2:1\"}}","suiteSourceFile":"core/spec/helpers/base_helper_spec.rb"},{"name":"#supported_currency_options example at ./spec/helpers/currency_helper_spec.rb:12","suite":"Spree::CurrencyHelper at ./spec/helpers/currency_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/helpers/currency_helper_spec.rb"},{"name":"#should_render_currency_dropdown? store with multiple currencies example at ./spec/helpers/currency_helper_spec.rb:17","suite":"Spree::CurrencyHelper at ./spec/helpers/currency_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","suiteSourceFile":"core/spec/helpers/currency_helper_spec.rb"},{"name":"#should_render_currency_dropdown? store with single currency example at ./spec/helpers/currency_helper_spec.rb:23","suite":"Spree::CurrencyHelper at ./spec/helpers/currency_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","suiteSourceFile":"core/spec/helpers/currency_helper_spec.rb"},{"name":"#currency_symbol example at ./spec/helpers/currency_helper_spec.rb:28","suite":"Spree::CurrencyHelper at ./spec/helpers/currency_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/helpers/currency_helper_spec.rb"},{"name":"#currency_presentation example at ./spec/helpers/currency_helper_spec.rb:32","suite":"Spree::CurrencyHelper at ./spec/helpers/currency_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/helpers/currency_helper_spec.rb"},{"name":"#currency_money returns Money::Currency instance for given currency","suite":"Spree::CurrencyHelper at ./spec/helpers/currency_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","suiteSourceFile":"core/spec/helpers/currency_helper_spec.rb"},{"name":"#currency_money uses current_currency when no argument is provided","suite":"Spree::CurrencyHelper at ./spec/helpers/currency_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2\"}}","suiteSourceFile":"core/spec/helpers/currency_helper_spec.rb"},{"name":"#preferred_currencies returns array of supported currencies from current store as `Money::Currency`","suite":"Spree::CurrencyHelper at ./spec/helpers/currency_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","suiteSourceFile":"core/spec/helpers/currency_helper_spec.rb"},{"name":"#spree_image_tag returns an image tag with the correct url","suite":"Spree::ImagesHelper at ./spec/helpers/images_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/helpers/images_helper_spec.rb"},{"name":"#spree_image_tag when variant option is provided passes only variant to spree_image_url and excludes it from image_tag options","suite":"Spree::ImagesHelper at ./spec/helpers/images_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/helpers/images_helper_spec.rb"},{"name":"#spree_image_tag when variant option is provided ignores width, height, and format when variant is provided","suite":"Spree::ImagesHelper at ./spec/helpers/images_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2\"}}","suiteSourceFile":"core/spec/helpers/images_helper_spec.rb"},{"name":"#spree_image_tag when image is not attached returns nil","suite":"Spree::ImagesHelper at ./spec/helpers/images_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","suiteSourceFile":"core/spec/helpers/images_helper_spec.rb"},{"name":"#spree_image_tag when image is not variable returns nil","suite":"Spree::ImagesHelper at ./spec/helpers/images_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1\"}}","suiteSourceFile":"core/spec/helpers/images_helper_spec.rb"},{"name":"#spree_image_url supports blob","suite":"Spree::ImagesHelper at ./spec/helpers/images_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/helpers/images_helper_spec.rb"},{"name":"#spree_image_url when image is not attached returns nil","suite":"Spree::ImagesHelper at ./spec/helpers/images_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","suiteSourceFile":"core/spec/helpers/images_helper_spec.rb"},{"name":"#spree_image_url when image is not variable returns nil","suite":"Spree::ImagesHelper at ./spec/helpers/images_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:1\"}}","suiteSourceFile":"core/spec/helpers/images_helper_spec.rb"},{"name":"#spree_image_url when width and height are present returns a url with resize_to_fill","suite":"Spree::ImagesHelper at ./spec/helpers/images_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:4:1\"}}","suiteSourceFile":"core/spec/helpers/images_helper_spec.rb"},{"name":"#spree_image_url when only width is present returns a url with resize_to_limit","suite":"Spree::ImagesHelper at ./spec/helpers/images_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:5:1\"}}","suiteSourceFile":"core/spec/helpers/images_helper_spec.rb"},{"name":"#spree_image_url when format is provided returns a url with the correct format","suite":"Spree::ImagesHelper at ./spec/helpers/images_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:6:1\"}}","suiteSourceFile":"core/spec/helpers/images_helper_spec.rb"},{"name":"#spree_image_url when variant option is provided uses the named variant directly","suite":"Spree::ImagesHelper at ./spec/helpers/images_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:7:1\"}}","suiteSourceFile":"core/spec/helpers/images_helper_spec.rb"},{"name":"#spree_image_url when variant option is provided ignores width and height when variant is provided","suite":"Spree::ImagesHelper at ./spec/helpers/images_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:7:2\"}}","suiteSourceFile":"core/spec/helpers/images_helper_spec.rb"},{"name":"#spree_asset_aspect_ratio when attachment is not present returns nil","suite":"Spree::ImagesHelper at ./spec/helpers/images_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","suiteSourceFile":"core/spec/helpers/images_helper_spec.rb"},{"name":"#spree_asset_aspect_ratio when attachment is not analyzed returns nil","suite":"Spree::ImagesHelper at ./spec/helpers/images_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","suiteSourceFile":"core/spec/helpers/images_helper_spec.rb"},{"name":"#spree_asset_aspect_ratio when aspect_ratio is present in metadata returns the aspect ratio","suite":"Spree::ImagesHelper at ./spec/helpers/images_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3:1\"}}","suiteSourceFile":"core/spec/helpers/images_helper_spec.rb"},{"name":"#spree_asset_aspect_ratio when calculating aspect ratio from dimensions when height is greater than width returns the correct ratio","suite":"Spree::ImagesHelper at ./spec/helpers/images_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4:1:1\"}}","suiteSourceFile":"core/spec/helpers/images_helper_spec.rb"},{"name":"#spree_asset_aspect_ratio when calculating aspect ratio from dimensions when width is greater than height returns the correct ratio","suite":"Spree::ImagesHelper at ./spec/helpers/images_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4:2:1\"}}","suiteSourceFile":"core/spec/helpers/images_helper_spec.rb"},{"name":"#spree_asset_aspect_ratio when calculating aspect ratio from dimensions when width equals height returns 1.0","suite":"Spree::ImagesHelper at ./spec/helpers/images_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4:3:1\"}}","suiteSourceFile":"core/spec/helpers/images_helper_spec.rb"},{"name":"#all_locales_options example at ./spec/helpers/locale_helper_spec.rb:25","suite":"Spree::LocaleHelper at ./spec/helpers/locale_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/helpers/locale_helper_spec.rb"},{"name":"#available_locales_options example at ./spec/helpers/locale_helper_spec.rb:34","suite":"Spree::LocaleHelper at ./spec/helpers/locale_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/helpers/locale_helper_spec.rb"},{"name":"#supported_locales_options example at ./spec/helpers/locale_helper_spec.rb:40","suite":"Spree::LocaleHelper at ./spec/helpers/locale_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/helpers/locale_helper_spec.rb"},{"name":"#locale_presentation example at ./spec/helpers/locale_helper_spec.rb:44","suite":"Spree::LocaleHelper at ./spec/helpers/locale_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/helpers/locale_helper_spec.rb"},{"name":"#locale_presentation returns the locale when no translation exists","suite":"Spree::LocaleHelper at ./spec/helpers/locale_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2\"}}","suiteSourceFile":"core/spec/helpers/locale_helper_spec.rb"},{"name":"#should_render_locale_dropdown? store with multiple locales example at ./spec/helpers/locale_helper_spec.rb:55","suite":"Spree::LocaleHelper at ./spec/helpers/locale_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:1\"}}","suiteSourceFile":"core/spec/helpers/locale_helper_spec.rb"},{"name":"#should_render_locale_dropdown? store with single locale example at ./spec/helpers/locale_helper_spec.rb:61","suite":"Spree::LocaleHelper at ./spec/helpers/locale_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1\"}}","suiteSourceFile":"core/spec/helpers/locale_helper_spec.rb"},{"name":"#variant_price_diff when variant is same as master example at ./spec/helpers/products_helper_spec.rb:31","suite":"Spree::ProductsHelper at ./spec/helpers/products_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/helpers/products_helper_spec.rb"},{"name":"#variant_price_diff when the master has no price example at ./spec/helpers/products_helper_spec.rb:37","suite":"Spree::ProductsHelper at ./spec/helpers/products_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/helpers/products_helper_spec.rb"},{"name":"#variant_price_diff when currency is default when variant is more than master example at ./spec/helpers/products_helper_spec.rb:44","suite":"Spree::ProductsHelper at ./spec/helpers/products_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1:1\"}}","suiteSourceFile":"core/spec/helpers/products_helper_spec.rb"},{"name":"#variant_price_diff when currency is default when variant is more than master example at ./spec/helpers/products_helper_spec.rb:46","suite":"Spree::ProductsHelper at ./spec/helpers/products_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1:2\"}}","suiteSourceFile":"core/spec/helpers/products_helper_spec.rb"},{"name":"#variant_price_diff when currency is default when variant is less than master example at ./spec/helpers/products_helper_spec.rb:52","suite":"Spree::ProductsHelper at ./spec/helpers/products_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:2:1\"}}","suiteSourceFile":"core/spec/helpers/products_helper_spec.rb"},{"name":"#variant_price_diff when currency is JPY when variant is more than master example at ./spec/helpers/products_helper_spec.rb:64","suite":"Spree::ProductsHelper at ./spec/helpers/products_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1:1\"}}","suiteSourceFile":"core/spec/helpers/products_helper_spec.rb"},{"name":"#variant_price_diff when currency is JPY when variant is less than master example at ./spec/helpers/products_helper_spec.rb:70","suite":"Spree::ProductsHelper at ./spec/helpers/products_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:2:1\"}}","suiteSourceFile":"core/spec/helpers/products_helper_spec.rb"},{"name":"#variant_price_full is nil when all variant prices are equal","suite":"Spree::ProductsHelper at ./spec/helpers/products_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3\"}}","suiteSourceFile":"core/spec/helpers/products_helper_spec.rb"},{"name":"#variant_price_full when currency is default returns the variant price if the price is different than master","suite":"Spree::ProductsHelper at ./spec/helpers/products_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","suiteSourceFile":"core/spec/helpers/products_helper_spec.rb"},{"name":"#variant_price_full when currency is JPY returns the variant price if the price is different than master","suite":"Spree::ProductsHelper at ./spec/helpers/products_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","suiteSourceFile":"core/spec/helpers/products_helper_spec.rb"},{"name":"#line_item_description_text behaves like line item descriptions variant has a blank description example at ./spec/helpers/products_helper_spec.rb:124","suite":"Spree::ProductsHelper at ./spec/helpers/products_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1:1\"}}","suiteSourceFile":"core/spec/helpers/products_helper_spec.rb"},{"name":"#line_item_description_text behaves like line item descriptions variant has a description example at ./spec/helpers/products_helper_spec.rb:130","suite":"Spree::ProductsHelper at ./spec/helpers/products_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:2:1\"}}","suiteSourceFile":"core/spec/helpers/products_helper_spec.rb"},{"name":"#line_item_description_text behaves like line item descriptions description has nonbreaking spaces example at ./spec/helpers/products_helper_spec.rb:136","suite":"Spree::ProductsHelper at ./spec/helpers/products_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:3:1\"}}","suiteSourceFile":"core/spec/helpers/products_helper_spec.rb"},{"name":"#line_item_description_text behaves like line item descriptions description has line endings example at ./spec/helpers/products_helper_spec.rb:142","suite":"Spree::ProductsHelper at ./spec/helpers/products_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:4:1\"}}","suiteSourceFile":"core/spec/helpers/products_helper_spec.rb"},{"name":"#cache_key_for_products when there is a maximum updated date example at ./spec/helpers/products_helper_spec.rb:175","suite":"Spree::ProductsHelper at ./spec/helpers/products_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1\"}}","suiteSourceFile":"core/spec/helpers/products_helper_spec.rb"},{"name":"#cache_key_for_products when there is no considered maximum updated date example at ./spec/helpers/products_helper_spec.rb:186","suite":"Spree::ProductsHelper at ./spec/helpers/products_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1\"}}","suiteSourceFile":"core/spec/helpers/products_helper_spec.rb"},{"name":"#cache_key_for_products with Taxon ID present example at ./spec/helpers/products_helper_spec.rb:197","suite":"Spree::ProductsHelper at ./spec/helpers/products_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3:1\"}}","suiteSourceFile":"core/spec/helpers/products_helper_spec.rb"},{"name":"#cache_key_for_products with `additional_cache_key` passed example at ./spec/helpers/products_helper_spec.rb:210","suite":"Spree::ProductsHelper at ./spec/helpers/products_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:4:1\"}}","suiteSourceFile":"core/spec/helpers/products_helper_spec.rb"},{"name":"#cache_key_for_product when there is a current tax zone includes the current_tax_zone","suite":"Spree::ProductsHelper at ./spec/helpers/products_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:1\"}}","suiteSourceFile":"core/spec/helpers/products_helper_spec.rb"},{"name":"#cache_key_for_product when there is no current tax zone example at ./spec/helpers/products_helper_spec.rb:235","suite":"Spree::ProductsHelper at ./spec/helpers/products_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1\"}}","suiteSourceFile":"core/spec/helpers/products_helper_spec.rb"},{"name":"#cache_key_for_product when current_price_options includes nil values does not include nil values","suite":"Spree::ProductsHelper at ./spec/helpers/products_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3:1\"}}","suiteSourceFile":"core/spec/helpers/products_helper_spec.rb"},{"name":"#cache_key_for_product when current_price_options includes values that do not implement cache_key includes string representations of these values","suite":"Spree::ProductsHelper at ./spec/helpers/products_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:4:1\"}}","suiteSourceFile":"core/spec/helpers/products_helper_spec.rb"},{"name":"#cache_key_for_product when keys in the options hash are inserted in non-alphabetical order the values are nevertheless returned in alphabetical order of their keys","suite":"Spree::ProductsHelper at ./spec/helpers/products_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:5:1\"}}","suiteSourceFile":"core/spec/helpers/products_helper_spec.rb"},{"name":"#cache_key_for_product given possible promotions example at ./spec/helpers/products_helper_spec.rb:286","suite":"Spree::ProductsHelper at ./spec/helpers/products_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:6:1\"}}","suiteSourceFile":"core/spec/helpers/products_helper_spec.rb"},{"name":"#shipment_tracking_link_to with tracking and tracking_url creates link with tracking as a name","suite":"Spree::ShipmentHelper at ./spec/helpers/shipment_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/helpers/shipment_helper_spec.rb"},{"name":"#shipment_tracking_link_to with name passed in params creates link with passed value as a name","suite":"Spree::ShipmentHelper at ./spec/helpers/shipment_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/helpers/shipment_helper_spec.rb"},{"name":"#shipment_tracking_link_to with tracking_url only creates a link with tracking_url as a name","suite":"Spree::ShipmentHelper at ./spec/helpers/shipment_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","suiteSourceFile":"core/spec/helpers/shipment_helper_spec.rb"},{"name":"#shipment_tracking_link_to with no tracking_url returns empty string","suite":"Spree::ShipmentHelper at ./spec/helpers/shipment_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1\"}}","suiteSourceFile":"core/spec/helpers/shipment_helper_spec.rb"},{"name":"#shipment_tracking_link_to with options sets options for link","suite":"Spree::ShipmentHelper at ./spec/helpers/shipment_helper_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5:1\"}}","suiteSourceFile":"core/spec/helpers/shipment_helper_spec.rb"},{"name":"does not have missing keys","suite":"I18n at ./spec/i18n_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","suiteSourceFile":"core/spec/i18n_spec.rb"},{"name":"files are normalized","suite":"I18n at ./spec/i18n_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2\"}}","suiteSourceFile":"core/spec/i18n_spec.rb"},{"name":"does not have inconsistent interpolations","suite":"I18n at ./spec/i18n_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3\"}}","suiteSourceFile":"core/spec/i18n_spec.rb"},{"name":"geocodes the address","suite":"Spree::Addresses::GeocodeAddressJob at ./spec/jobs/spree/addresses/geocode_address_job_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","suiteSourceFile":"core/spec/jobs/spree/addresses/geocode_address_job_spec.rb"},{"name":"when the address cannot be geocoded handles the error","suite":"Spree::Addresses::GeocodeAddressJob at ./spec/jobs/spree/addresses/geocode_address_job_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/jobs/spree/addresses/geocode_address_job_spec.rb"},{"name":"#perform generates coupon codes","suite":"Spree::CouponCodes::BulkGenerateJob at ./spec/jobs/spree/coupon_codes/bulk_generate_job_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/jobs/spree/coupon_codes/bulk_generate_job_spec.rb"},{"name":"#perform calls generate on the export","suite":"Spree::Exports::GenerateJob at ./spec/jobs/spree/exports/generate_job_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/jobs/spree/exports/generate_job_spec.rb"},{"name":"#perform generates gift cards","suite":"Spree::GiftCards::BulkGenerateJob at ./spec/jobs/spree/gift_cards/bulk_generate_job_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/jobs/spree/gift_cards/bulk_generate_job_spec.rb"},{"name":"is queued in the correct queue","suite":"Spree::Images::SaveFromUrlJob at ./spec/jobs/spree/images/save_from_url_job_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","suiteSourceFile":"core/spec/jobs/spree/images/save_from_url_job_spec.rb"},{"name":"can be enqueued","suite":"Spree::Images::SaveFromUrlJob at ./spec/jobs/spree/images/save_from_url_job_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2\"}}","suiteSourceFile":"core/spec/jobs/spree/images/save_from_url_job_spec.rb"},{"name":"when performing the job downloads and attaches image from the URL","suite":"Spree::Images::SaveFromUrlJob at ./spec/jobs/spree/images/save_from_url_job_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/jobs/spree/images/save_from_url_job_spec.rb"},{"name":"when performing the job with position sets the position if provided","suite":"Spree::Images::SaveFromUrlJob at ./spec/jobs/spree/images/save_from_url_job_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","suiteSourceFile":"core/spec/jobs/spree/images/save_from_url_job_spec.rb"},{"name":"when performing the job when image already exists with the given external_url does not re-download but triggers save!","suite":"Spree::Images::SaveFromUrlJob at ./spec/jobs/spree/images/save_from_url_job_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3:1\"}}","suiteSourceFile":"core/spec/jobs/spree/images/save_from_url_job_spec.rb"},{"name":"when performing the job when skip_import? returns true does not download the image","suite":"Spree::Images::SaveFromUrlJob at ./spec/jobs/spree/images/save_from_url_job_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4:1\"}}","suiteSourceFile":"core/spec/jobs/spree/images/save_from_url_job_spec.rb"},{"name":"creates import rows from the CSV file","suite":"Spree::Imports::CreateRowsJob at ./spec/jobs/spree/imports/create_rows_job_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","suiteSourceFile":"core/spec/jobs/spree/imports/create_rows_job_spec.rb"},{"name":"transitions import to processing if not already processing","suite":"Spree::Imports::CreateRowsJob at ./spec/jobs/spree/imports/create_rows_job_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2\"}}","suiteSourceFile":"core/spec/jobs/spree/imports/create_rows_job_spec.rb"},{"name":"persists rows count","suite":"Spree::Imports::CreateRowsJob at ./spec/jobs/spree/imports/create_rows_job_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3\"}}","suiteSourceFile":"core/spec/jobs/spree/imports/create_rows_job_spec.rb"},{"name":"enqueues process_rows_async after rows creation","suite":"Spree::Imports::CreateRowsJob at ./spec/jobs/spree/imports/create_rows_job_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4\"}}","suiteSourceFile":"core/spec/jobs/spree/imports/create_rows_job_spec.rb"},{"name":"when CSV is malformed sets processing_errors and fails the import","suite":"Spree::Imports::CreateRowsJob at ./spec/jobs/spree/imports/create_rows_job_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","suiteSourceFile":"core/spec/jobs/spree/imports/create_rows_job_spec.rb"},{"name":"processes pending and failed rows","suite":"Spree::Imports::ProcessRowsJob at ./spec/jobs/spree/imports/process_rows_job_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","suiteSourceFile":"core/spec/jobs/spree/imports/process_rows_job_spec.rb"},{"name":"marks import as complete after processing all rows","suite":"Spree::Imports::ProcessRowsJob at ./spec/jobs/spree/imports/process_rows_job_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2\"}}","suiteSourceFile":"core/spec/jobs/spree/imports/process_rows_job_spec.rb"},{"name":"#perform when store_product exists calls refresh_metrics! on the store_product","suite":"Spree::Products::RefreshMetricsJob at ./spec/jobs/spree/products/refresh_metrics_job_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/jobs/spree/products/refresh_metrics_job_spec.rb"},{"name":"#perform when store_product does not exist does nothing","suite":"Spree::Products::RefreshMetricsJob at ./spec/jobs/spree/products/refresh_metrics_job_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/jobs/spree/products/refresh_metrics_job_spec.rb"},{"name":"#perform when product_id is invalid does nothing","suite":"Spree::Products::RefreshMetricsJob at ./spec/jobs/spree/products/refresh_metrics_job_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","suiteSourceFile":"core/spec/jobs/spree/products/refresh_metrics_job_spec.rb"},{"name":"#perform when store_id is invalid does nothing","suite":"Spree::Products::RefreshMetricsJob at ./spec/jobs/spree/products/refresh_metrics_job_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1\"}}","suiteSourceFile":"core/spec/jobs/spree/products/refresh_metrics_job_spec.rb"},{"name":"#perform touches all specified taxons","suite":"Spree::Products::TouchTaxonsJob at ./spec/jobs/spree/products/touch_taxons_job_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/jobs/spree/products/touch_taxons_job_spec.rb"},{"name":"#perform touches all specified taxonomies","suite":"Spree::Products::TouchTaxonsJob at ./spec/jobs/spree/products/touch_taxons_job_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/jobs/spree/products/touch_taxons_job_spec.rb"},{"name":"#perform does not touch other taxons","suite":"Spree::Products::TouchTaxonsJob at ./spec/jobs/spree/products/touch_taxons_job_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/jobs/spree/products/touch_taxons_job_spec.rb"},{"name":"enqueues the creation of the stock location stock items","suite":"Spree::StockLocations::StockItems::CreateJob at ./spec/jobs/spree/stock_locations/stock_items/create_job_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","suiteSourceFile":"core/spec/jobs/spree/stock_locations/stock_items/create_job_spec.rb"},{"name":"enqueues the removal of variants line items","suite":"Spree::Variants::RemoveFromIncompleteOrdersJob at ./spec/jobs/spree/variants/remove_from_incomplete_orders_job_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","suiteSourceFile":"core/spec/jobs/spree/variants/remove_from_incomplete_orders_job_spec.rb"},{"name":"removes the line item from the order","suite":"Spree::Variants::RemoveLineItemJob at ./spec/jobs/spree/variants/remove_line_item_job_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","suiteSourceFile":"core/spec/jobs/spree/variants/remove_line_item_job_spec.rb"},{"name":"touches all variants with the given IDs","suite":"Spree::Variants::TouchJob at ./spec/jobs/spree/variants/touch_job_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","suiteSourceFile":"core/spec/jobs/spree/variants/touch_job_spec.rb"},{"name":"handles empty array","suite":"Spree::Variants::TouchJob at ./spec/jobs/spree/variants/touch_job_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2\"}}","suiteSourceFile":"core/spec/jobs/spree/variants/touch_job_spec.rb"},{"name":"adds has_one :calculator relationship","suite":"Spree::CalculatedAdjustments at ./spec/lib/calculated_adjustments_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","suiteSourceFile":"core/spec/lib/calculated_adjustments_spec.rb"},{"name":"translates within the spree scope","suite":"i18n at ./spec/lib/i18n_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2\"}}","suiteSourceFile":"core/spec/lib/i18n_spec.rb"},{"name":"raise error without any context when using a path","suite":"i18n at ./spec/lib/i18n_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3\"}}","suiteSourceFile":"core/spec/lib/i18n_spec.rb"},{"name":"prepends a string scope","suite":"i18n at ./spec/lib/i18n_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4\"}}","suiteSourceFile":"core/spec/lib/i18n_spec.rb"},{"name":"prepends to an array scope","suite":"i18n at ./spec/lib/i18n_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5\"}}","suiteSourceFile":"core/spec/lib/i18n_spec.rb"},{"name":"returns two translations","suite":"i18n at ./spec/lib/i18n_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6\"}}","suiteSourceFile":"core/spec/lib/i18n_spec.rb"},{"name":"returns reasonable string for missing translations","suite":"i18n at ./spec/lib/i18n_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7\"}}","suiteSourceFile":"core/spec/lib/i18n_spec.rb"},{"name":"#available_locales when SpreeI18n is defined returns all locales from the SpreeI18n","suite":"i18n at ./spec/lib/i18n_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/lib/i18n_spec.rb"},{"name":"#available_locales when SpreeI18n is defined returns an array with the string \"en\" removed","suite":"i18n at ./spec/lib/i18n_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2\"}}","suiteSourceFile":"core/spec/lib/i18n_spec.rb"},{"name":"#available_locales when SpreeI18n is not defined returns just default locale","suite":"i18n at ./spec/lib/i18n_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/lib/i18n_spec.rb"},{"name":"missed + unused translations missed translations logs missing translations","suite":"i18n at ./spec/lib/i18n_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1:1\"}}","suiteSourceFile":"core/spec/lib/i18n_spec.rb"},{"name":"missed + unused translations missed translations does not log present translations","suite":"i18n at ./spec/lib/i18n_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1:2\"}}","suiteSourceFile":"core/spec/lib/i18n_spec.rb"},{"name":"missed + unused translations missed translations does not break when asked for multiple translations","suite":"i18n at ./spec/lib/i18n_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1:3\"}}","suiteSourceFile":"core/spec/lib/i18n_spec.rb"},{"name":"missed + unused translations unused translations logs translations that aren't used","suite":"i18n at ./spec/lib/i18n_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2:1\"}}","suiteSourceFile":"core/spec/lib/i18n_spec.rb"},{"name":"missed + unused translations unused translations does not log used translations","suite":"i18n at ./spec/lib/i18n_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2:2\"}}","suiteSourceFile":"core/spec/lib/i18n_spec.rb"},{"name":"#current_ability returns Spree::Ability instance","suite":"Spree::Core::ControllerHelpers::Auth at ./spec/lib/spree/core/controller_helpers/auth_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/controller_helpers/auth_spec.rb"},{"name":"#store_location sets session return url","suite":"Spree::Core::ControllerHelpers::Auth at ./spec/lib/spree/core/controller_helpers/auth_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/controller_helpers/auth_spec.rb"},{"name":"#try_spree_current_user calls spree_current_user when define spree_current_user method","suite":"Spree::Core::ControllerHelpers::Auth at ./spec/lib/spree/core/controller_helpers/auth_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/controller_helpers/auth_spec.rb"},{"name":"#try_spree_current_user calls current_spree_user when define current_spree_user method","suite":"Spree::Core::ControllerHelpers::Auth at ./spec/lib/spree/core/controller_helpers/auth_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","suiteSourceFile":"core/spec/lib/spree/core/controller_helpers/auth_spec.rb"},{"name":"#try_spree_current_user returns nil","suite":"Spree::Core::ControllerHelpers::Auth at ./spec/lib/spree/core/controller_helpers/auth_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3\"}}","suiteSourceFile":"core/spec/lib/spree/core/controller_helpers/auth_spec.rb"},{"name":"#current_currency returns current store default currency","suite":"Spree::Core::ControllerHelpers::Currency at ./spec/lib/spree/core/controller_helpers/currency_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/controller_helpers/currency_spec.rb"},{"name":"#current_currency sets Spree::Current.currency","suite":"Spree::Core::ControllerHelpers::Currency at ./spec/lib/spree/core/controller_helpers/currency_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/lib/spree/core/controller_helpers/currency_spec.rb"},{"name":"#supported_currencies returns supported currencies","suite":"Spree::Core::ControllerHelpers::Currency at ./spec/lib/spree/core/controller_helpers/currency_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/controller_helpers/currency_spec.rb"},{"name":"#currency_param same as store default locale example at ./spec/lib/spree/core/controller_helpers/currency_spec.rb:41","suite":"Spree::Core::ControllerHelpers::Currency at ./spec/lib/spree/core/controller_helpers/currency_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/controller_helpers/currency_spec.rb"},{"name":"#currency_param different than store locale example at ./spec/lib/spree/core/controller_helpers/currency_spec.rb:47","suite":"Spree::Core::ControllerHelpers::Currency at ./spec/lib/spree/core/controller_helpers/currency_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/controller_helpers/currency_spec.rb"},{"name":"#current_locale taking locale from user and store with locale set returns locale set within user","suite":"Spree::Core::ControllerHelpers::Locale at ./spec/lib/spree/core/controller_helpers/locale_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/controller_helpers/locale_spec.rb"},{"name":"#current_locale not taking locale from user store with locale set returns current store default locale","suite":"Spree::Core::ControllerHelpers::Locale at ./spec/lib/spree/core/controller_helpers/locale_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/controller_helpers/locale_spec.rb"},{"name":"#current_locale not taking locale from user store with locale set return supported locale when passed as param","suite":"Spree::Core::ControllerHelpers::Locale at ./spec/lib/spree/core/controller_helpers/locale_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1:2\"}}","suiteSourceFile":"core/spec/lib/spree/core/controller_helpers/locale_spec.rb"},{"name":"#current_locale not taking locale from user config_locale present returns config_locale if present","suite":"Spree::Core::ControllerHelpers::Locale at ./spec/lib/spree/core/controller_helpers/locale_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/controller_helpers/locale_spec.rb"},{"name":"#current_locale not taking locale from user store without locale set without I18n.default_locale set fallbacks to english","suite":"Spree::Core::ControllerHelpers::Locale at ./spec/lib/spree/core/controller_helpers/locale_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:3:1:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/controller_helpers/locale_spec.rb"},{"name":"#current_locale not taking locale from user store without locale set with I18n.default_locale set fallbacks to the default application locale","suite":"Spree::Core::ControllerHelpers::Locale at ./spec/lib/spree/core/controller_helpers/locale_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:3:2:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/controller_helpers/locale_spec.rb"},{"name":"#supported_locales returns supported currencies","suite":"Spree::Core::ControllerHelpers::Locale at ./spec/lib/spree/core/controller_helpers/locale_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/controller_helpers/locale_spec.rb"},{"name":"#supported_locales returns supported locales","suite":"Spree::Core::ControllerHelpers::Locale at ./spec/lib/spree/core/controller_helpers/locale_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","suiteSourceFile":"core/spec/lib/spree/core/controller_helpers/locale_spec.rb"},{"name":"#locale_param same as store default locale example at ./spec/lib/spree/core/controller_helpers/locale_spec.rb:102","suite":"Spree::Core::ControllerHelpers::Locale at ./spec/lib/spree/core/controller_helpers/locale_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/controller_helpers/locale_spec.rb"},{"name":"#locale_param different than store locale example at ./spec/lib/spree/core/controller_helpers/locale_spec.rb:110","suite":"Spree::Core::ControllerHelpers::Locale at ./spec/lib/spree/core/controller_helpers/locale_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/controller_helpers/locale_spec.rb"},{"name":"#set_locale sets the default and the current locale","suite":"Spree::Core::ControllerHelpers::Locale at ./spec/lib/spree/core/controller_helpers/locale_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/controller_helpers/locale_spec.rb"},{"name":"#set_locale when always using translations sets only the current locale","suite":"Spree::Core::ControllerHelpers::Locale at ./spec/lib/spree/core/controller_helpers/locale_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/controller_helpers/locale_spec.rb"},{"name":"#simple_current_order returns an empty order","suite":"Spree::Core::ControllerHelpers::Order at ./spec/lib/spree/core/controller_helpers/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/controller_helpers/order_spec.rb"},{"name":"#simple_current_order returns Spree::Order instance","suite":"Spree::Core::ControllerHelpers::Order at ./spec/lib/spree/core/controller_helpers/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/lib/spree/core/controller_helpers/order_spec.rb"},{"name":"#current_order create_order_if_necessary option is false returns current order","suite":"Spree::Core::ControllerHelpers::Order at ./spec/lib/spree/core/controller_helpers/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/controller_helpers/order_spec.rb"},{"name":"#current_order create_order_if_necessary option is true creates new order","suite":"Spree::Core::ControllerHelpers::Order at ./spec/lib/spree/core/controller_helpers/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/controller_helpers/order_spec.rb"},{"name":"#current_order creating a token cookie for a cart with token creates a new token cookie","suite":"Spree::Core::ControllerHelpers::Order at ./spec/lib/spree/core/controller_helpers/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:1:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/controller_helpers/order_spec.rb"},{"name":"#current_order creating a token cookie for a cart with token on a custom domain creates a new token cookie on a custom domain","suite":"Spree::Core::ControllerHelpers::Order at ./spec/lib/spree/core/controller_helpers/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:1:2:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/controller_helpers/order_spec.rb"},{"name":"#current_order creating a token cookie for a cart without token does nothing","suite":"Spree::Core::ControllerHelpers::Order at ./spec/lib/spree/core/controller_helpers/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:2:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/controller_helpers/order_spec.rb"},{"name":"#current_order creating a token cookie with a checkout token creates a new token cookie","suite":"Spree::Core::ControllerHelpers::Order at ./spec/lib/spree/core/controller_helpers/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:3:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/controller_helpers/order_spec.rb"},{"name":"#current_order creating a token cookie with a checkout token on a custom domain creates a new token cookie on a custom domain","suite":"Spree::Core::ControllerHelpers::Order at ./spec/lib/spree/core/controller_helpers/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:3:2:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/controller_helpers/order_spec.rb"},{"name":"#current_order creating a token cookie for a checkout without token does nothing","suite":"Spree::Core::ControllerHelpers::Order at ./spec/lib/spree/core/controller_helpers/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:4:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/controller_helpers/order_spec.rb"},{"name":"#associate_user user is blank calls Spree::Order#associate_user! method","suite":"Spree::Core::ControllerHelpers::Order at ./spec/lib/spree/core/controller_helpers/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/controller_helpers/order_spec.rb"},{"name":"#associate_user user isn't blank does not calls Spree::Order#associate_user! method","suite":"Spree::Core::ControllerHelpers::Order at ./spec/lib/spree/core/controller_helpers/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/controller_helpers/order_spec.rb"},{"name":"#set_current_order user has some incomplete orders other than current one within the same store calls Spree::Order#merge!","suite":"Spree::Core::ControllerHelpers::Order at ./spec/lib/spree/core/controller_helpers/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/controller_helpers/order_spec.rb"},{"name":"#set_current_order user has some incomplete orders other than current one within different store does not call Spree::Order#merge!","suite":"Spree::Core::ControllerHelpers::Order at ./spec/lib/spree/core/controller_helpers/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:2:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/controller_helpers/order_spec.rb"},{"name":"#set_current_order user has no incomplete orders other than current one does not call Spree::Order#merge!","suite":"Spree::Core::ControllerHelpers::Order at ./spec/lib/spree/core/controller_helpers/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/controller_helpers/order_spec.rb"},{"name":"#current_currency returns current currency","suite":"Spree::Core::ControllerHelpers::Order at ./spec/lib/spree/core/controller_helpers/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/controller_helpers/order_spec.rb"},{"name":"#ip_address returns remote ip","suite":"Spree::Core::ControllerHelpers::Order at ./spec/lib/spree/core/controller_helpers/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/controller_helpers/order_spec.rb"},{"name":"#create_token_cookie creates a new token cookie","suite":"Spree::Core::ControllerHelpers::Order at ./spec/lib/spree/core/controller_helpers/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/controller_helpers/order_spec.rb"},{"name":"#build_searcher returns Spree::Core::Search::Base instance","suite":"Spree::Core::ControllerHelpers::Search at ./spec/lib/spree/core/controller_helpers/search_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/controller_helpers/search_spec.rb"},{"name":"#current_store default store returns current store","suite":"Spree::Core::ControllerHelpers::Store at ./spec/lib/spree/core/controller_helpers/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/controller_helpers/store_spec.rb"},{"name":"#current_store by domain returns current store","suite":"Spree::Core::ControllerHelpers::Store at ./spec/lib/spree/core/controller_helpers/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/controller_helpers/store_spec.rb"},{"name":"#current_store by subdomain returns current store","suite":"Spree::Core::ControllerHelpers::Store at ./spec/lib/spree/core/controller_helpers/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/controller_helpers/store_spec.rb"},{"name":"#ensure_current_store on an object that accepts multiple stores when the object has no stores associated associates the object with the current_store","suite":"Spree::Core::ControllerHelpers::Store at ./spec/lib/spree/core/controller_helpers/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/controller_helpers/store_spec.rb"},{"name":"#ensure_current_store on an object that accepts multiple stores when the object has a store pre assigned adds the new store without removing the original store","suite":"Spree::Core::ControllerHelpers::Store at ./spec/lib/spree/core/controller_helpers/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:2:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/controller_helpers/store_spec.rb"},{"name":"#ensure_current_store on an object that accepts multiple stores when the object has a store and the same store is attempted to be added object is not changed","suite":"Spree::Core::ControllerHelpers::Store at ./spec/lib/spree/core/controller_helpers/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:3:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/controller_helpers/store_spec.rb"},{"name":"#ensure_current_store on a object that accepts a single store when no store is present sets the current_store","suite":"Spree::Core::ControllerHelpers::Store at ./spec/lib/spree/core/controller_helpers/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/controller_helpers/store_spec.rb"},{"name":"#ensure_current_store on a object that accepts a single store when an object already has a store assigned raises an exception","suite":"Spree::Core::ControllerHelpers::Store at ./spec/lib/spree/core/controller_helpers/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:2:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/controller_helpers/store_spec.rb"},{"name":"#ensure_current_store on a object that accepts a single store when an object already has a store assigned and the same store is re-assigned no exception is raised","suite":"Spree::Core::ControllerHelpers::Store at ./spec/lib/spree/core/controller_helpers/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:3:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/controller_helpers/store_spec.rb"},{"name":"#ensure_current_store when object is nil returns nil","suite":"Spree::Core::ControllerHelpers::Store at ./spec/lib/spree/core/controller_helpers/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/controller_helpers/store_spec.rb"},{"name":"#current_price_options when there is a default tax zone when there is no current order returns the default tax zone","suite":"Spree::Core::ControllerHelpers::Store at ./spec/lib/spree/core/controller_helpers/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/controller_helpers/store_spec.rb"},{"name":"#current_price_options when there is a default tax zone when there is no current order sets Spree::Current.zone to the default tax zone","suite":"Spree::Core::ControllerHelpers::Store at ./spec/lib/spree/core/controller_helpers/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1:2\"}}","suiteSourceFile":"core/spec/lib/spree/core/controller_helpers/store_spec.rb"},{"name":"#current_price_options when there is a default tax zone when there is a current order example at ./spec/lib/spree/core/controller_helpers/store_spec.rb:164","suite":"Spree::Core::ControllerHelpers::Store at ./spec/lib/spree/core/controller_helpers/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:2:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/controller_helpers/store_spec.rb"},{"name":"#current_price_options when there is a default tax zone when there is a current order sets Spree::Current.zone to the order tax zone","suite":"Spree::Core::ControllerHelpers::Store at ./spec/lib/spree/core/controller_helpers/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:2:2\"}}","suiteSourceFile":"core/spec/lib/spree/core/controller_helpers/store_spec.rb"},{"name":"#current_price_options when there is no default tax zone when there is no current order when store has a checkout_zone returns the store checkout_zone","suite":"Spree::Core::ControllerHelpers::Store at ./spec/lib/spree/core/controller_helpers/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1:1:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/controller_helpers/store_spec.rb"},{"name":"#current_price_options when there is no default tax zone when there is no current order when store has a checkout_zone sets Spree::Current.zone to the store checkout_zone","suite":"Spree::Core::ControllerHelpers::Store at ./spec/lib/spree/core/controller_helpers/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1:1:2\"}}","suiteSourceFile":"core/spec/lib/spree/core/controller_helpers/store_spec.rb"},{"name":"#current_price_options when there is no default tax zone when there is no current order when store has no checkout_zone returns nil when asked for the current tax zone","suite":"Spree::Core::ControllerHelpers::Store at ./spec/lib/spree/core/controller_helpers/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1:2:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/controller_helpers/store_spec.rb"},{"name":"#current_price_options when there is no default tax zone when there is no current order when store has no checkout_zone sets Spree::Current.zone to nil","suite":"Spree::Core::ControllerHelpers::Store at ./spec/lib/spree/core/controller_helpers/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1:2:2\"}}","suiteSourceFile":"core/spec/lib/spree/core/controller_helpers/store_spec.rb"},{"name":"#current_price_options when there is no default tax zone when there is a current order example at ./spec/lib/spree/core/controller_helpers/store_spec.rb:225","suite":"Spree::Core::ControllerHelpers::Store at ./spec/lib/spree/core/controller_helpers/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:2:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/controller_helpers/store_spec.rb"},{"name":"#current_price_options when there is no default tax zone when there is a current order sets Spree::Current.zone to the order tax zone","suite":"Spree::Core::ControllerHelpers::Store at ./spec/lib/spree/core/controller_helpers/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:2:2\"}}","suiteSourceFile":"core/spec/lib/spree/core/controller_helpers/store_spec.rb"},{"name":"#raise_record_not_found_if_store_is_not_found when the store is not found raises an exception","suite":"Spree::Core::ControllerHelpers::Store at ./spec/lib/spree/core/controller_helpers/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/controller_helpers/store_spec.rb"},{"name":"#raise_record_not_found_if_store_is_not_found with root_domain set does not raise an exception","suite":"Spree::Core::ControllerHelpers::Store at ./spec/lib/spree/core/controller_helpers/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/controller_helpers/store_spec.rb"},{"name":"#raise_record_not_found_if_store_is_not_found when store is found does not raise an exception","suite":"Spree::Core::ControllerHelpers::Store at ./spec/lib/spree/core/controller_helpers/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/controller_helpers/store_spec.rb"},{"name":"#permitted_attributes returns Spree::PermittedAttributes module","suite":"Spree::Core::ControllerHelpers::StrongParameters at ./spec/lib/spree/core/controller_helpers/strong_parameters_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/controller_helpers/strong_parameters_spec.rb"},{"name":"#permitted_payment_attributes returns Array class","suite":"Spree::Core::ControllerHelpers::StrongParameters at ./spec/lib/spree/core/controller_helpers/strong_parameters_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/controller_helpers/strong_parameters_spec.rb"},{"name":"#permitted_checkout_attributes returns Array class","suite":"Spree::Core::ControllerHelpers::StrongParameters at ./spec/lib/spree/core/controller_helpers/strong_parameters_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/controller_helpers/strong_parameters_spec.rb"},{"name":"#permitted_order_attributes returns Array class","suite":"Spree::Core::ControllerHelpers::StrongParameters at ./spec/lib/spree/core/controller_helpers/strong_parameters_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/controller_helpers/strong_parameters_spec.rb"},{"name":"#permitted_product_attributes returns Array class","suite":"Spree::Core::ControllerHelpers::StrongParameters at ./spec/lib/spree/core/controller_helpers/strong_parameters_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/controller_helpers/strong_parameters_spec.rb"},{"name":"#permitted_store_attributes returns Array class","suite":"Spree::Core::ControllerHelpers::StrongParameters at ./spec/lib/spree/core/controller_helpers/strong_parameters_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/controller_helpers/strong_parameters_spec.rb"},{"name":"can import an order number","suite":"Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/importer/order_spec.rb"},{"name":"optionally add completed at","suite":"Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2\"}}","suiteSourceFile":"core/spec/lib/spree/core/importer/order_spec.rb"},{"name":"assigns order[email] over user email to order","suite":"Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3\"}}","suiteSourceFile":"core/spec/lib/spree/core/importer/order_spec.rb"},{"name":"can build an order from API with just line items","suite":"Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5\"}}","suiteSourceFile":"core/spec/lib/spree/core/importer/order_spec.rb"},{"name":"handles line_item building exceptions","suite":"Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6\"}}","suiteSourceFile":"core/spec/lib/spree/core/importer/order_spec.rb"},{"name":"handles line_item updating exceptions","suite":"Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7\"}}","suiteSourceFile":"core/spec/lib/spree/core/importer/order_spec.rb"},{"name":"can build an order from API with variant sku","suite":"Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8\"}}","suiteSourceFile":"core/spec/lib/spree/core/importer/order_spec.rb"},{"name":"handles exceptions when sku is not found","suite":"Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9\"}}","suiteSourceFile":"core/spec/lib/spree/core/importer/order_spec.rb"},{"name":"can build an order from API shipping address","suite":"Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10\"}}","suiteSourceFile":"core/spec/lib/spree/core/importer/order_spec.rb"},{"name":"can build an order from API with country attributes","suite":"Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11\"}}","suiteSourceFile":"core/spec/lib/spree/core/importer/order_spec.rb"},{"name":"handles country lookup exceptions","suite":"Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12\"}}","suiteSourceFile":"core/spec/lib/spree/core/importer/order_spec.rb"},{"name":"can build an order from API with state attributes","suite":"Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13\"}}","suiteSourceFile":"core/spec/lib/spree/core/importer/order_spec.rb"},{"name":"ensures_country_id for country fields","suite":"Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19\"}}","suiteSourceFile":"core/spec/lib/spree/core/importer/order_spec.rb"},{"name":"raises with proper message when can't find country","suite":"Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:20\"}}","suiteSourceFile":"core/spec/lib/spree/core/importer/order_spec.rb"},{"name":"ensures_state_id for state fields","suite":"Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:21\"}}","suiteSourceFile":"core/spec/lib/spree/core/importer/order_spec.rb"},{"name":"handles shipment building exceptions","suite":"Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:23\"}}","suiteSourceFile":"core/spec/lib/spree/core/importer/order_spec.rb"},{"name":"adds adjustments","suite":"Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:24\"}}","suiteSourceFile":"core/spec/lib/spree/core/importer/order_spec.rb"},{"name":"adds line item adjustments from promotion","suite":"Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:25\"}}","suiteSourceFile":"core/spec/lib/spree/core/importer/order_spec.rb"},{"name":"adds line item adjustments from taxation","suite":"Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:26\"}}","suiteSourceFile":"core/spec/lib/spree/core/importer/order_spec.rb"},{"name":"calculates final order total correctly","suite":"Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:27\"}}","suiteSourceFile":"core/spec/lib/spree/core/importer/order_spec.rb"},{"name":"handles adjustment building exceptions","suite":"Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:28\"}}","suiteSourceFile":"core/spec/lib/spree/core/importer/order_spec.rb"},{"name":"builds a payment using state","suite":"Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29\"}}","suiteSourceFile":"core/spec/lib/spree/core/importer/order_spec.rb"},{"name":"builds a payment using status as fallback","suite":"Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:30\"}}","suiteSourceFile":"core/spec/lib/spree/core/importer/order_spec.rb"},{"name":"handles payment building exceptions","suite":"Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:31\"}}","suiteSourceFile":"core/spec/lib/spree/core/importer/order_spec.rb"},{"name":"build a source payment using years and month","suite":"Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:32\"}}","suiteSourceFile":"core/spec/lib/spree/core/importer/order_spec.rb"},{"name":"handles source building exceptions when do not have years and month","suite":"Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:33\"}}","suiteSourceFile":"core/spec/lib/spree/core/importer/order_spec.rb"},{"name":"builds a payment with an optional created_at","suite":"Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:34\"}}","suiteSourceFile":"core/spec/lib/spree/core/importer/order_spec.rb"},{"name":"assigning a user to an order as an admin a user's id is not provided doesn't unassociate the admin from the order","suite":"Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/importer/order_spec.rb"},{"name":"assigning a user to an order as a user does not assign the order to the other user","suite":"Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/importer/order_spec.rb"},{"name":"with a different currency sets the order currency","suite":"Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/importer/order_spec.rb"},{"name":"with a different currency can handle it when a line order price is specified","suite":"Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:2\"}}","suiteSourceFile":"core/spec/lib/spree/core/importer/order_spec.rb"},{"name":"variant not deleted ensures variant id from api","suite":"Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:17:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/importer/order_spec.rb"},{"name":"variant was deleted raise error as variant shouldn't be found","suite":"Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/importer/order_spec.rb"},{"name":"shipments ensures variant exists and is not deleted","suite":"Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:22:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/importer/order_spec.rb"},{"name":"shipments builds them properly","suite":"Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:22:2\"}}","suiteSourceFile":"core/spec/lib/spree/core/importer/order_spec.rb"},{"name":"shipments allocates inventory units to the correct shipments","suite":"Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:22:3\"}}","suiteSourceFile":"core/spec/lib/spree/core/importer/order_spec.rb"},{"name":"shipments accepts admin name for stock location","suite":"Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:22:4\"}}","suiteSourceFile":"core/spec/lib/spree/core/importer/order_spec.rb"},{"name":"shipments raises if can't find stock location","suite":"Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:22:5\"}}","suiteSourceFile":"core/spec/lib/spree/core/importer/order_spec.rb"},{"name":"shipments when a shipping adjustment is present creates the shipping adjustment","suite":"Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:22:6:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/importer/order_spec.rb"},{"name":"shipments when completed_at and shipped_at present builds them properly","suite":"Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:22:7:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/importer/order_spec.rb"},{"name":"raises error clears out order from db","suite":"Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:35:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/importer/order_spec.rb"},{"name":"#prefix returns attribute value from options","suite":"Spree::Core::NumberGenerator at ./spec/lib/spree/core/number_generator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/number_generator_spec.rb"},{"name":"#prefix= writes attribute value","suite":"Spree::Core::NumberGenerator at ./spec/lib/spree/core/number_generator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/number_generator_spec.rb"},{"name":"#length returns attribute value from options","suite":"Spree::Core::NumberGenerator at ./spec/lib/spree/core/number_generator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/number_generator_spec.rb"},{"name":"#length= writes attribute value","suite":"Spree::Core::NumberGenerator at ./spec/lib/spree/core/number_generator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/number_generator_spec.rb"},{"name":"#included generates .number_generator on host returns number generator","suite":"Spree::Core::NumberGenerator at ./spec/lib/spree/core/number_generator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/number_generator_spec.rb"},{"name":"#included generates validation hooks on host when permalink field value is nil on defaults and generated candidate is unique sets permalink field","suite":"Spree::Core::NumberGenerator at ./spec/lib/spree/core/number_generator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1:1:1:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/number_generator_spec.rb"},{"name":"#included generates validation hooks on host when permalink field value is nil on defaults and generated candidate is NOT unique and less than half of the value space taken sets permalink field","suite":"Spree::Core::NumberGenerator at ./spec/lib/spree/core/number_generator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1:1:2:1:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/number_generator_spec.rb"},{"name":"#included generates validation hooks on host when permalink field value is nil on defaults and generated candidate is NOT unique and exactly half of the value space taken sets permalink field","suite":"Spree::Core::NumberGenerator at ./spec/lib/spree/core/number_generator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1:1:2:2:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/number_generator_spec.rb"},{"name":"#included generates validation hooks on host when permalink field value is nil on defaults and generated candidate is NOT unique and more than half of the value space is taken sets permalink field","suite":"Spree::Core::NumberGenerator at ./spec/lib/spree/core/number_generator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1:1:2:3:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/number_generator_spec.rb"},{"name":"#included generates validation hooks on host when permalink field value is nil with length: option and generated candidate is unique sets permalink field","suite":"Spree::Core::NumberGenerator at ./spec/lib/spree/core/number_generator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1:2:1:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/number_generator_spec.rb"},{"name":"#included generates validation hooks on host when permalink field value is nil with length: option and generated candidate is NOT unique and less than half of the value space taken sets permalink field","suite":"Spree::Core::NumberGenerator at ./spec/lib/spree/core/number_generator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1:2:2:1:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/number_generator_spec.rb"},{"name":"#included generates validation hooks on host when permalink field value is nil with length: option and generated candidate is NOT unique and exactly half of the value space taken sets permalink field","suite":"Spree::Core::NumberGenerator at ./spec/lib/spree/core/number_generator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1:2:2:2:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/number_generator_spec.rb"},{"name":"#included generates validation hooks on host when permalink field value is nil with length: option and generated candidate is NOT unique and more than half of the value space is taken sets permalink field","suite":"Spree::Core::NumberGenerator at ./spec/lib/spree/core/number_generator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1:2:2:3:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/number_generator_spec.rb"},{"name":"#included generates validation hooks on host when permalink field value is nil with letters option and generated candidate is unique sets permalink field","suite":"Spree::Core::NumberGenerator at ./spec/lib/spree/core/number_generator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1:3:1:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/number_generator_spec.rb"},{"name":"#included generates validation hooks on host when permalink field value is nil with letters option and generated candidate is NOT unique and less than half of the value space taken sets permalink field","suite":"Spree::Core::NumberGenerator at ./spec/lib/spree/core/number_generator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1:3:2:1:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/number_generator_spec.rb"},{"name":"#included generates validation hooks on host when permalink field value is nil with letters option and generated candidate is NOT unique and exactly half of the value space taken sets permalink field","suite":"Spree::Core::NumberGenerator at ./spec/lib/spree/core/number_generator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1:3:2:2:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/number_generator_spec.rb"},{"name":"#included generates validation hooks on host when permalink field value is nil with letters option and generated candidate is NOT unique and more than half of the value space is taken sets permalink field","suite":"Spree::Core::NumberGenerator at ./spec/lib/spree/core/number_generator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1:3:2:3:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/number_generator_spec.rb"},{"name":"#included generates validation hooks on host when permalink field value is present does not touch field","suite":"Spree::Core::NumberGenerator at ./spec/lib/spree/core/number_generator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:2:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/number_generator_spec.rb"},{"name":"generator method redefinition allows to override generator method","suite":"Spree::Core::NumberGenerator at ./spec/lib/spree/core/number_generator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/number_generator_spec.rb"},{"name":"#initialize accepts config and environment parameters","suite":"Spree::Core::Partials at ./spec/lib/spree/core/partials_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/partials_spec.rb"},{"name":"#initialize sets config and environment","suite":"Spree::Core::Partials at ./spec/lib/spree/core/partials_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/lib/spree/core/partials_spec.rb"},{"name":"#partial_members returns only members ending with _partials","suite":"Spree::Core::Partials at ./spec/lib/spree/core/partials_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/partials_spec.rb"},{"name":"#keys returns partial member names without _partials suffix","suite":"Spree::Core::Partials at ./spec/lib/spree/core/partials_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/partials_spec.rb"},{"name":"dynamically defined methods defines getter methods for all _partials attributes","suite":"Spree::Core::Partials at ./spec/lib/spree/core/partials_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/partials_spec.rb"},{"name":"dynamically defined methods defines setter methods for all _partials attributes","suite":"Spree::Core::Partials at ./spec/lib/spree/core/partials_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2\"}}","suiteSourceFile":"core/spec/lib/spree/core/partials_spec.rb"},{"name":"dynamically defined methods does not define methods for non-partials attributes","suite":"Spree::Core::Partials at ./spec/lib/spree/core/partials_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3\"}}","suiteSourceFile":"core/spec/lib/spree/core/partials_spec.rb"},{"name":"getter methods calls the config with the full _partials attribute name","suite":"Spree::Core::Partials at ./spec/lib/spree/core/partials_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/partials_spec.rb"},{"name":"getter methods works with different partial types","suite":"Spree::Core::Partials at ./spec/lib/spree/core/partials_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2\"}}","suiteSourceFile":"core/spec/lib/spree/core/partials_spec.rb"},{"name":"setter methods sets the config with the full _partials attribute name","suite":"Spree::Core::Partials at ./spec/lib/spree/core/partials_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/partials_spec.rb"},{"name":"setter methods works with different partial types","suite":"Spree::Core::Partials at ./spec/lib/spree/core/partials_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2\"}}","suiteSourceFile":"core/spec/lib/spree/core/partials_spec.rb"},{"name":"#assign assigns a single permission set to a role","suite":"Spree::PermissionConfiguration at ./spec/lib/spree/core/permission_configuration_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/permission_configuration_spec.rb"},{"name":"#assign assigns multiple permission sets to a role","suite":"Spree::PermissionConfiguration at ./spec/lib/spree/core/permission_configuration_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/lib/spree/core/permission_configuration_spec.rb"},{"name":"#assign adds to existing permission sets when called multiple times","suite":"Spree::PermissionConfiguration at ./spec/lib/spree/core/permission_configuration_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/lib/spree/core/permission_configuration_spec.rb"},{"name":"#assign does not duplicate permission sets","suite":"Spree::PermissionConfiguration at ./spec/lib/spree/core/permission_configuration_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","suiteSourceFile":"core/spec/lib/spree/core/permission_configuration_spec.rb"},{"name":"#assign normalizes role names to symbols","suite":"Spree::PermissionConfiguration at ./spec/lib/spree/core/permission_configuration_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","suiteSourceFile":"core/spec/lib/spree/core/permission_configuration_spec.rb"},{"name":"#clear removes all permission sets from a role","suite":"Spree::PermissionConfiguration at ./spec/lib/spree/core/permission_configuration_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/permission_configuration_spec.rb"},{"name":"#clear returns the removed permission sets","suite":"Spree::PermissionConfiguration at ./spec/lib/spree/core/permission_configuration_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","suiteSourceFile":"core/spec/lib/spree/core/permission_configuration_spec.rb"},{"name":"#clear returns nil for non-existent roles","suite":"Spree::PermissionConfiguration at ./spec/lib/spree/core/permission_configuration_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3\"}}","suiteSourceFile":"core/spec/lib/spree/core/permission_configuration_spec.rb"},{"name":"#permission_sets_for returns an empty array for non-configured roles","suite":"Spree::PermissionConfiguration at ./spec/lib/spree/core/permission_configuration_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/permission_configuration_spec.rb"},{"name":"#permission_sets_for returns the assigned permission sets","suite":"Spree::PermissionConfiguration at ./spec/lib/spree/core/permission_configuration_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","suiteSourceFile":"core/spec/lib/spree/core/permission_configuration_spec.rb"},{"name":"#permission_sets_for normalizes role names","suite":"Spree::PermissionConfiguration at ./spec/lib/spree/core/permission_configuration_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3\"}}","suiteSourceFile":"core/spec/lib/spree/core/permission_configuration_spec.rb"},{"name":"#permission_sets_for_roles combines permission sets from multiple roles","suite":"Spree::PermissionConfiguration at ./spec/lib/spree/core/permission_configuration_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/permission_configuration_spec.rb"},{"name":"#permission_sets_for_roles deduplicates permission sets shared across roles","suite":"Spree::PermissionConfiguration at ./spec/lib/spree/core/permission_configuration_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2\"}}","suiteSourceFile":"core/spec/lib/spree/core/permission_configuration_spec.rb"},{"name":"#permission_sets_for_roles returns empty array when no roles have permission sets","suite":"Spree::PermissionConfiguration at ./spec/lib/spree/core/permission_configuration_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3\"}}","suiteSourceFile":"core/spec/lib/spree/core/permission_configuration_spec.rb"},{"name":"#roles returns all configured roles","suite":"Spree::PermissionConfiguration at ./spec/lib/spree/core/permission_configuration_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/permission_configuration_spec.rb"},{"name":"#roles returns empty array when no roles are configured","suite":"Spree::PermissionConfiguration at ./spec/lib/spree/core/permission_configuration_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2\"}}","suiteSourceFile":"core/spec/lib/spree/core/permission_configuration_spec.rb"},{"name":"#role_configured? returns true for configured roles","suite":"Spree::PermissionConfiguration at ./spec/lib/spree/core/permission_configuration_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/permission_configuration_spec.rb"},{"name":"#role_configured? returns false for non-configured roles","suite":"Spree::PermissionConfiguration at ./spec/lib/spree/core/permission_configuration_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2\"}}","suiteSourceFile":"core/spec/lib/spree/core/permission_configuration_spec.rb"},{"name":"#role_configured? returns false for cleared roles","suite":"Spree::PermissionConfiguration at ./spec/lib/spree/core/permission_configuration_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:3\"}}","suiteSourceFile":"core/spec/lib/spree/core/permission_configuration_spec.rb"},{"name":"#reset! clears all role permissions","suite":"Spree::PermissionConfiguration at ./spec/lib/spree/core/permission_configuration_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/permission_configuration_spec.rb"},{"name":"#initialize with all parameters sets all attributes","suite":"Spree::Pricing::Context at ./spec/lib/spree/core/pricing/context_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/pricing/context_spec.rb"},{"name":"#initialize with minimal parameters sets required attributes","suite":"Spree::Pricing::Context at ./spec/lib/spree/core/pricing/context_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/pricing/context_spec.rb"},{"name":"#initialize with minimal parameters defaults store to Spree::Current.store","suite":"Spree::Pricing::Context at ./spec/lib/spree/core/pricing/context_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2\"}}","suiteSourceFile":"core/spec/lib/spree/core/pricing/context_spec.rb"},{"name":"#initialize with minimal parameters defaults zone to Spree::Current.zone","suite":"Spree::Pricing::Context at ./spec/lib/spree/core/pricing/context_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:3\"}}","suiteSourceFile":"core/spec/lib/spree/core/pricing/context_spec.rb"},{"name":"#initialize with minimal parameters defaults user to nil","suite":"Spree::Pricing::Context at ./spec/lib/spree/core/pricing/context_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:4\"}}","suiteSourceFile":"core/spec/lib/spree/core/pricing/context_spec.rb"},{"name":"#initialize with minimal parameters defaults quantity to nil","suite":"Spree::Pricing::Context at ./spec/lib/spree/core/pricing/context_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:5\"}}","suiteSourceFile":"core/spec/lib/spree/core/pricing/context_spec.rb"},{"name":"#initialize with minimal parameters defaults date to current time","suite":"Spree::Pricing::Context at ./spec/lib/spree/core/pricing/context_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:6\"}}","suiteSourceFile":"core/spec/lib/spree/core/pricing/context_spec.rb"},{"name":"#initialize when Spree::Current.store is set uses Spree::Current.store as default","suite":"Spree::Pricing::Context at ./spec/lib/spree/core/pricing/context_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/pricing/context_spec.rb"},{"name":"#initialize when Spree::Current.zone is set uses Spree::Current.zone as default","suite":"Spree::Pricing::Context at ./spec/lib/spree/core/pricing/context_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/pricing/context_spec.rb"},{"name":".from_currency creates a context with variant and currency","suite":"Spree::Pricing::Context at ./spec/lib/spree/core/pricing/context_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/pricing/context_spec.rb"},{"name":".from_currency uses default store","suite":"Spree::Pricing::Context at ./spec/lib/spree/core/pricing/context_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","suiteSourceFile":"core/spec/lib/spree/core/pricing/context_spec.rb"},{"name":".from_order sets variant from parameter","suite":"Spree::Pricing::Context at ./spec/lib/spree/core/pricing/context_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/pricing/context_spec.rb"},{"name":".from_order sets currency from order","suite":"Spree::Pricing::Context at ./spec/lib/spree/core/pricing/context_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","suiteSourceFile":"core/spec/lib/spree/core/pricing/context_spec.rb"},{"name":".from_order sets store from order","suite":"Spree::Pricing::Context at ./spec/lib/spree/core/pricing/context_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3\"}}","suiteSourceFile":"core/spec/lib/spree/core/pricing/context_spec.rb"},{"name":".from_order sets user from order","suite":"Spree::Pricing::Context at ./spec/lib/spree/core/pricing/context_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4\"}}","suiteSourceFile":"core/spec/lib/spree/core/pricing/context_spec.rb"},{"name":".from_order sets order reference","suite":"Spree::Pricing::Context at ./spec/lib/spree/core/pricing/context_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:5\"}}","suiteSourceFile":"core/spec/lib/spree/core/pricing/context_spec.rb"},{"name":".from_order sets quantity from line item","suite":"Spree::Pricing::Context at ./spec/lib/spree/core/pricing/context_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:6\"}}","suiteSourceFile":"core/spec/lib/spree/core/pricing/context_spec.rb"},{"name":".from_order with zone from order tax_zone sets zone from order tax_zone","suite":"Spree::Pricing::Context at ./spec/lib/spree/core/pricing/context_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:7:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/pricing/context_spec.rb"},{"name":".from_order with zone from store checkout_zone sets zone from store checkout_zone","suite":"Spree::Pricing::Context at ./spec/lib/spree/core/pricing/context_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:8:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/pricing/context_spec.rb"},{"name":".from_order with explicit quantity parameter uses the provided quantity","suite":"Spree::Pricing::Context at ./spec/lib/spree/core/pricing/context_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:9:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/pricing/context_spec.rb"},{"name":".from_order when variant is not in order sets quantity to nil","suite":"Spree::Pricing::Context at ./spec/lib/spree/core/pricing/context_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:10:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/pricing/context_spec.rb"},{"name":"#cache_key with all attributes generates a cache key with all components","suite":"Spree::Pricing::Context at ./spec/lib/spree/core/pricing/context_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/pricing/context_spec.rb"},{"name":"#cache_key with minimal attributes generates a cache key with default values from Spree::Current","suite":"Spree::Pricing::Context at ./spec/lib/spree/core/pricing/context_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/pricing/context_spec.rb"},{"name":"#cache_key with some optional attributes includes present optional attributes in correct order","suite":"Spree::Pricing::Context at ./spec/lib/spree/core/pricing/context_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/pricing/context_spec.rb"},{"name":"#add_attribute adds an attribute to a model","suite":"Spree::RansackConfiguration at ./spec/lib/spree/core/ransack_configuration_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/ransack_configuration_spec.rb"},{"name":"#add_attribute adds to existing attributes when called multiple times","suite":"Spree::RansackConfiguration at ./spec/lib/spree/core/ransack_configuration_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/lib/spree/core/ransack_configuration_spec.rb"},{"name":"#add_attribute does not duplicate attributes","suite":"Spree::RansackConfiguration at ./spec/lib/spree/core/ransack_configuration_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/lib/spree/core/ransack_configuration_spec.rb"},{"name":"#add_attribute converts symbol to string","suite":"Spree::RansackConfiguration at ./spec/lib/spree/core/ransack_configuration_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","suiteSourceFile":"core/spec/lib/spree/core/ransack_configuration_spec.rb"},{"name":"#add_association adds an association to a model","suite":"Spree::RansackConfiguration at ./spec/lib/spree/core/ransack_configuration_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/ransack_configuration_spec.rb"},{"name":"#add_association adds to existing associations when called multiple times","suite":"Spree::RansackConfiguration at ./spec/lib/spree/core/ransack_configuration_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","suiteSourceFile":"core/spec/lib/spree/core/ransack_configuration_spec.rb"},{"name":"#add_association does not duplicate associations","suite":"Spree::RansackConfiguration at ./spec/lib/spree/core/ransack_configuration_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3\"}}","suiteSourceFile":"core/spec/lib/spree/core/ransack_configuration_spec.rb"},{"name":"#add_scope adds a scope to a model","suite":"Spree::RansackConfiguration at ./spec/lib/spree/core/ransack_configuration_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/ransack_configuration_spec.rb"},{"name":"#add_scope adds to existing scopes when called multiple times","suite":"Spree::RansackConfiguration at ./spec/lib/spree/core/ransack_configuration_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","suiteSourceFile":"core/spec/lib/spree/core/ransack_configuration_spec.rb"},{"name":"#add_scope does not duplicate scopes","suite":"Spree::RansackConfiguration at ./spec/lib/spree/core/ransack_configuration_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3\"}}","suiteSourceFile":"core/spec/lib/spree/core/ransack_configuration_spec.rb"},{"name":"#custom_attributes_for returns an empty array for models with no custom attributes","suite":"Spree::RansackConfiguration at ./spec/lib/spree/core/ransack_configuration_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/ransack_configuration_spec.rb"},{"name":"#custom_associations_for returns an empty array for models with no custom associations","suite":"Spree::RansackConfiguration at ./spec/lib/spree/core/ransack_configuration_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/ransack_configuration_spec.rb"},{"name":"#custom_scopes_for returns an empty array for models with no custom scopes","suite":"Spree::RansackConfiguration at ./spec/lib/spree/core/ransack_configuration_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/ransack_configuration_spec.rb"},{"name":"#reset! clears all custom configurations","suite":"Spree::RansackConfiguration at ./spec/lib/spree/core/ransack_configuration_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/ransack_configuration_spec.rb"},{"name":"isolation between models keeps configurations separate per model","suite":"Spree::RansackConfiguration at ./spec/lib/spree/core/ransack_configuration_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/ransack_configuration_spec.rb"},{"name":"generate_token generates random token with timestamp","suite":"Spree::Core::TokenGenerator at ./spec/lib/spree/core/token_generator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/lib/spree/core/token_generator_spec.rb"},{"name":"getter methods provides access to calculators","suite":"Spree environment accessors at ./spec/lib/spree/core_environment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/lib/spree/core_environment_spec.rb"},{"name":"getter methods provides access to validators","suite":"Spree environment accessors at ./spec/lib/spree/core_environment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/lib/spree/core_environment_spec.rb"},{"name":"getter methods provides access to payment_methods","suite":"Spree environment accessors at ./spec/lib/spree/core_environment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/lib/spree/core_environment_spec.rb"},{"name":"getter methods provides access to adjusters","suite":"Spree environment accessors at ./spec/lib/spree/core_environment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","suiteSourceFile":"core/spec/lib/spree/core_environment_spec.rb"},{"name":"getter methods provides access to stock_splitters","suite":"Spree environment accessors at ./spec/lib/spree/core_environment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","suiteSourceFile":"core/spec/lib/spree/core_environment_spec.rb"},{"name":"getter methods provides access to promotions","suite":"Spree environment accessors at ./spec/lib/spree/core_environment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","suiteSourceFile":"core/spec/lib/spree/core_environment_spec.rb"},{"name":"getter methods provides access to line_item_comparison_hooks","suite":"Spree environment accessors at ./spec/lib/spree/core_environment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7\"}}","suiteSourceFile":"core/spec/lib/spree/core_environment_spec.rb"},{"name":"getter methods provides access to data_feed_types","suite":"Spree environment accessors at ./spec/lib/spree/core_environment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8\"}}","suiteSourceFile":"core/spec/lib/spree/core_environment_spec.rb"},{"name":"getter methods provides access to export_types","suite":"Spree environment accessors at ./spec/lib/spree/core_environment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:9\"}}","suiteSourceFile":"core/spec/lib/spree/core_environment_spec.rb"},{"name":"getter methods provides access to import_types","suite":"Spree environment accessors at ./spec/lib/spree/core_environment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:10\"}}","suiteSourceFile":"core/spec/lib/spree/core_environment_spec.rb"},{"name":"getter methods provides access to taxon_rules","suite":"Spree environment accessors at ./spec/lib/spree/core_environment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:11\"}}","suiteSourceFile":"core/spec/lib/spree/core_environment_spec.rb"},{"name":"getter methods provides access to reports","suite":"Spree environment accessors at ./spec/lib/spree/core_environment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:12\"}}","suiteSourceFile":"core/spec/lib/spree/core_environment_spec.rb"},{"name":"getter methods provides access to translatable_resources","suite":"Spree environment accessors at ./spec/lib/spree/core_environment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:13\"}}","suiteSourceFile":"core/spec/lib/spree/core_environment_spec.rb"},{"name":"getter methods provides access to metafields.types","suite":"Spree environment accessors at ./spec/lib/spree/core_environment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:14\"}}","suiteSourceFile":"core/spec/lib/spree/core_environment_spec.rb"},{"name":"getter methods provides access to metafields.enabled_resources","suite":"Spree environment accessors at ./spec/lib/spree/core_environment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:15\"}}","suiteSourceFile":"core/spec/lib/spree/core_environment_spec.rb"},{"name":"getter methods provides access to analytics.events","suite":"Spree environment accessors at ./spec/lib/spree/core_environment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:16\"}}","suiteSourceFile":"core/spec/lib/spree/core_environment_spec.rb"},{"name":"getter methods provides access to analytics.handlers","suite":"Spree environment accessors at ./spec/lib/spree/core_environment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:17\"}}","suiteSourceFile":"core/spec/lib/spree/core_environment_spec.rb"},{"name":"getter methods provides access to integrations","suite":"Spree environment accessors at ./spec/lib/spree/core_environment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:18\"}}","suiteSourceFile":"core/spec/lib/spree/core_environment_spec.rb"},{"name":"setter methods allows setting payment_methods","suite":"Spree environment accessors at ./spec/lib/spree/core_environment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/lib/spree/core_environment_spec.rb"},{"name":"setter methods allows setting stock_splitters","suite":"Spree environment accessors at ./spec/lib/spree/core_environment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","suiteSourceFile":"core/spec/lib/spree/core_environment_spec.rb"},{"name":"setter methods allows setting reports","suite":"Spree environment accessors at ./spec/lib/spree/core_environment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3\"}}","suiteSourceFile":"core/spec/lib/spree/core_environment_spec.rb"},{"name":"nested accessors allows access to calculators.shipping_methods","suite":"Spree environment accessors at ./spec/lib/spree/core_environment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/lib/spree/core_environment_spec.rb"},{"name":"nested accessors allows access to calculators.tax_rates","suite":"Spree environment accessors at ./spec/lib/spree/core_environment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","suiteSourceFile":"core/spec/lib/spree/core_environment_spec.rb"},{"name":"nested accessors allows access to promotions.rules","suite":"Spree environment accessors at ./spec/lib/spree/core_environment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3\"}}","suiteSourceFile":"core/spec/lib/spree/core_environment_spec.rb"},{"name":"nested accessors allows access to promotions.actions","suite":"Spree environment accessors at ./spec/lib/spree/core_environment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4\"}}","suiteSourceFile":"core/spec/lib/spree/core_environment_spec.rb"},{"name":"nested accessors allows access to validators.addresses","suite":"Spree environment accessors at ./spec/lib/spree/core_environment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:5\"}}","suiteSourceFile":"core/spec/lib/spree/core_environment_spec.rb"},{"name":"modifying nested values allows modifying calculators.shipping_methods","suite":"Spree environment accessors at ./spec/lib/spree/core_environment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/lib/spree/core_environment_spec.rb"},{"name":"modifying nested values allows modifying promotions.rules","suite":"Spree environment accessors at ./spec/lib/spree/core_environment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2\"}}","suiteSourceFile":"core/spec/lib/spree/core_environment_spec.rb"},{"name":".user_class when user_class is a Class instance raises an error","suite":"Spree at ./spec/lib/spree/core_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/lib/spree/core_spec.rb"},{"name":".user_class when user_class is a Symbol instance returns the user_class constant","suite":"Spree at ./spec/lib/spree/core_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/lib/spree/core_spec.rb"},{"name":".user_class when user_class is a String instance returns the user_class constant","suite":"Spree at ./spec/lib/spree/core_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","suiteSourceFile":"core/spec/lib/spree/core_spec.rb"},{"name":".user_class when constantize is false returns the user_class as a String","suite":"Spree at ./spec/lib/spree/core_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1\"}}","suiteSourceFile":"core/spec/lib/spree/core_spec.rb"},{"name":".admin_user_class when admin_user_class is nil fallbacks to user_class","suite":"Spree at ./spec/lib/spree/core_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","suiteSourceFile":"core/spec/lib/spree/core_spec.rb"},{"name":".admin_user_class when admin_user_class is a Class instance raises an error","suite":"Spree at ./spec/lib/spree/core_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","suiteSourceFile":"core/spec/lib/spree/core_spec.rb"},{"name":".admin_user_class when admin_user_class is a Symbol instance returns the admin_user_class constant","suite":"Spree at ./spec/lib/spree/core_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:1\"}}","suiteSourceFile":"core/spec/lib/spree/core_spec.rb"},{"name":".admin_user_class when admin_user_class is a String instance returns the admin_user_class constant","suite":"Spree at ./spec/lib/spree/core_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:4:1\"}}","suiteSourceFile":"core/spec/lib/spree/core_spec.rb"},{"name":".admin_user_class when constantize is false returns the admin_user_class as a String","suite":"Spree at ./spec/lib/spree/core_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:5:1\"}}","suiteSourceFile":"core/spec/lib/spree/core_spec.rb"},{"name":".private_storage_service_name when private_storage_service_name is a Symbol instance returns the private_storage_service_name as a symbol","suite":"Spree at ./spec/lib/spree/core_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","suiteSourceFile":"core/spec/lib/spree/core_spec.rb"},{"name":".private_storage_service_name when private_storage_service_name is a String instance returns the private_storage_service_name as a symbol","suite":"Spree at ./spec/lib/spree/core_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","suiteSourceFile":"core/spec/lib/spree/core_spec.rb"},{"name":".private_storage_service_name when private_storage_service_name is set to nil returns the private_storage_service_name as the default service","suite":"Spree at ./spec/lib/spree/core_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3:1\"}}","suiteSourceFile":"core/spec/lib/spree/core_spec.rb"},{"name":".searcher_class when searcher_class is a Class instance raises an error","suite":"Spree at ./spec/lib/spree/core_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1\"}}","suiteSourceFile":"core/spec/lib/spree/core_spec.rb"},{"name":".searcher_class when searcher_class is a Symbol instance returns the searcher_class constant","suite":"Spree at ./spec/lib/spree/core_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1\"}}","suiteSourceFile":"core/spec/lib/spree/core_spec.rb"},{"name":".searcher_class when searcher_class is a String instance returns the searcher_class constant","suite":"Spree at ./spec/lib/spree/core_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3:1\"}}","suiteSourceFile":"core/spec/lib/spree/core_spec.rb"},{"name":".searcher_class when constantize is false returns the searcher_class as a String","suite":"Spree at ./spec/lib/spree/core_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:4:1\"}}","suiteSourceFile":"core/spec/lib/spree/core_spec.rb"},{"name":"#register registers a subscriber for a pattern","suite":"Spree::Events::Registry at ./spec/lib/spree/events/registry_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/lib/spree/events/registry_spec.rb"},{"name":"#register allows multiple subscribers for the same pattern","suite":"Spree::Events::Registry at ./spec/lib/spree/events/registry_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/lib/spree/events/registry_spec.rb"},{"name":"#register stores subscription options","suite":"Spree::Events::Registry at ./spec/lib/spree/events/registry_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/lib/spree/events/registry_spec.rb"},{"name":"#register returns the subscription","suite":"Spree::Events::Registry at ./spec/lib/spree/events/registry_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","suiteSourceFile":"core/spec/lib/spree/events/registry_spec.rb"},{"name":"#unregister removes a specific subscriber","suite":"Spree::Events::Registry at ./spec/lib/spree/events/registry_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/lib/spree/events/registry_spec.rb"},{"name":"#unregister returns false when subscriber not found","suite":"Spree::Events::Registry at ./spec/lib/spree/events/registry_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","suiteSourceFile":"core/spec/lib/spree/events/registry_spec.rb"},{"name":"#unregister keeps other subscribers intact","suite":"Spree::Events::Registry at ./spec/lib/spree/events/registry_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3\"}}","suiteSourceFile":"core/spec/lib/spree/events/registry_spec.rb"},{"name":"#subscriptions_for returns subscriptions for exact match","suite":"Spree::Events::Registry at ./spec/lib/spree/events/registry_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/lib/spree/events/registry_spec.rb"},{"name":"#subscriptions_for returns subscriptions matching wildcard patterns","suite":"Spree::Events::Registry at ./spec/lib/spree/events/registry_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","suiteSourceFile":"core/spec/lib/spree/events/registry_spec.rb"},{"name":"#subscriptions_for returns empty array when no matches","suite":"Spree::Events::Registry at ./spec/lib/spree/events/registry_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3\"}}","suiteSourceFile":"core/spec/lib/spree/events/registry_spec.rb"},{"name":"#subscriptions_for with global wildcard matches all events","suite":"Spree::Events::Registry at ./spec/lib/spree/events/registry_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4:1\"}}","suiteSourceFile":"core/spec/lib/spree/events/registry_spec.rb"},{"name":"#all_subscriptions returns all registered subscriptions","suite":"Spree::Events::Registry at ./spec/lib/spree/events/registry_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/lib/spree/events/registry_spec.rb"},{"name":"#all_subscriptions returns a copy of the subscriptions","suite":"Spree::Events::Registry at ./spec/lib/spree/events/registry_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2\"}}","suiteSourceFile":"core/spec/lib/spree/events/registry_spec.rb"},{"name":"#patterns returns unique patterns","suite":"Spree::Events::Registry at ./spec/lib/spree/events/registry_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","suiteSourceFile":"core/spec/lib/spree/events/registry_spec.rb"},{"name":"#clear! removes all subscriptions","suite":"Spree::Events::Registry at ./spec/lib/spree/events/registry_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","suiteSourceFile":"core/spec/lib/spree/events/registry_spec.rb"},{"name":"#registered? returns true for registered patterns","suite":"Spree::Events::Registry at ./spec/lib/spree/events/registry_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","suiteSourceFile":"core/spec/lib/spree/events/registry_spec.rb"},{"name":"#registered? returns false for unregistered patterns","suite":"Spree::Events::Registry at ./spec/lib/spree/events/registry_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2\"}}","suiteSourceFile":"core/spec/lib/spree/events/registry_spec.rb"},{"name":"thread safety handles concurrent registrations","suite":"Spree::Events::Registry at ./spec/lib/spree/events/registry_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1\"}}","suiteSourceFile":"core/spec/lib/spree/events/registry_spec.rb"},{"name":".publish publishes an event","suite":"Spree::Events at ./spec/lib/spree/events_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/lib/spree/events_spec.rb"},{"name":".publish notifies subscribers synchronously when async: false","suite":"Spree::Events at ./spec/lib/spree/events_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/lib/spree/events_spec.rb"},{"name":".subscribe subscribes with a block","suite":"Spree::Events at ./spec/lib/spree/events_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/lib/spree/events_spec.rb"},{"name":".subscribe subscribes with a class","suite":"Spree::Events at ./spec/lib/spree/events_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","suiteSourceFile":"core/spec/lib/spree/events_spec.rb"},{"name":".subscribe supports pattern matching with wildcards","suite":"Spree::Events at ./spec/lib/spree/events_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3\"}}","suiteSourceFile":"core/spec/lib/spree/events_spec.rb"},{"name":".subscribe supports global wildcard","suite":"Spree::Events at ./spec/lib/spree/events_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:4\"}}","suiteSourceFile":"core/spec/lib/spree/events_spec.rb"},{"name":".subscribe raises error when no subscriber provided","suite":"Spree::Events at ./spec/lib/spree/events_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:5\"}}","suiteSourceFile":"core/spec/lib/spree/events_spec.rb"},{"name":".unsubscribe removes a subscriber","suite":"Spree::Events at ./spec/lib/spree/events_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/lib/spree/events_spec.rb"},{"name":".patterns returns all registered patterns","suite":"Spree::Events at ./spec/lib/spree/events_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/lib/spree/events_spec.rb"},{"name":".subscriptions returns all subscriptions","suite":"Spree::Events at ./spec/lib/spree/events_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","suiteSourceFile":"core/spec/lib/spree/events_spec.rb"},{"name":".disable disables events within the block","suite":"Spree::Events at ./spec/lib/spree/events_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","suiteSourceFile":"core/spec/lib/spree/events_spec.rb"},{"name":".disable restores enabled state after the block","suite":"Spree::Events at ./spec/lib/spree/events_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2\"}}","suiteSourceFile":"core/spec/lib/spree/events_spec.rb"},{"name":".disable handles nested disable blocks","suite":"Spree::Events at ./spec/lib/spree/events_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:3\"}}","suiteSourceFile":"core/spec/lib/spree/events_spec.rb"},{"name":".enabled? returns true by default","suite":"Spree::Events at ./spec/lib/spree/events_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","suiteSourceFile":"core/spec/lib/spree/events_spec.rb"},{"name":".enabled? returns false when disabled","suite":"Spree::Events at ./spec/lib/spree/events_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2\"}}","suiteSourceFile":"core/spec/lib/spree/events_spec.rb"},{"name":".reset! clears all subscriptions","suite":"Spree::Events at ./spec/lib/spree/events_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1\"}}","suiteSourceFile":"core/spec/lib/spree/events_spec.rb"},{"name":"multiple subscribers notifies all matching subscribers","suite":"Spree::Events at ./spec/lib/spree/events_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1\"}}","suiteSourceFile":"core/spec/lib/spree/events_spec.rb"},{"name":"multiple subscribers handles mixed pattern and exact subscribers","suite":"Spree::Events at ./spec/lib/spree/events_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:2\"}}","suiteSourceFile":"core/spec/lib/spree/events_spec.rb"},{"name":".resolve_subscriber returns the subscriber directly in production","suite":"Spree::Events at ./spec/lib/spree/events_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1\"}}","suiteSourceFile":"core/spec/lib/spree/events_spec.rb"},{"name":".resolve_subscriber resolves subscriber by name in development","suite":"Spree::Events at ./spec/lib/spree/events_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:2\"}}","suiteSourceFile":"core/spec/lib/spree/events_spec.rb"},{"name":".resolve_subscriber handles string class names","suite":"Spree::Events at ./spec/lib/spree/events_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:3\"}}","suiteSourceFile":"core/spec/lib/spree/events_spec.rb"},{"name":".resolve_subscriber returns nil for invalid class names","suite":"Spree::Events at ./spec/lib/spree/events_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:4\"}}","suiteSourceFile":"core/spec/lib/spree/events_spec.rb"},{"name":".resolve_subscriber returns nil for anonymous classes","suite":"Spree::Events at ./spec/lib/spree/events_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:5\"}}","suiteSourceFile":"core/spec/lib/spree/events_spec.rb"},{"name":".register_subscribers! registers subscribers from Spree.subscribers","suite":"Spree::Events at ./spec/lib/spree/events_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1\"}}","suiteSourceFile":"core/spec/lib/spree/events_spec.rb"},{"name":".register_subscribers! resolves subscriber classes fresh (for code reload support)","suite":"Spree::Events at ./spec/lib/spree/events_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2\"}}","suiteSourceFile":"core/spec/lib/spree/events_spec.rb"},{"name":".parse with decimal point captures the proper amount for a formatted price","suite":"Spree::LocalizedNumber at ./spec/lib/spree/localized_number_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/lib/spree/localized_number_spec.rb"},{"name":".parse with decimal comma captures the proper amount for a formatted price","suite":"Spree::LocalizedNumber at ./spec/lib/spree/localized_number_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/lib/spree/localized_number_spec.rb"},{"name":".parse with a numeric price uses the price as is","suite":"Spree::LocalizedNumber at ./spec/lib/spree/localized_number_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","suiteSourceFile":"core/spec/lib/spree/localized_number_spec.rb"},{"name":".parse string argument is not modified","suite":"Spree::LocalizedNumber at ./spec/lib/spree/localized_number_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1\"}}","suiteSourceFile":"core/spec/lib/spree/localized_number_spec.rb"},{"name":".parse with empty string returns 0","suite":"Spree::LocalizedNumber at ./spec/lib/spree/localized_number_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5:1\"}}","suiteSourceFile":"core/spec/lib/spree/localized_number_spec.rb"},{"name":"warns about missing migrations","suite":"Spree::Migrations at ./spec/lib/spree/migrations_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","suiteSourceFile":"core/spec/lib/spree/migrations_spec.rb"},{"name":"no missing migrations says nothing","suite":"Spree::Migrations at ./spec/lib/spree/migrations_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/lib/spree/migrations_spec.rb"},{"name":"formats correctly","suite":"Spree::Money at ./spec/lib/spree/money_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","suiteSourceFile":"core/spec/lib/spree/money_spec.rb"},{"name":"can get cents","suite":"Spree::Money at ./spec/lib/spree/money_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2\"}}","suiteSourceFile":"core/spec/lib/spree/money_spec.rb"},{"name":"can get currency","suite":"Spree::Money at ./spec/lib/spree/money_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3\"}}","suiteSourceFile":"core/spec/lib/spree/money_spec.rb"},{"name":"with currency passed in option","suite":"Spree::Money at ./spec/lib/spree/money_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/lib/spree/money_spec.rb"},{"name":"hide cents hides cents suffix","suite":"Spree::Money at ./spec/lib/spree/money_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","suiteSourceFile":"core/spec/lib/spree/money_spec.rb"},{"name":"hide cents shows cents suffix","suite":"Spree::Money at ./spec/lib/spree/money_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2\"}}","suiteSourceFile":"core/spec/lib/spree/money_spec.rb"},{"name":"currency parameter when currency is specified in Canadian Dollars uses the currency param over the global configuration","suite":"Spree::Money at ./spec/lib/spree/money_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1:1\"}}","suiteSourceFile":"core/spec/lib/spree/money_spec.rb"},{"name":"currency parameter when currency is specified in Japanese Yen uses the currency param over the global configuration","suite":"Spree::Money at ./spec/lib/spree/money_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2:1\"}}","suiteSourceFile":"core/spec/lib/spree/money_spec.rb"},{"name":"format passed in option","suite":"Spree::Money at ./spec/lib/spree/money_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","suiteSourceFile":"core/spec/lib/spree/money_spec.rb"},{"name":"sign before symbol defaults to -$10.00","suite":"Spree::Money at ./spec/lib/spree/money_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1\"}}","suiteSourceFile":"core/spec/lib/spree/money_spec.rb"},{"name":"sign before symbol passed in option","suite":"Spree::Money at ./spec/lib/spree/money_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2\"}}","suiteSourceFile":"core/spec/lib/spree/money_spec.rb"},{"name":"JPY formats correctly","suite":"Spree::Money at ./spec/lib/spree/money_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1\"}}","suiteSourceFile":"core/spec/lib/spree/money_spec.rb"},{"name":"DKK formats correctly","suite":"Spree::Money at ./spec/lib/spree/money_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1\"}}","suiteSourceFile":"core/spec/lib/spree/money_spec.rb"},{"name":"EUR formats as plain by default","suite":"Spree::Money at ./spec/lib/spree/money_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1\"}}","suiteSourceFile":"core/spec/lib/spree/money_spec.rb"},{"name":"EUR formats as HTML if asked (nicely) to","suite":"Spree::Money at ./spec/lib/spree/money_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2\"}}","suiteSourceFile":"core/spec/lib/spree/money_spec.rb"},{"name":"EUR formats as HTML with currency","suite":"Spree::Money at ./spec/lib/spree/money_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:3\"}}","suiteSourceFile":"core/spec/lib/spree/money_spec.rb"},{"name":"Money formatting rules #decimal_mark uses decimal mark set in Monetize gem","suite":"Spree::Money at ./spec/lib/spree/money_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:1:1\"}}","suiteSourceFile":"core/spec/lib/spree/money_spec.rb"},{"name":"Money formatting rules #decimal_mark favors decimal mark set in default_formatting_rules","suite":"Spree::Money at ./spec/lib/spree/money_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:1:2\"}}","suiteSourceFile":"core/spec/lib/spree/money_spec.rb"},{"name":"Money formatting rules #decimal_mark favors decimal mark passed in as a parameter on initialization","suite":"Spree::Money at ./spec/lib/spree/money_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:1:3\"}}","suiteSourceFile":"core/spec/lib/spree/money_spec.rb"},{"name":"Money formatting rules #thousands_separator uses thousands separator set in Monetize gem","suite":"Spree::Money at ./spec/lib/spree/money_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:2:1\"}}","suiteSourceFile":"core/spec/lib/spree/money_spec.rb"},{"name":"Money formatting rules #thousands_separator favors decimal mark set in default_formatting_rules","suite":"Spree::Money at ./spec/lib/spree/money_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:2:2\"}}","suiteSourceFile":"core/spec/lib/spree/money_spec.rb"},{"name":"Money formatting rules #thousands_separator favors decimal mark passed in as a parameter on initialization","suite":"Spree::Money at ./spec/lib/spree/money_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:2:3\"}}","suiteSourceFile":"core/spec/lib/spree/money_spec.rb"},{"name":"#amount_in_cents when currency is USD example at ./spec/lib/spree/money_spec.rb:170","suite":"Spree::Money at ./spec/lib/spree/money_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:1:1\"}}","suiteSourceFile":"core/spec/lib/spree/money_spec.rb"},{"name":"#amount_in_cents when currency is JPY example at ./spec/lib/spree/money_spec.rb:170","suite":"Spree::Money at ./spec/lib/spree/money_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:2:1\"}}","suiteSourceFile":"core/spec/lib/spree/money_spec.rb"},{"name":"#amount_in_cents when currency is KRW example at ./spec/lib/spree/money_spec.rb:170","suite":"Spree::Money at ./spec/lib/spree/money_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:3:1\"}}","suiteSourceFile":"core/spec/lib/spree/money_spec.rb"},{"name":"#as_json returns the expected string","suite":"Spree::Money at ./spec/lib/spree/money_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:1\"}}","suiteSourceFile":"core/spec/lib/spree/money_spec.rb"},{"name":"#resolve when no price lists exist returns the base price","suite":"Spree::Pricing::Resolver at ./spec/lib/spree/pricing/resolver_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/lib/spree/pricing/resolver_spec.rb"},{"name":"#resolve when no matching price list exists falls back to base price","suite":"Spree::Pricing::Resolver at ./spec/lib/spree/pricing/resolver_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/lib/spree/pricing/resolver_spec.rb"},{"name":"#resolve with applicable price list returns the price list price","suite":"Spree::Pricing::Resolver at ./spec/lib/spree/pricing/resolver_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","suiteSourceFile":"core/spec/lib/spree/pricing/resolver_spec.rb"},{"name":"#resolve with multiple applicable price lists returns the first position price list price","suite":"Spree::Pricing::Resolver at ./spec/lib/spree/pricing/resolver_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1\"}}","suiteSourceFile":"core/spec/lib/spree/pricing/resolver_spec.rb"},{"name":"#resolve with date range price list returns price list price when within date range","suite":"Spree::Pricing::Resolver at ./spec/lib/spree/pricing/resolver_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5:1\"}}","suiteSourceFile":"core/spec/lib/spree/pricing/resolver_spec.rb"},{"name":"#resolve with date range price list returns base price when outside date range","suite":"Spree::Pricing::Resolver at ./spec/lib/spree/pricing/resolver_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5:2\"}}","suiteSourceFile":"core/spec/lib/spree/pricing/resolver_spec.rb"},{"name":"#resolve with volume-based pricing returns bulk price when quantity threshold met","suite":"Spree::Pricing::Resolver at ./spec/lib/spree/pricing/resolver_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6:1\"}}","suiteSourceFile":"core/spec/lib/spree/pricing/resolver_spec.rb"},{"name":"#resolve with volume-based pricing returns base price when quantity threshold not met","suite":"Spree::Pricing::Resolver at ./spec/lib/spree/pricing/resolver_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6:2\"}}","suiteSourceFile":"core/spec/lib/spree/pricing/resolver_spec.rb"},{"name":"#resolve when no base price exists returns a new unpersisted price object","suite":"Spree::Pricing::Resolver at ./spec/lib/spree/pricing/resolver_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7:1\"}}","suiteSourceFile":"core/spec/lib/spree/pricing/resolver_spec.rb"},{"name":"#resolve with price list from different store does not return price from other store price list","suite":"Spree::Pricing::Resolver at ./spec/lib/spree/pricing/resolver_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8:1\"}}","suiteSourceFile":"core/spec/lib/spree/pricing/resolver_spec.rb"},{"name":"noncallable thing passed to run raises NonCallablePassedToRun","suite":"Spree::ServiceModule at ./spec/lib/spree/service_module_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/lib/spree/service_module_spec.rb"},{"name":"unimplemented method raises MethodNotImplemented","suite":"Spree::ServiceModule at ./spec/lib/spree/service_module_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/lib/spree/service_module_spec.rb"},{"name":"unimplemented method returns message in exception","suite":"Spree::ServiceModule at ./spec/lib/spree/service_module_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","suiteSourceFile":"core/spec/lib/spree/service_module_spec.rb"},{"name":"non wrapped value raises WrongDataPassed","suite":"Spree::ServiceModule at ./spec/lib/spree/service_module_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/lib/spree/service_module_spec.rb"},{"name":"non wrapped value returns message in exception","suite":"Spree::ServiceModule at ./spec/lib/spree/service_module_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","suiteSourceFile":"core/spec/lib/spree/service_module_spec.rb"},{"name":"non wrapped value in last method raises WrongDataPassed","suite":"Spree::ServiceModule at ./spec/lib/spree/service_module_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/lib/spree/service_module_spec.rb"},{"name":"first method failed returns result with success? false","suite":"Spree::ServiceModule at ./spec/lib/spree/service_module_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","suiteSourceFile":"core/spec/lib/spree/service_module_spec.rb"},{"name":"first method failed returns result with failure? true","suite":"Spree::ServiceModule at ./spec/lib/spree/service_module_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2\"}}","suiteSourceFile":"core/spec/lib/spree/service_module_spec.rb"},{"name":"first method failed returns value from first failed method","suite":"Spree::ServiceModule at ./spec/lib/spree/service_module_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3\"}}","suiteSourceFile":"core/spec/lib/spree/service_module_spec.rb"},{"name":"first method failed returns result which is instance of Result","suite":"Spree::ServiceModule at ./spec/lib/spree/service_module_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:4\"}}","suiteSourceFile":"core/spec/lib/spree/service_module_spec.rb"},{"name":"first method failed doesn't call second method","suite":"Spree::ServiceModule at ./spec/lib/spree/service_module_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:5\"}}","suiteSourceFile":"core/spec/lib/spree/service_module_spec.rb"},{"name":"success returns result with success? true","suite":"Spree::ServiceModule at ./spec/lib/spree/service_module_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","suiteSourceFile":"core/spec/lib/spree/service_module_spec.rb"},{"name":"success returns result with failure? false","suite":"Spree::ServiceModule at ./spec/lib/spree/service_module_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2\"}}","suiteSourceFile":"core/spec/lib/spree/service_module_spec.rb"},{"name":"success returns value from last method","suite":"Spree::ServiceModule at ./spec/lib/spree/service_module_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:3\"}}","suiteSourceFile":"core/spec/lib/spree/service_module_spec.rb"},{"name":"success calls second method","suite":"Spree::ServiceModule at ./spec/lib/spree/service_module_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:4\"}}","suiteSourceFile":"core/spec/lib/spree/service_module_spec.rb"},{"name":"success passes input from call to first run method","suite":"Spree::ServiceModule at ./spec/lib/spree/service_module_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:5\"}}","suiteSourceFile":"core/spec/lib/spree/service_module_spec.rb"},{"name":"success passes empty hash if input was not provided","suite":"Spree::ServiceModule at ./spec/lib/spree/service_module_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:6\"}}","suiteSourceFile":"core/spec/lib/spree/service_module_spec.rb"},{"name":"not compatible params passed as result raises exception","suite":"Spree::ServiceModule at ./spec/lib/spree/service_module_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","suiteSourceFile":"core/spec/lib/spree/service_module_spec.rb"},{"name":"draft, make_active_at in the past -> active","suite":"core:activate_products at ./spec/lib/tasks/core_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2\"}}","suiteSourceFile":"core/spec/lib/tasks/core_spec.rb"},{"name":"draft, make_active_at in the future -> draft","suite":"core:activate_products at ./spec/lib/tasks/core_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3\"}}","suiteSourceFile":"core/spec/lib/tasks/core_spec.rb"},{"name":"archived, make_active_at in the past -> archived","suite":"core:activate_products at ./spec/lib/tasks/core_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4\"}}","suiteSourceFile":"core/spec/lib/tasks/core_spec.rb"},{"name":"archived, make_active_at in the future -> archived","suite":"core:activate_products at ./spec/lib/tasks/core_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5\"}}","suiteSourceFile":"core/spec/lib/tasks/core_spec.rb"},{"name":"#prerequisites example at ./spec/lib/tasks/core_spec.rb:9","suite":"core:activate_products at ./spec/lib/tasks/core_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/lib/tasks/core_spec.rb"},{"name":"migrates newsletter subscribers","suite":"core:migrate_newsletter_subscribers at ./spec/lib/tasks/core_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:1\"}}","suiteSourceFile":"core/spec/lib/tasks/core_spec.rb"},{"name":"draft, discontinue_on in the past -> archived","suite":"core:archive_products at ./spec/lib/tasks/core_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"3:2\"}}","suiteSourceFile":"core/spec/lib/tasks/core_spec.rb"},{"name":"draft, discontinue_on in the future -> draft","suite":"core:archive_products at ./spec/lib/tasks/core_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"3:3\"}}","suiteSourceFile":"core/spec/lib/tasks/core_spec.rb"},{"name":"active, discontinue_on in the past -> archived","suite":"core:archive_products at ./spec/lib/tasks/core_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"3:4\"}}","suiteSourceFile":"core/spec/lib/tasks/core_spec.rb"},{"name":"active, discontinue_on in the future -> active","suite":"core:archive_products at ./spec/lib/tasks/core_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"3:5\"}}","suiteSourceFile":"core/spec/lib/tasks/core_spec.rb"},{"name":"#prerequisites example at ./spec/lib/tasks/core_spec.rb:70","suite":"core:archive_products at ./spec/lib/tasks/core_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"3:1:1\"}}","suiteSourceFile":"core/spec/lib/tasks/core_spec.rb"},{"name":"#prerequisites example at ./spec/lib/tasks/exchanges_spec.rb:7","suite":"exchanges:charge_unreturned_items at ./spec/lib/tasks/exchanges_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/lib/tasks/exchanges_spec.rb"},{"name":"there are no unreturned items example at ./spec/lib/tasks/exchanges_spec.rb:11","suite":"exchanges:charge_unreturned_items at ./spec/lib/tasks/exchanges_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/lib/tasks/exchanges_spec.rb"},{"name":"there are unreturned items fewer than the config allowed days have passed does not create a new order","suite":"exchanges:charge_unreturned_items at ./spec/lib/tasks/exchanges_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","suiteSourceFile":"core/spec/lib/tasks/exchanges_spec.rb"},{"name":"there are unreturned items more than the config allowed days have passed creates a new completed order","suite":"exchanges:charge_unreturned_items at ./spec/lib/tasks/exchanges_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","suiteSourceFile":"core/spec/lib/tasks/exchanges_spec.rb"},{"name":"there are unreturned items more than the config allowed days have passed moves the shipment for the unreturned items to the new order","suite":"exchanges:charge_unreturned_items at ./spec/lib/tasks/exchanges_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:2\"}}","suiteSourceFile":"core/spec/lib/tasks/exchanges_spec.rb"},{"name":"there are unreturned items more than the config allowed days have passed creates line items on the order for the unreturned items","suite":"exchanges:charge_unreturned_items at ./spec/lib/tasks/exchanges_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:3\"}}","suiteSourceFile":"core/spec/lib/tasks/exchanges_spec.rb"},{"name":"there are unreturned items more than the config allowed days have passed associates the exchanges inventory units with the new line items","suite":"exchanges:charge_unreturned_items at ./spec/lib/tasks/exchanges_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:4\"}}","suiteSourceFile":"core/spec/lib/tasks/exchanges_spec.rb"},{"name":"there are unreturned items more than the config allowed days have passed uses the credit card from the previous order","suite":"exchanges:charge_unreturned_items at ./spec/lib/tasks/exchanges_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:5\"}}","suiteSourceFile":"core/spec/lib/tasks/exchanges_spec.rb"},{"name":"there are unreturned items more than the config allowed days have passed authorizes the order for the full amount of the unreturned items including taxes","suite":"exchanges:charge_unreturned_items at ./spec/lib/tasks/exchanges_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:6\"}}","suiteSourceFile":"core/spec/lib/tasks/exchanges_spec.rb"},{"name":"there are unreturned items more than the config allowed days have passed does not attempt to create a new order for the item more than once","suite":"exchanges:charge_unreturned_items at ./spec/lib/tasks/exchanges_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:7\"}}","suiteSourceFile":"core/spec/lib/tasks/exchanges_spec.rb"},{"name":"there are unreturned items more than the config allowed days have passed associates the store of the original order with the exchange order","suite":"exchanges:charge_unreturned_items at ./spec/lib/tasks/exchanges_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:8\"}}","suiteSourceFile":"core/spec/lib/tasks/exchanges_spec.rb"},{"name":"there are unreturned items more than the config allowed days have passed there is no card from the previous order attempts to use the user's default card","suite":"exchanges:charge_unreturned_items at ./spec/lib/tasks/exchanges_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:9:1\"}}","suiteSourceFile":"core/spec/lib/tasks/exchanges_spec.rb"},{"name":"there are unreturned items more than the config allowed days have passed it is unable to authorize the credit card raises an error with the order","suite":"exchanges:charge_unreturned_items at ./spec/lib/tasks/exchanges_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:10:1\"}}","suiteSourceFile":"core/spec/lib/tasks/exchanges_spec.rb"},{"name":"there are unreturned items more than the config allowed days have passed the exchange inventory unit is not shipped does not create a new order","suite":"exchanges:charge_unreturned_items at ./spec/lib/tasks/exchanges_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:11:1\"}}","suiteSourceFile":"core/spec/lib/tasks/exchanges_spec.rb"},{"name":"there are unreturned items more than the config allowed days have passed the exchange inventory unit has been returned does not create a new order","suite":"exchanges:charge_unreturned_items at ./spec/lib/tasks/exchanges_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:12:1\"}}","suiteSourceFile":"core/spec/lib/tasks/exchanges_spec.rb"},{"name":"#export_done renders the subject","suite":"Spree::ExportMailer at ./spec/mailers/spree/export_mailer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/mailers/spree/export_mailer_spec.rb"},{"name":"#export_done sends to the correct recipient","suite":"Spree::ExportMailer at ./spec/mailers/spree/export_mailer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/mailers/spree/export_mailer_spec.rb"},{"name":"#export_done includes export attachment filename","suite":"Spree::ExportMailer at ./spec/mailers/spree/export_mailer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/mailers/spree/export_mailer_spec.rb"},{"name":"#export_done includes download link in the body","suite":"Spree::ExportMailer at ./spec/mailers/spree/export_mailer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","suiteSourceFile":"core/spec/mailers/spree/export_mailer_spec.rb"},{"name":"#invitation_email renders the subject","suite":"Spree::InvitationMailer at ./spec/mailers/spree/invitation_mailer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/mailers/spree/invitation_mailer_spec.rb"},{"name":"#invitation_email sends to the correct recipient","suite":"Spree::InvitationMailer at ./spec/mailers/spree/invitation_mailer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/mailers/spree/invitation_mailer_spec.rb"},{"name":"#invitation_email sends from the store mail from address","suite":"Spree::InvitationMailer at ./spec/mailers/spree/invitation_mailer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/mailers/spree/invitation_mailer_spec.rb"},{"name":"#invitation_email sets reply-to as the store mail from address","suite":"Spree::InvitationMailer at ./spec/mailers/spree/invitation_mailer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","suiteSourceFile":"core/spec/mailers/spree/invitation_mailer_spec.rb"},{"name":"#invitation_email includes the invitation link in the body","suite":"Spree::InvitationMailer at ./spec/mailers/spree/invitation_mailer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","suiteSourceFile":"core/spec/mailers/spree/invitation_mailer_spec.rb"},{"name":"#invitation_accepted renders the subject","suite":"Spree::InvitationMailer at ./spec/mailers/spree/invitation_mailer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/mailers/spree/invitation_mailer_spec.rb"},{"name":"#invitation_accepted includes the invitee name in the body","suite":"Spree::InvitationMailer at ./spec/mailers/spree/invitation_mailer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","suiteSourceFile":"core/spec/mailers/spree/invitation_mailer_spec.rb"},{"name":"#invitation_accepted sends to the correct recipient","suite":"Spree::InvitationMailer at ./spec/mailers/spree/invitation_mailer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3\"}}","suiteSourceFile":"core/spec/mailers/spree/invitation_mailer_spec.rb"},{"name":"#invitation_accepted sends from the store mail from address","suite":"Spree::InvitationMailer at ./spec/mailers/spree/invitation_mailer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:4\"}}","suiteSourceFile":"core/spec/mailers/spree/invitation_mailer_spec.rb"},{"name":"#invitation_accepted sets reply-to as the store mail from address","suite":"Spree::InvitationMailer at ./spec/mailers/spree/invitation_mailer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:5\"}}","suiteSourceFile":"core/spec/mailers/spree/invitation_mailer_spec.rb"},{"name":"#report_done renders the subject","suite":"Spree::ReportMailer at ./spec/mailers/spree/report_mailer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/mailers/spree/report_mailer_spec.rb"},{"name":"#report_done sends to the correct recipient","suite":"Spree::ReportMailer at ./spec/mailers/spree/report_mailer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/mailers/spree/report_mailer_spec.rb"},{"name":"#report_done sends from the store mail from address","suite":"Spree::ReportMailer at ./spec/mailers/spree/report_mailer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/mailers/spree/report_mailer_spec.rb"},{"name":"#report_done sets reply-to as the store mail from address","suite":"Spree::ReportMailer at ./spec/mailers/spree/report_mailer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","suiteSourceFile":"core/spec/mailers/spree/report_mailer_spec.rb"},{"name":"#report_done includes download link in the body","suite":"Spree::ReportMailer at ./spec/mailers/spree/report_mailer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","suiteSourceFile":"core/spec/mailers/spree/report_mailer_spec.rb"},{"name":"included behavior creates the image_alt method","suite":"Spree::HasImageAltText at ./spec/models/concerns/spree/has_image_alt_text_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/concerns/spree/has_image_alt_text_spec.rb"},{"name":"included behavior returns preference value when present","suite":"Spree::HasImageAltText at ./spec/models/concerns/spree/has_image_alt_text_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/models/concerns/spree/has_image_alt_text_spec.rb"},{"name":"included behavior falls back when preference is whitespace-only","suite":"Spree::HasImageAltText at ./spec/models/concerns/spree/has_image_alt_text_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/models/concerns/spree/has_image_alt_text_spec.rb"},{"name":"included behavior returns filename-based alt when preference is blank but asset has filename","suite":"Spree::HasImageAltText at ./spec/models/concerns/spree/has_image_alt_text_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","suiteSourceFile":"core/spec/models/concerns/spree/has_image_alt_text_spec.rb"},{"name":"included behavior returns \"Image\" as fallback when no preference and no asset","suite":"Spree::HasImageAltText at ./spec/models/concerns/spree/has_image_alt_text_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","suiteSourceFile":"core/spec/models/concerns/spree/has_image_alt_text_spec.rb"},{"name":"included behavior when asset has no filename returns \"Image\" fallback","suite":"Spree::HasImageAltText at ./spec/models/concerns/spree/has_image_alt_text_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6:1\"}}","suiteSourceFile":"core/spec/models/concerns/spree/has_image_alt_text_spec.rb"},{"name":"included behavior filename processing correctly converts various filename formats","suite":"Spree::HasImageAltText at ./spec/models/concerns/spree/has_image_alt_text_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7:1\"}}","suiteSourceFile":"core/spec/models/concerns/spree/has_image_alt_text_spec.rb"},{"name":"#generate_url when gravity is not set to centre attachment.variant should receive the unchanged value of gravity","suite":"Spree::ImageMethods at ./spec/models/concerns/spree/image_methods_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/models/concerns/spree/image_methods_spec.rb"},{"name":"#generate_url when gravity is set to centre attachment.variant should receive \"gravity: center\" when image processing variant is nil","suite":"Spree::ImageMethods at ./spec/models/concerns/spree/image_methods_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/models/concerns/spree/image_methods_spec.rb"},{"name":"#generate_url when gravity is set to centre should return center when image processing variant is mini magick","suite":"Spree::ImageMethods at ./spec/models/concerns/spree/image_methods_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2\"}}","suiteSourceFile":"core/spec/models/concerns/spree/image_methods_spec.rb"},{"name":"#generate_url when gravity is set to centre should return centre when image processing variant is VIPS","suite":"Spree::ImageMethods at ./spec/models/concerns/spree/image_methods_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:3\"}}","suiteSourceFile":"core/spec/models/concerns/spree/image_methods_spec.rb"},{"name":"associations has many metafields","suite":"Spree::Metafields at ./spec/models/concerns/spree/metafields_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/concerns/spree/metafields_spec.rb"},{"name":"associations has many public_metafields","suite":"Spree::Metafields at ./spec/models/concerns/spree/metafields_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/models/concerns/spree/metafields_spec.rb"},{"name":"associations has many private_metafields","suite":"Spree::Metafields at ./spec/models/concerns/spree/metafields_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/models/concerns/spree/metafields_spec.rb"},{"name":".with_metafield_key returns products with the given metafield key","suite":"Spree::Metafields at ./spec/models/concerns/spree/metafields_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/concerns/spree/metafields_spec.rb"},{"name":".with_metafield_key does not return products without the given metafield key","suite":"Spree::Metafields at ./spec/models/concerns/spree/metafields_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","suiteSourceFile":"core/spec/models/concerns/spree/metafields_spec.rb"},{"name":".with_metafield_key_value returns products with the given metafield key and value","suite":"Spree::Metafields at ./spec/models/concerns/spree/metafields_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/models/concerns/spree/metafields_spec.rb"},{"name":".with_metafield_key_value does not return products with the key but different value","suite":"Spree::Metafields at ./spec/models/concerns/spree/metafields_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","suiteSourceFile":"core/spec/models/concerns/spree/metafields_spec.rb"},{"name":"#set_metafield and #get_metafield creates and retrieves a metafield by key_with_namespace","suite":"Spree::Metafields at ./spec/models/concerns/spree/metafields_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/models/concerns/spree/metafields_spec.rb"},{"name":"#set_metafield and #get_metafield updates the value if the metafield already exists","suite":"Spree::Metafields at ./spec/models/concerns/spree/metafields_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2\"}}","suiteSourceFile":"core/spec/models/concerns/spree/metafields_spec.rb"},{"name":"#has_metafield? returns true if metafield exists for string key_with_namespace","suite":"Spree::Metafields at ./spec/models/concerns/spree/metafields_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","suiteSourceFile":"core/spec/models/concerns/spree/metafields_spec.rb"},{"name":"#has_metafield? returns false if metafield does not exist for string key_with_namespace","suite":"Spree::Metafields at ./spec/models/concerns/spree/metafields_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2\"}}","suiteSourceFile":"core/spec/models/concerns/spree/metafields_spec.rb"},{"name":"#has_metafield? returns true if metafield exists for MetafieldDefinition","suite":"Spree::Metafields at ./spec/models/concerns/spree/metafields_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3\"}}","suiteSourceFile":"core/spec/models/concerns/spree/metafields_spec.rb"},{"name":"#has_metafield? returns false if metafield does not exist for MetafieldDefinition","suite":"Spree::Metafields at ./spec/models/concerns/spree/metafields_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:4\"}}","suiteSourceFile":"core/spec/models/concerns/spree/metafields_spec.rb"},{"name":"#has_metafield? raises ArgumentError for invalid key_with_namespace","suite":"Spree::Metafields at ./spec/models/concerns/spree/metafields_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:5\"}}","suiteSourceFile":"core/spec/models/concerns/spree/metafields_spec.rb"},{"name":"accepts_nested_attributes_for :metafields creates metafield via nested attributes","suite":"Spree::Metafields at ./spec/models/concerns/spree/metafields_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","suiteSourceFile":"core/spec/models/concerns/spree/metafields_spec.rb"},{"name":"accepts_nested_attributes_for :metafields rejects metafield if metafield_definition_id is blank","suite":"Spree::Metafields at ./spec/models/concerns/spree/metafields_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2\"}}","suiteSourceFile":"core/spec/models/concerns/spree/metafields_spec.rb"},{"name":"accepts_nested_attributes_for :metafields rejects metafield if id and value are blank","suite":"Spree::Metafields at ./spec/models/concerns/spree/metafields_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:3\"}}","suiteSourceFile":"core/spec/models/concerns/spree/metafields_spec.rb"},{"name":"accepts_nested_attributes_for :metafields auto-destroy metafields with empty values destroys existing metafield when value is set to empty string","suite":"Spree::Metafields at ./spec/models/concerns/spree/metafields_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:4:1\"}}","suiteSourceFile":"core/spec/models/concerns/spree/metafields_spec.rb"},{"name":"accepts_nested_attributes_for :metafields auto-destroy metafields with empty values destroys existing metafield when value is set to nil","suite":"Spree::Metafields at ./spec/models/concerns/spree/metafields_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:4:2\"}}","suiteSourceFile":"core/spec/models/concerns/spree/metafields_spec.rb"},{"name":"accepts_nested_attributes_for :metafields auto-destroy metafields with empty values updates existing metafield when value is not empty","suite":"Spree::Metafields at ./spec/models/concerns/spree/metafields_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:4:3\"}}","suiteSourceFile":"core/spec/models/concerns/spree/metafields_spec.rb"},{"name":"accepts_nested_attributes_for :metafields auto-destroy metafields with empty values handles multiple metafields correctly","suite":"Spree::Metafields at ./spec/models/concerns/spree/metafields_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:4:4\"}}","suiteSourceFile":"core/spec/models/concerns/spree/metafields_spec.rb"},{"name":"#publish_event publishes an event with the model payload","suite":"Spree::Publishable at ./spec/models/concerns/spree/publishable_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/concerns/spree/publishable_spec.rb"},{"name":"#publish_event allows custom payload","suite":"Spree::Publishable at ./spec/models/concerns/spree/publishable_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/models/concerns/spree/publishable_spec.rb"},{"name":"#publish_event does not publish when events are disabled","suite":"Spree::Publishable at ./spec/models/concerns/spree/publishable_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/models/concerns/spree/publishable_spec.rb"},{"name":"#event_payload with a serializer defined returns the serialized payload","suite":"Spree::Publishable at ./spec/models/concerns/spree/publishable_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","suiteSourceFile":"core/spec/models/concerns/spree/publishable_spec.rb"},{"name":"#event_payload without a serializer defined raises MissingSerializerError with helpful message","suite":"Spree::Publishable at ./spec/models/concerns/spree/publishable_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","suiteSourceFile":"core/spec/models/concerns/spree/publishable_spec.rb"},{"name":"#event_payload without a serializer defined includes example code in the error message","suite":"Spree::Publishable at ./spec/models/concerns/spree/publishable_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:2\"}}","suiteSourceFile":"core/spec/models/concerns/spree/publishable_spec.rb"},{"name":"#event_payload with anonymous class returns nil for event_serializer_class","suite":"Spree::Publishable at ./spec/models/concerns/spree/publishable_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:1\"}}","suiteSourceFile":"core/spec/models/concerns/spree/publishable_spec.rb"},{"name":"#event_prefix returns the model name element","suite":"Spree::Publishable at ./spec/models/concerns/spree/publishable_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/models/concerns/spree/publishable_spec.rb"},{"name":".publishes_lifecycle_events enables lifecycle events","suite":"Spree::Publishable at ./spec/models/concerns/spree/publishable_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/models/concerns/spree/publishable_spec.rb"},{"name":".publishes_lifecycle_events with only option only registers specified callbacks","suite":"Spree::Publishable at ./spec/models/concerns/spree/publishable_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3:1\"}}","suiteSourceFile":"core/spec/models/concerns/spree/publishable_spec.rb"},{"name":".publishes_lifecycle_events with except option excludes specified callbacks","suite":"Spree::Publishable at ./spec/models/concerns/spree/publishable_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:4:1\"}}","suiteSourceFile":"core/spec/models/concerns/spree/publishable_spec.rb"},{"name":".publishes_lifecycle_events with skip_lifecycle_events disables event publishing for the model","suite":"Spree::Publishable at ./spec/models/concerns/spree/publishable_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:5:1\"}}","suiteSourceFile":"core/spec/models/concerns/spree/publishable_spec.rb"},{"name":".event_prefix derives from model name","suite":"Spree::Publishable at ./spec/models/concerns/spree/publishable_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","suiteSourceFile":"core/spec/models/concerns/spree/publishable_spec.rb"},{"name":".event_prefix can be customized","suite":"Spree::Publishable at ./spec/models/concerns/spree/publishable_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2\"}}","suiteSourceFile":"core/spec/models/concerns/spree/publishable_spec.rb"},{"name":"register_ability adds the ability to the list of abilties","suite":"Spree::Ability at ./spec/models/spree/ability_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/ability_spec.rb"},{"name":"register_ability applies the registered abilities permissions","suite":"Spree::Ability at ./spec/models/spree/ability_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/ability_spec.rb"},{"name":"#abilities_to_register adds the ability to the list of abilities","suite":"Spree::Ability at ./spec/models/spree/ability_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/ability_spec.rb"},{"name":"#abilities_to_register applies the registered abilities permissions","suite":"Spree::Ability at ./spec/models/spree/ability_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","suiteSourceFile":"core/spec/models/spree/ability_spec.rb"},{"name":"for general resource with admin user behaves like access granted should allow show","suite":"Spree::Ability at ./spec/models/spree/ability_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/ability_spec.rb"},{"name":"for general resource with admin user behaves like access granted should allow create","suite":"Spree::Ability at ./spec/models/spree/ability_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/ability_spec.rb"},{"name":"for general resource with admin user behaves like access granted should allow update","suite":"Spree::Ability at ./spec/models/spree/ability_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1:3\"}}","suiteSourceFile":"core/spec/models/spree/ability_spec.rb"},{"name":"for general resource with admin user behaves like index allowed should allow index","suite":"Spree::Ability at ./spec/models/spree/ability_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/ability_spec.rb"},{"name":"for general resource with customer behaves like access denied should not allow read","suite":"Spree::Ability at ./spec/models/spree/ability_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/ability_spec.rb"},{"name":"for general resource with customer behaves like access denied should not allow create","suite":"Spree::Ability at ./spec/models/spree/ability_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1:2\"}}","suiteSourceFile":"core/spec/models/spree/ability_spec.rb"},{"name":"for general resource with customer behaves like access denied should not allow update","suite":"Spree::Ability at ./spec/models/spree/ability_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1:3\"}}","suiteSourceFile":"core/spec/models/spree/ability_spec.rb"},{"name":"for general resource with customer behaves like no index allowed should not allow index","suite":"Spree::Ability at ./spec/models/spree/ability_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/ability_spec.rb"},{"name":"for admin protected resources with admin user admin user role is able to admin","suite":"Spree::Ability at ./spec/models/spree/ability_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/ability_spec.rb"},{"name":"for admin protected resources with fakedispatch user is able to admin on the order and shipment pages","suite":"Spree::Ability at ./spec/models/spree/ability_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1\"}}","suiteSourceFile":"core/spec/models/spree/ability_spec.rb"},{"name":"for admin protected resources with customer is not able to admin","suite":"Spree::Ability at ./spec/models/spree/ability_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3:1\"}}","suiteSourceFile":"core/spec/models/spree/ability_spec.rb"},{"name":"as Guest User for Country requested by any user behaves like read only should not allow create","suite":"Spree::Ability at ./spec/models/spree/ability_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/ability_spec.rb"},{"name":"as Guest User for Country requested by any user behaves like read only should not allow update","suite":"Spree::Ability at ./spec/models/spree/ability_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/ability_spec.rb"},{"name":"as Guest User for Country requested by any user behaves like read only should allow index","suite":"Spree::Ability at ./spec/models/spree/ability_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:1:1:3\"}}","suiteSourceFile":"core/spec/models/spree/ability_spec.rb"},{"name":"as Guest User for OptionType requested by any user behaves like read only should not allow create","suite":"Spree::Ability at ./spec/models/spree/ability_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/ability_spec.rb"},{"name":"as Guest User for OptionType requested by any user behaves like read only should not allow update","suite":"Spree::Ability at ./spec/models/spree/ability_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/ability_spec.rb"},{"name":"as Guest User for OptionType requested by any user behaves like read only should allow index","suite":"Spree::Ability at ./spec/models/spree/ability_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1:1:3\"}}","suiteSourceFile":"core/spec/models/spree/ability_spec.rb"},{"name":"as Guest User for OptionValue requested by any user behaves like read only should not allow create","suite":"Spree::Ability at ./spec/models/spree/ability_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/ability_spec.rb"},{"name":"as Guest User for OptionValue requested by any user behaves like read only should not allow update","suite":"Spree::Ability at ./spec/models/spree/ability_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3:1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/ability_spec.rb"},{"name":"as Guest User for OptionValue requested by any user behaves like read only should allow index","suite":"Spree::Ability at ./spec/models/spree/ability_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3:1:1:3\"}}","suiteSourceFile":"core/spec/models/spree/ability_spec.rb"},{"name":"as Guest User for Order requested by same user behaves like access granted should allow show","suite":"Spree::Ability at ./spec/models/spree/ability_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:4:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/ability_spec.rb"},{"name":"as Guest User for Order requested by same user behaves like access granted should allow create","suite":"Spree::Ability at ./spec/models/spree/ability_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:4:1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/ability_spec.rb"},{"name":"as Guest User for Order requested by same user behaves like access granted should allow update","suite":"Spree::Ability at ./spec/models/spree/ability_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:4:1:1:3\"}}","suiteSourceFile":"core/spec/models/spree/ability_spec.rb"},{"name":"as Guest User for Order requested by same user behaves like no index allowed should not allow index","suite":"Spree::Ability at ./spec/models/spree/ability_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:4:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/ability_spec.rb"},{"name":"as Guest User for Order requested by other user behaves like create only should allow create","suite":"Spree::Ability at ./spec/models/spree/ability_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:4:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/ability_spec.rb"},{"name":"as Guest User for Order requested by other user behaves like create only should not allow read","suite":"Spree::Ability at ./spec/models/spree/ability_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:4:2:1:2\"}}","suiteSourceFile":"core/spec/models/spree/ability_spec.rb"},{"name":"as Guest User for Order requested by other user behaves like create only should not allow update","suite":"Spree::Ability at ./spec/models/spree/ability_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:4:2:1:3\"}}","suiteSourceFile":"core/spec/models/spree/ability_spec.rb"},{"name":"as Guest User for Order requested with proper token behaves like access granted should allow show","suite":"Spree::Ability at ./spec/models/spree/ability_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:4:3:1:1\"}}","suiteSourceFile":"core/spec/models/spree/ability_spec.rb"},{"name":"as Guest User for Order requested with proper token behaves like access granted should allow create","suite":"Spree::Ability at ./spec/models/spree/ability_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:4:3:1:2\"}}","suiteSourceFile":"core/spec/models/spree/ability_spec.rb"},{"name":"as Guest User for Order requested with proper token behaves like access granted should allow update","suite":"Spree::Ability at ./spec/models/spree/ability_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:4:3:1:3\"}}","suiteSourceFile":"core/spec/models/spree/ability_spec.rb"},{"name":"as Guest User for Order requested with proper token behaves like no index allowed should not allow index","suite":"Spree::Ability at ./spec/models/spree/ability_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:4:3:2:1\"}}","suiteSourceFile":"core/spec/models/spree/ability_spec.rb"},{"name":"as Guest User for Order requested with improper token behaves like create only should allow create","suite":"Spree::Ability at ./spec/models/spree/ability_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:4:4:1:1\"}}","suiteSourceFile":"core/spec/models/spree/ability_spec.rb"},{"name":"as Guest User for Order requested with improper token behaves like create only should not allow read","suite":"Spree::Ability at ./spec/models/spree/ability_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:4:4:1:2\"}}","suiteSourceFile":"core/spec/models/spree/ability_spec.rb"},{"name":"as Guest User for Order requested with improper token behaves like create only should not allow update","suite":"Spree::Ability at ./spec/models/spree/ability_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:4:4:1:3\"}}","suiteSourceFile":"core/spec/models/spree/ability_spec.rb"},{"name":"as Guest User for Product requested by any user behaves like read only should not allow create","suite":"Spree::Ability at ./spec/models/spree/ability_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:5:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/ability_spec.rb"},{"name":"as Guest User for Product requested by any user behaves like read only should not allow update","suite":"Spree::Ability at ./spec/models/spree/ability_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:5:1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/ability_spec.rb"},{"name":"as Guest User for Product requested by any user behaves like read only should allow index","suite":"Spree::Ability at ./spec/models/spree/ability_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:5:1:1:3\"}}","suiteSourceFile":"core/spec/models/spree/ability_spec.rb"},{"name":"as Guest User for ProductProperty requested by any user behaves like read only should not allow create","suite":"Spree::Ability at ./spec/models/spree/ability_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:6:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/ability_spec.rb"},{"name":"as Guest User for ProductProperty requested by any user behaves like read only should not allow update","suite":"Spree::Ability at ./spec/models/spree/ability_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:6:1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/ability_spec.rb"},{"name":"as Guest User for ProductProperty requested by any user behaves like read only should allow index","suite":"Spree::Ability at ./spec/models/spree/ability_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:6:1:1:3\"}}","suiteSourceFile":"core/spec/models/spree/ability_spec.rb"},{"name":"as Guest User for Property requested by any user behaves like read only should not allow create","suite":"Spree::Ability at ./spec/models/spree/ability_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:7:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/ability_spec.rb"},{"name":"as Guest User for Property requested by any user behaves like read only should not allow update","suite":"Spree::Ability at ./spec/models/spree/ability_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:7:1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/ability_spec.rb"},{"name":"as Guest User for Property requested by any user behaves like read only should allow index","suite":"Spree::Ability at ./spec/models/spree/ability_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:7:1:1:3\"}}","suiteSourceFile":"core/spec/models/spree/ability_spec.rb"},{"name":"as Guest User for State requested by any user behaves like read only should not allow create","suite":"Spree::Ability at ./spec/models/spree/ability_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:8:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/ability_spec.rb"},{"name":"as Guest User for State requested by any user behaves like read only should not allow update","suite":"Spree::Ability at ./spec/models/spree/ability_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:8:1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/ability_spec.rb"},{"name":"as Guest User for State requested by any user behaves like read only should allow index","suite":"Spree::Ability at ./spec/models/spree/ability_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:8:1:1:3\"}}","suiteSourceFile":"core/spec/models/spree/ability_spec.rb"},{"name":"as Guest User for Taxons requested by any user behaves like read only should not allow create","suite":"Spree::Ability at ./spec/models/spree/ability_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:9:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/ability_spec.rb"},{"name":"as Guest User for Taxons requested by any user behaves like read only should not allow update","suite":"Spree::Ability at ./spec/models/spree/ability_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:9:1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/ability_spec.rb"},{"name":"as Guest User for Taxons requested by any user behaves like read only should allow index","suite":"Spree::Ability at ./spec/models/spree/ability_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:9:1:1:3\"}}","suiteSourceFile":"core/spec/models/spree/ability_spec.rb"},{"name":"as Guest User for Taxonomy requested by any user behaves like read only should not allow create","suite":"Spree::Ability at ./spec/models/spree/ability_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:10:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/ability_spec.rb"},{"name":"as Guest User for Taxonomy requested by any user behaves like read only should not allow update","suite":"Spree::Ability at ./spec/models/spree/ability_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:10:1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/ability_spec.rb"},{"name":"as Guest User for Taxonomy requested by any user behaves like read only should allow index","suite":"Spree::Ability at ./spec/models/spree/ability_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:10:1:1:3\"}}","suiteSourceFile":"core/spec/models/spree/ability_spec.rb"},{"name":"as Guest User for User requested by same user behaves like access granted should allow show","suite":"Spree::Ability at ./spec/models/spree/ability_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:11:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/ability_spec.rb"},{"name":"as Guest User for User requested by same user behaves like access granted should allow create","suite":"Spree::Ability at ./spec/models/spree/ability_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:11:1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/ability_spec.rb"},{"name":"as Guest User for User requested by same user behaves like access granted should allow update","suite":"Spree::Ability at ./spec/models/spree/ability_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:11:1:1:3\"}}","suiteSourceFile":"core/spec/models/spree/ability_spec.rb"},{"name":"as Guest User for User requested by same user behaves like no index allowed should not allow index","suite":"Spree::Ability at ./spec/models/spree/ability_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:11:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/ability_spec.rb"},{"name":"as Guest User for User requested by other user behaves like create only should allow create","suite":"Spree::Ability at ./spec/models/spree/ability_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:11:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/ability_spec.rb"},{"name":"as Guest User for User requested by other user behaves like create only should not allow read","suite":"Spree::Ability at ./spec/models/spree/ability_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:11:2:1:2\"}}","suiteSourceFile":"core/spec/models/spree/ability_spec.rb"},{"name":"as Guest User for User requested by other user behaves like create only should not allow update","suite":"Spree::Ability at ./spec/models/spree/ability_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:11:2:1:3\"}}","suiteSourceFile":"core/spec/models/spree/ability_spec.rb"},{"name":"as Guest User for Variant requested by any user behaves like read only should not allow create","suite":"Spree::Ability at ./spec/models/spree/ability_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:12:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/ability_spec.rb"},{"name":"as Guest User for Variant requested by any user behaves like read only should not allow update","suite":"Spree::Ability at ./spec/models/spree/ability_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:12:1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/ability_spec.rb"},{"name":"as Guest User for Variant requested by any user behaves like read only should allow index","suite":"Spree::Ability at ./spec/models/spree/ability_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:12:1:1:3\"}}","suiteSourceFile":"core/spec/models/spree/ability_spec.rb"},{"name":"as Guest User for Zone requested by any user behaves like read only should not allow create","suite":"Spree::Ability at ./spec/models/spree/ability_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:13:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/ability_spec.rb"},{"name":"as Guest User for Zone requested by any user behaves like read only should not allow update","suite":"Spree::Ability at ./spec/models/spree/ability_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:13:1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/ability_spec.rb"},{"name":"as Guest User for Zone requested by any user behaves like read only should allow index","suite":"Spree::Ability at ./spec/models/spree/ability_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:13:1:1:3\"}}","suiteSourceFile":"core/spec/models/spree/ability_spec.rb"},{"name":"as Guest User for Address (IDOR vulnerability prevention) with non-persisted guest user cannot read guest addresses with nil user_id","suite":"Spree::Ability at ./spec/models/spree/ability_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:14:1:1\"}}","suiteSourceFile":"core/spec/models/spree/ability_spec.rb"},{"name":"as Guest User for Address (IDOR vulnerability prevention) with non-persisted guest user cannot edit guest addresses with nil user_id","suite":"Spree::Ability at ./spec/models/spree/ability_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:14:1:2\"}}","suiteSourceFile":"core/spec/models/spree/ability_spec.rb"},{"name":"as Guest User for Address (IDOR vulnerability prevention) with non-persisted guest user cannot update guest addresses with nil user_id","suite":"Spree::Ability at ./spec/models/spree/ability_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:14:1:3\"}}","suiteSourceFile":"core/spec/models/spree/ability_spec.rb"},{"name":"as Guest User for Address (IDOR vulnerability prevention) with non-persisted guest user cannot destroy guest addresses with nil user_id","suite":"Spree::Ability at ./spec/models/spree/ability_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:14:1:4\"}}","suiteSourceFile":"core/spec/models/spree/ability_spec.rb"},{"name":"as Guest User for Address (IDOR vulnerability prevention) with non-persisted guest user cannot manage any address","suite":"Spree::Ability at ./spec/models/spree/ability_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:14:1:5\"}}","suiteSourceFile":"core/spec/models/spree/ability_spec.rb"},{"name":"as Guest User for Address (IDOR vulnerability prevention) with persisted user can manage own address","suite":"Spree::Ability at ./spec/models/spree/ability_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:14:2:1\"}}","suiteSourceFile":"core/spec/models/spree/ability_spec.rb"},{"name":"as Guest User for Address (IDOR vulnerability prevention) with persisted user cannot manage guest addresses","suite":"Spree::Ability at ./spec/models/spree/ability_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:14:2:2\"}}","suiteSourceFile":"core/spec/models/spree/ability_spec.rb"},{"name":"as Guest User for Address (IDOR vulnerability prevention) with persisted user cannot manage other user addresses","suite":"Spree::Ability at ./spec/models/spree/ability_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:14:2:3\"}}","suiteSourceFile":"core/spec/models/spree/ability_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:4","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:5","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:7","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:8","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:10","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:11","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"behaves like metadata reads data as symbolized keys","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"behaves like metadata reads data as not symbolized keys","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"behaves like metadata can query records by metadata properties","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:10\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"before_validation :remove_emoji_and_normalize normalizes the address and removes emojis","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"after_commit :async_geocode geocodes the address in the background","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"after_commit :async_geocode when geocoding data didn't change skips geocoding","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"default values with user sets user_id and first/last name from user","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"clone creates a copy of the address with the exception of the id, label, user_id, updated_at and created_at attributes","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"delegated method Country #country_name return proper country_iso_name","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"delegated method Country #country_iso_name return proper country_iso_name","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"delegated method Country #country_iso return proper country_iso_name","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"delegated method Country #country_iso3 return proper country_iso_name","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"aliased attributes first_name","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"aliased attributes last_name","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"validation state_name is not nil and country does not have any states","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"validation errors when state_name is nil","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"validation full state name is in state_name and country does contain that state","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:3\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"validation state abbr is in state_name and country does contain that state","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:4\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"validation state is entered but country does not contain that state","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:5\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"validation both state and state_name are entered but country does not contain the state","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:6\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"validation both state and state_name are entered and country does contain the state","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:7\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"validation address_requires_state preference is false","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:8\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"validation does not require phone","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:9\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"validation requires zipcode","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:11\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"validation requires firstname","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:12\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"validation requires lastname","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:13\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"validation when phone is required validates presence of the phone","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:10:1\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"validation zipcode validation validates the zipcode","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:14:1\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"validation zipcode validation accepts a zip code with surrounding white space","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:14:2\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"validation zipcode validation accepts an unformatted zip code","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:14:3\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"validation zipcode validation does not validate is for quick checkout","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:14:4:1\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"validation zipcode validation does not validate does not have a country","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:14:4:2\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"validation zipcode validation does not validate country does not requires zipcode","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:14:4:3\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"validation zipcode validation does not validate does not have an iso","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:14:4:4\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"validation zipcode validation does not validate does not have a zipcode","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:14:4:5\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"validation zipcode validation does not validate zipcode is nil","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:14:4:6\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"validation zipcode validation does not validate does not have a supported country iso","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:14:4:7\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"validation phone not required shows no errors when phone is blank","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:15:1\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"validation zipcode not required shows no errors when phone is blank","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:16:1\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"after create when user is assigned and it has default name should assign address name to the user","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1:1\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"#full_name both first and last names are present example at ./spec/models/spree/address_spec.rb:366","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1:1\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"#state_text state is blank example at ./spec/models/spree/address_spec.rb:374","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1:1\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"#state_text both name and abbr is present example at ./spec/models/spree/address_spec.rb:381","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2:1\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"#state_text only name is present example at ./spec/models/spree/address_spec.rb:388","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:3:1\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"#state_name_text state_name is blank example at ./spec/models/spree/address_spec.rb:397","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:1:1\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"#state_name_text state is blank example at ./spec/models/spree/address_spec.rb:403","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:2:1\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"#state_name_text state and state_name are present example at ./spec/models/spree/address_spec.rb:410","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:3:1\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"defines require_phone? helper method example at ./spec/models/spree/address_spec.rb:417","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:1\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"#clear_state example at ./spec/models/spree/address_spec.rb:425","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:1\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"#clear_state example at ./spec/models/spree/address_spec.rb:426","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:2\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"#clear_state_name example at ./spec/models/spree/address_spec.rb:434","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:1\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"#clear_state_name example at ./spec/models/spree/address_spec.rb:435","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:2\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"#clear_invalid_state_entities state not present and state_name both not present example at ./spec/models/spree/address_spec.rb:454","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:1:1\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"#clear_invalid_state_entities state not present and state_name both not present example at ./spec/models/spree/address_spec.rb:455","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:1:2\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"#clear_invalid_state_entities state_name not present and state present state belongs to a different country than to which address is associated example at ./spec/models/spree/address_spec.rb:467","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"#clear_invalid_state_entities state_name not present and state present state belongs to a different country than to which address is associated example at ./spec/models/spree/address_spec.rb:468","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:2:1:2\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"#clear_invalid_state_entities state_name not present and state present state belongs to the same country associated with address example at ./spec/models/spree/address_spec.rb:474","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"#clear_invalid_state_entities state_name not present and state present state belongs to the same country associated with address example at ./spec/models/spree/address_spec.rb:475","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:2:2:2\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"#clear_invalid_state_entities state not present and state_name present when country has no states and state is required example at ./spec/models/spree/address_spec.rb:491","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:3:1:1\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"#clear_invalid_state_entities state not present and state_name present when country has no states and state is required example at ./spec/models/spree/address_spec.rb:492","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:3:1:2\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"#clear_invalid_state_entities state not present and state_name present when country has states example at ./spec/models/spree/address_spec.rb:501","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:3:2:1\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"#clear_invalid_state_entities state not present and state_name present when country has states example at ./spec/models/spree/address_spec.rb:502","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:3:2:2\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"#clear_invalid_state_entities state not present and state_name present when country has no states and state is not required example at ./spec/models/spree/address_spec.rb:512","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:3:3:1\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"#clear_invalid_state_entities state not present and state_name present when country has no states and state is not required example at ./spec/models/spree/address_spec.rb:513","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:3:3:2\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"#== same addresses example at ./spec/models/spree/address_spec.rb:523","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:17:1:1\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"#== different addresses example at ./spec/models/spree/address_spec.rb:529","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:17:2:1\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"editable & destroy has required attributes","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:1\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"editable & destroy is editable","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:2\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"editable & destroy can be deleted","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:3\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"editable & destroy isn't editable when there is an associated order","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:4\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"editable & destroy can't be deleted when there is an associated order","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:5\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"editable & destroy can be deleted when there is an incomplete associated order","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:6\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"editable & destroy is destroyed without saving used","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:7\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"editable & destroy is destroyed deleted timestamp","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:8\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"editable & destroy when saving user raises error does not set deleted_at attribute for address","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:9:1\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"editable & destroy #assign_new_default_address_to_user when address is deleted is deleted","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:10:1:1\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"editable & destroy #assign_new_default_address_to_user when address is deleted behaves like default address when 2 addresses are available assigns last available address as default to bill and ship address","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:10:1:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"editable & destroy #assign_new_default_address_to_user when address is deleted behaves like default address when the only address left is invalid does not raise errors and sets addresses to nil","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:10:1:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"editable & destroy #assign_new_default_address_to_user when address is deleted behaves like default address when the only address left is soft-deleted does not raise errors and sets addresses to nil","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:10:1:2:3:1\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"editable & destroy #assign_new_default_address_to_user when address is deleted behaves like default address when deleted address was not assigned to the user does not touch user","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:10:1:2:4:1\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"editable & destroy #assign_new_default_address_to_user when address is deleted behaves like default address when deleted address was not default does not change user bill address","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:10:1:2:5:1\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"editable & destroy #assign_new_default_address_to_user when address is deleted behaves like default address when deleted address was not default does not change user ship address","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:10:1:2:5:2\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"editable & destroy #assign_new_default_address_to_user when address is soft deleted is soft deleted","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:10:2:1\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"editable & destroy #assign_new_default_address_to_user when address is soft deleted behaves like default address when 2 addresses are available assigns last available address as default to bill and ship address","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:10:2:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"editable & destroy #assign_new_default_address_to_user when address is soft deleted behaves like default address when the only address left is invalid does not raise errors and sets addresses to nil","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:10:2:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"editable & destroy #assign_new_default_address_to_user when address is soft deleted behaves like default address when the only address left is soft-deleted does not raise errors and sets addresses to nil","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:10:2:2:3:1\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"editable & destroy #assign_new_default_address_to_user when address is soft deleted behaves like default address when deleted address was not assigned to the user does not touch user","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:10:2:2:4:1\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"editable & destroy #assign_new_default_address_to_user when address is soft deleted behaves like default address when deleted address was not default does not change user bill address","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:10:2:2:5:1\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"editable & destroy #assign_new_default_address_to_user when address is soft deleted behaves like default address when deleted address was not default does not change user ship address","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:10:2:2:5:2\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"#to_s is displayed as string","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:1\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"#to_s address contains HTML properly escapes HTML","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:2:1\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"address validators runs through all configured validators during validation","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:20:1\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"require_phone? when quick_checkout is true returns false","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:21:1:1\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"require_phone? when quick_checkout is false and Spree::Config[:address_requires_phone] is true returns true","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:21:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"require_phone? when quick_checkout is false and Spree::Config[:address_requires_phone] is false returns false","suite":"Spree::Address at ./spec/models/spree/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:21:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/address_spec.rb"},{"name":"raises missing update method","suite":"Spree::Adjustable::Adjuster::Base at ./spec/models/spree/adjustable/adjuster/base_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","suiteSourceFile":"core/spec/models/spree/adjustable/adjuster/base_spec.rb"},{"name":"best promotion is always applied uses only the most valuable promotion","suite":"Spree::Adjustable::Adjuster::Promotion at ./spec/models/spree/adjustable/adjuster/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/adjustable/adjuster/promotion_spec.rb"},{"name":"best promotion is always applied chooses the most recent promotion adjustment when amounts are equal","suite":"Spree::Adjustable::Adjuster::Promotion at ./spec/models/spree/adjustable/adjuster/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/models/spree/adjustable/adjuster/promotion_spec.rb"},{"name":"best promotion is always applied only leaves one adjustment even if 2 have the same amount","suite":"Spree::Adjustable::Adjuster::Promotion at ./spec/models/spree/adjustable/adjuster/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","suiteSourceFile":"core/spec/models/spree/adjustable/adjuster/promotion_spec.rb"},{"name":"best promotion is always applied competing promos do not update promo_total","suite":"Spree::Adjustable::Adjuster::Promotion at ./spec/models/spree/adjustable/adjuster/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/adjustable/adjuster/promotion_spec.rb"},{"name":"best promotion is always applied when previously ineligible promotions become available picks the best order-level promo according to current eligibility","suite":"Spree::Adjustable::Adjuster::Promotion at ./spec/models/spree/adjustable/adjuster/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/adjustable/adjuster/promotion_spec.rb"},{"name":"best promotion is always applied when previously ineligible promotions become available picks the best order-level promo according to current eligibility","suite":"Spree::Adjustable::Adjuster::Promotion at ./spec/models/spree/adjustable/adjuster/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:2\"}}","suiteSourceFile":"core/spec/models/spree/adjustable/adjuster/promotion_spec.rb"},{"name":"best promotion is always applied when previously ineligible promotions become available picks the best line-item-level promo according to current eligibility","suite":"Spree::Adjustable::Adjuster::Promotion at ./spec/models/spree/adjustable/adjuster/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:3\"}}","suiteSourceFile":"core/spec/models/spree/adjustable/adjuster/promotion_spec.rb"},{"name":"best promotion is always applied when previously ineligible promotions become available picks the best line-item-level promo according to current eligibility","suite":"Spree::Adjustable::Adjuster::Promotion at ./spec/models/spree/adjustable/adjuster/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:4\"}}","suiteSourceFile":"core/spec/models/spree/adjustable/adjuster/promotion_spec.rb"},{"name":"best promotion is always applied multiple adjustments and the best one is not eligible still makes the previous best eligible adjustment valid","suite":"Spree::Adjustable::Adjuster::Promotion at ./spec/models/spree/adjustable/adjuster/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5:1\"}}","suiteSourceFile":"core/spec/models/spree/adjustable/adjuster/promotion_spec.rb"},{"name":"taxes with promotions tax included in price tax has no bearing on final price","suite":"Spree::Adjustable::Adjuster::Tax at ./spec/models/spree/adjustable/adjuster/tax_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/adjustable/adjuster/tax_spec.rb"},{"name":"taxes with promotions tax included in price tax linked to order","suite":"Spree::Adjustable::Adjuster::Tax at ./spec/models/spree/adjustable/adjuster/tax_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/adjustable/adjuster/tax_spec.rb"},{"name":"taxes with promotions tax excluded from price tax applies to line item","suite":"Spree::Adjustable::Adjuster::Tax at ./spec/models/spree/adjustable/adjuster/tax_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/adjustable/adjuster/tax_spec.rb"},{"name":"taxes with promotions tax excluded from price tax linked to order","suite":"Spree::Adjustable::Adjuster::Tax at ./spec/models/spree/adjustable/adjuster/tax_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2\"}}","suiteSourceFile":"core/spec/models/spree/adjustable/adjuster/tax_spec.rb"},{"name":"#update persisted object updates all linked adjusters","suite":"Spree::Adjustable::AdjustmentsUpdater at ./spec/models/spree/adjustable/adjustments_updater_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/adjustable/adjustments_updater_spec.rb"},{"name":"#update persisted object when there is no tax adjuster updates all linked adjusters without tax","suite":"Spree::Adjustable::AdjustmentsUpdater at ./spec/models/spree/adjustable/adjustments_updater_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/adjustable/adjustments_updater_spec.rb"},{"name":"#update non-persisted object does nothing","suite":"Spree::Adjustable::AdjustmentsUpdater at ./spec/models/spree/adjustable/adjustments_updater_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/adjustable/adjustments_updater_spec.rb"},{"name":"#update nil does not raise an error","suite":"Spree::Adjustable::AdjustmentsUpdater at ./spec/models/spree/adjustable/adjustments_updater_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/adjustable/adjustments_updater_spec.rb"},{"name":"#amount= is expected to equal to localized number","suite":"Spree::Adjustment at ./spec/models/spree/adjustment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/adjustment_spec.rb"},{"name":"scopes .for_complete_order example at ./spec/models/spree/adjustment_spec.rb:30","suite":"Spree::Adjustment at ./spec/models/spree/adjustment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/adjustment_spec.rb"},{"name":"scopes .for_complete_order example at ./spec/models/spree/adjustment_spec.rb:31","suite":"Spree::Adjustment at ./spec/models/spree/adjustment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:2\"}}","suiteSourceFile":"core/spec/models/spree/adjustment_spec.rb"},{"name":"scopes .for_incomplete_order example at ./spec/models/spree/adjustment_spec.rb:42","suite":"Spree::Adjustment at ./spec/models/spree/adjustment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/adjustment_spec.rb"},{"name":"scopes .for_incomplete_order example at ./spec/models/spree/adjustment_spec.rb:43","suite":"Spree::Adjustment at ./spec/models/spree/adjustment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:2\"}}","suiteSourceFile":"core/spec/models/spree/adjustment_spec.rb"},{"name":"#create & #destroy calls #update_adjustable_adjustment_total","suite":"Spree::Adjustment at ./spec/models/spree/adjustment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/adjustment_spec.rb"},{"name":"#save touches the adjustable","suite":"Spree::Adjustment at ./spec/models/spree/adjustment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/adjustment_spec.rb"},{"name":"non_tax scope select non-tax adjustments","suite":"Spree::Adjustment at ./spec/models/spree/adjustment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","suiteSourceFile":"core/spec/models/spree/adjustment_spec.rb"},{"name":"competing_promos scope no custom source_types have been added to competing_promos selects promotion adjustments by default","suite":"Spree::Adjustment at ./spec/models/spree/adjustment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1:1\"}}","suiteSourceFile":"core/spec/models/spree/adjustment_spec.rb"},{"name":"competing_promos scope a custom source_type has been added to competing_promos selects adjustments with registered source_types","suite":"Spree::Adjustment at ./spec/models/spree/adjustment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2:1\"}}","suiteSourceFile":"core/spec/models/spree/adjustment_spec.rb"},{"name":"adjustment state #closed? is true when adjustment state is closed","suite":"Spree::Adjustment at ./spec/models/spree/adjustment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1:1\"}}","suiteSourceFile":"core/spec/models/spree/adjustment_spec.rb"},{"name":"adjustment state #closed? is false when adjustment state is open","suite":"Spree::Adjustment at ./spec/models/spree/adjustment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1:2\"}}","suiteSourceFile":"core/spec/models/spree/adjustment_spec.rb"},{"name":"#currency returns the order currency","suite":"Spree::Adjustment at ./spec/models/spree/adjustment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1\"}}","suiteSourceFile":"core/spec/models/spree/adjustment_spec.rb"},{"name":"#display_amount shows the amount","suite":"Spree::Adjustment at ./spec/models/spree/adjustment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1\"}}","suiteSourceFile":"core/spec/models/spree/adjustment_spec.rb"},{"name":"#display_amount with currency set to JPY when adjustable is set to an order displays in JPY","suite":"Spree::Adjustment at ./spec/models/spree/adjustment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/adjustment_spec.rb"},{"name":"#display_amount with currency set to JPY when adjustable is nil displays in the default currency","suite":"Spree::Adjustment at ./spec/models/spree/adjustment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/adjustment_spec.rb"},{"name":"#update! when adjustment is closed does not update the adjustment","suite":"Spree::Adjustment at ./spec/models/spree/adjustment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1:1\"}}","suiteSourceFile":"core/spec/models/spree/adjustment_spec.rb"},{"name":"#update! when adjustment is open updates the amount","suite":"Spree::Adjustment at ./spec/models/spree/adjustment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:2:1\"}}","suiteSourceFile":"core/spec/models/spree/adjustment_spec.rb"},{"name":"#update! when adjustment is open it is a promotion adjustment the promotion is eligible sets the adjustment eligible to true","suite":"Spree::Adjustment at ./spec/models/spree/adjustment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:2:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/adjustment_spec.rb"},{"name":"#update! when adjustment is open it is a promotion adjustment the promotion is not eligible sets the adjustment eligible to false","suite":"Spree::Adjustment at ./spec/models/spree/adjustment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:2:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/adjustment_spec.rb"},{"name":"#update! when adjustment is open when amount and eligible are the same does not update the adjustment","suite":"Spree::Adjustment at ./spec/models/spree/adjustment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:2:3:1\"}}","suiteSourceFile":"core/spec/models/spree/adjustment_spec.rb"},{"name":"#cached_source returns the source","suite":"Spree::Adjustment at ./spec/models/spree/adjustment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1\"}}","suiteSourceFile":"core/spec/models/spree/adjustment_spec.rb"},{"name":"#cached_source uses Rails.cache.fetch to cache the source","suite":"Spree::Adjustment at ./spec/models/spree/adjustment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2\"}}","suiteSourceFile":"core/spec/models/spree/adjustment_spec.rb"},{"name":"#cached_source returns nil when source_type is blank","suite":"Spree::Adjustment at ./spec/models/spree/adjustment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:3\"}}","suiteSourceFile":"core/spec/models/spree/adjustment_spec.rb"},{"name":"#cached_source returns nil when source_id is blank","suite":"Spree::Adjustment at ./spec/models/spree/adjustment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:4\"}}","suiteSourceFile":"core/spec/models/spree/adjustment_spec.rb"},{"name":"#source_cache_key returns a cache key based on source type and id","suite":"Spree::Adjustment at ./spec/models/spree/adjustment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:1\"}}","suiteSourceFile":"core/spec/models/spree/adjustment_spec.rb"},{"name":"#can_be_deleted? when store has other admin users example at ./spec/models/spree/admin_user_spec.rb:14","suite":"Spree::LegacyUser at ./spec/models/spree/admin_user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/admin_user_spec.rb"},{"name":"#can_be_deleted? when store has no other admin users example at ./spec/models/spree/admin_user_spec.rb:18","suite":"Spree::LegacyUser at ./spec/models/spree/admin_user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/admin_user_spec.rb"},{"name":"#can_be_deleted? when the user does not have admin role example at ./spec/models/spree/admin_user_spec.rb:24","suite":"Spree::LegacyUser at ./spec/models/spree/admin_user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/admin_user_spec.rb"},{"name":"Callbacks cleans up admin user resources nullifies admin user resources","suite":"Spree::LegacyUser at ./spec/models/spree/admin_user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/admin_user_spec.rb"},{"name":"#destroy (regression tests) admin user invited other other users accept invitation does not remove other user's role","suite":"Spree::LegacyUser at ./spec/models/spree/admin_user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/admin_user_spec.rb"},{"name":"backwards compatibility returns the default value as string","suite":"Spree::Core::Dependencies at ./spec/models/spree/app_dependencies_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/app_dependencies_spec.rb"},{"name":"backwards compatibility allows to overwrite the value with a class","suite":"Spree::Core::Dependencies at ./spec/models/spree/app_dependencies_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/app_dependencies_spec.rb"},{"name":"backwards compatibility allows to overwrite the value with a string","suite":"Spree::Core::Dependencies at ./spec/models/spree/app_dependencies_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/models/spree/app_dependencies_spec.rb"},{"name":"backwards compatibility works with constantize for string values","suite":"Spree::Core::Dependencies at ./spec/models/spree/app_dependencies_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","suiteSourceFile":"core/spec/models/spree/app_dependencies_spec.rb"},{"name":"#_class returns the constantized class for string values","suite":"Spree::Core::Dependencies at ./spec/models/spree/app_dependencies_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/app_dependencies_spec.rb"},{"name":"#_class returns the class directly when set as class","suite":"Spree::Core::Dependencies at ./spec/models/spree/app_dependencies_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","suiteSourceFile":"core/spec/models/spree/app_dependencies_spec.rb"},{"name":"#_class memoizes the resolved class","suite":"Spree::Core::Dependencies at ./spec/models/spree/app_dependencies_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3\"}}","suiteSourceFile":"core/spec/models/spree/app_dependencies_spec.rb"},{"name":"#_class clears memoization when value changes","suite":"Spree::Core::Dependencies at ./spec/models/spree/app_dependencies_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:4\"}}","suiteSourceFile":"core/spec/models/spree/app_dependencies_spec.rb"},{"name":"#overrides returns empty hash when no overrides","suite":"Spree::Core::Dependencies at ./spec/models/spree/app_dependencies_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/app_dependencies_spec.rb"},{"name":"#overrides tracks overridden dependencies","suite":"Spree::Core::Dependencies at ./spec/models/spree/app_dependencies_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","suiteSourceFile":"core/spec/models/spree/app_dependencies_spec.rb"},{"name":"#overrides includes override metadata","suite":"Spree::Core::Dependencies at ./spec/models/spree/app_dependencies_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3\"}}","suiteSourceFile":"core/spec/models/spree/app_dependencies_spec.rb"},{"name":"#overridden? returns false for non-overridden dependencies","suite":"Spree::Core::Dependencies at ./spec/models/spree/app_dependencies_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/app_dependencies_spec.rb"},{"name":"#overridden? returns true for overridden dependencies","suite":"Spree::Core::Dependencies at ./spec/models/spree/app_dependencies_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2\"}}","suiteSourceFile":"core/spec/models/spree/app_dependencies_spec.rb"},{"name":"#overridden? works with string argument","suite":"Spree::Core::Dependencies at ./spec/models/spree/app_dependencies_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3\"}}","suiteSourceFile":"core/spec/models/spree/app_dependencies_spec.rb"},{"name":"#override_info returns nil for non-overridden dependencies","suite":"Spree::Core::Dependencies at ./spec/models/spree/app_dependencies_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","suiteSourceFile":"core/spec/models/spree/app_dependencies_spec.rb"},{"name":"#override_info returns override info for overridden dependencies","suite":"Spree::Core::Dependencies at ./spec/models/spree/app_dependencies_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2\"}}","suiteSourceFile":"core/spec/models/spree/app_dependencies_spec.rb"},{"name":"#current_values returns all dependencies with metadata","suite":"Spree::Core::Dependencies at ./spec/models/spree/app_dependencies_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","suiteSourceFile":"core/spec/models/spree/app_dependencies_spec.rb"},{"name":"#current_values marks non-overridden dependencies correctly","suite":"Spree::Core::Dependencies at ./spec/models/spree/app_dependencies_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2\"}}","suiteSourceFile":"core/spec/models/spree/app_dependencies_spec.rb"},{"name":"#current_values marks overridden dependencies correctly","suite":"Spree::Core::Dependencies at ./spec/models/spree/app_dependencies_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:3\"}}","suiteSourceFile":"core/spec/models/spree/app_dependencies_spec.rb"},{"name":"#validate! raises Spree::DependencyError for invalid dependencies","suite":"Spree::Core::Dependencies at ./spec/models/spree/app_dependencies_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","suiteSourceFile":"core/spec/models/spree/app_dependencies_spec.rb"},{"name":"#validate! includes dependency names in error message","suite":"Spree::Core::Dependencies at ./spec/models/spree/app_dependencies_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2\"}}","suiteSourceFile":"core/spec/models/spree/app_dependencies_spec.rb"},{"name":"Spree. returns the resolved class","suite":"Spree module dependency accessors at ./spec/models/spree/app_dependencies_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/app_dependencies_spec.rb"},{"name":"Spree. responds to dependency methods","suite":"Spree module dependency accessors at ./spec/models/spree/app_dependencies_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:1:2\"}}","suiteSourceFile":"core/spec/models/spree/app_dependencies_spec.rb"},{"name":"Spree. does not respond to non-dependency methods","suite":"Spree module dependency accessors at ./spec/models/spree/app_dependencies_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:1:3\"}}","suiteSourceFile":"core/spec/models/spree/app_dependencies_spec.rb"},{"name":"Spree.= sets the dependency via Spree module","suite":"Spree module dependency accessors at ./spec/models/spree/app_dependencies_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/app_dependencies_spec.rb"},{"name":"Spree.= returns the new class via Spree module","suite":"Spree module dependency accessors at ./spec/models/spree/app_dependencies_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:2:2\"}}","suiteSourceFile":"core/spec/models/spree/app_dependencies_spec.rb"},{"name":"Spree.= tracks override source correctly (not internal routing code)","suite":"Spree module dependency accessors at ./spec/models/spree/app_dependencies_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:2:3\"}}","suiteSourceFile":"core/spec/models/spree/app_dependencies_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:4","suite":"Spree::Asset at ./spec/models/spree/asset_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/asset_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:5","suite":"Spree::Asset at ./spec/models/spree/asset_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/asset_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:7","suite":"Spree::Asset at ./spec/models/spree/asset_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/models/spree/asset_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:8","suite":"Spree::Asset at ./spec/models/spree/asset_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","suiteSourceFile":"core/spec/models/spree/asset_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:10","suite":"Spree::Asset at ./spec/models/spree/asset_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","suiteSourceFile":"core/spec/models/spree/asset_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:11","suite":"Spree::Asset at ./spec/models/spree/asset_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","suiteSourceFile":"core/spec/models/spree/asset_spec.rb"},{"name":"behaves like metadata reads data as symbolized keys","suite":"Spree::Asset at ./spec/models/spree/asset_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7\"}}","suiteSourceFile":"core/spec/models/spree/asset_spec.rb"},{"name":"behaves like metadata reads data as not symbolized keys","suite":"Spree::Asset at ./spec/models/spree/asset_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8\"}}","suiteSourceFile":"core/spec/models/spree/asset_spec.rb"},{"name":"behaves like metadata can query records by metadata properties","suite":"Spree::Asset at ./spec/models/spree/asset_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:10\"}}","suiteSourceFile":"core/spec/models/spree/asset_spec.rb"},{"name":"behaves like lifecycle events lifecycle events asset.created publishes created event when record is created","suite":"Spree::Asset at ./spec/models/spree/asset_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/asset_spec.rb"},{"name":"behaves like lifecycle events lifecycle events asset.updated publishes updated event when record is updated","suite":"Spree::Asset at ./spec/models/spree/asset_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/asset_spec.rb"},{"name":"behaves like lifecycle events lifecycle events asset.deleted publishes deleted event when record is deleted","suite":"Spree::Asset at ./spec/models/spree/asset_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/asset_spec.rb"},{"name":"named variants defines preprocessed variants based on config","suite":"Spree::Asset at ./spec/models/spree/asset_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/asset_spec.rb"},{"name":"named variants defines :mini variant with correct options","suite":"Spree::Asset at ./spec/models/spree/asset_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","suiteSourceFile":"core/spec/models/spree/asset_spec.rb"},{"name":"named variants defines :small variant with correct options","suite":"Spree::Asset at ./spec/models/spree/asset_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3\"}}","suiteSourceFile":"core/spec/models/spree/asset_spec.rb"},{"name":"named variants defines :medium variant with correct options","suite":"Spree::Asset at ./spec/models/spree/asset_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4\"}}","suiteSourceFile":"core/spec/models/spree/asset_spec.rb"},{"name":"named variants defines :large variant with correct options","suite":"Spree::Asset at ./spec/models/spree/asset_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:5\"}}","suiteSourceFile":"core/spec/models/spree/asset_spec.rb"},{"name":"named variants defines :xlarge variant with correct options","suite":"Spree::Asset at ./spec/models/spree/asset_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:6\"}}","suiteSourceFile":"core/spec/models/spree/asset_spec.rb"},{"name":"named variants defines :og_image variant with correct options","suite":"Spree::Asset at ./spec/models/spree/asset_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:7\"}}","suiteSourceFile":"core/spec/models/spree/asset_spec.rb"},{"name":"#product returns the product for the asset","suite":"Spree::Asset at ./spec/models/spree/asset_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/asset_spec.rb"},{"name":"delegated methods delegates :key to attachment","suite":"Spree::Asset at ./spec/models/spree/asset_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","suiteSourceFile":"core/spec/models/spree/asset_spec.rb"},{"name":"delegated methods delegates :attached? to attachment","suite":"Spree::Asset at ./spec/models/spree/asset_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2\"}}","suiteSourceFile":"core/spec/models/spree/asset_spec.rb"},{"name":"delegated methods delegates :variant to attachment","suite":"Spree::Asset at ./spec/models/spree/asset_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3\"}}","suiteSourceFile":"core/spec/models/spree/asset_spec.rb"},{"name":"delegated methods delegates :variable? to attachment","suite":"Spree::Asset at ./spec/models/spree/asset_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:4\"}}","suiteSourceFile":"core/spec/models/spree/asset_spec.rb"},{"name":"delegated methods delegates :blob to attachment","suite":"Spree::Asset at ./spec/models/spree/asset_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:5\"}}","suiteSourceFile":"core/spec/models/spree/asset_spec.rb"},{"name":"delegated methods delegates :filename to attachment","suite":"Spree::Asset at ./spec/models/spree/asset_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:6\"}}","suiteSourceFile":"core/spec/models/spree/asset_spec.rb"},{"name":".with_session_uploaded_assets_uuid returns assets with the given uuid","suite":"Spree::Asset at ./spec/models/spree/asset_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","suiteSourceFile":"core/spec/models/spree/asset_spec.rb"},{"name":"external URL .with_external_url returns assets with the given external URL","suite":"Spree::Asset at ./spec/models/spree/asset_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1:1\"}}","suiteSourceFile":"core/spec/models/spree/asset_spec.rb"},{"name":"external URL .with_external_url returns no assets if the external URL is blank","suite":"Spree::Asset at ./spec/models/spree/asset_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1:2\"}}","suiteSourceFile":"core/spec/models/spree/asset_spec.rb"},{"name":"external URL #external_url returns the external URL","suite":"Spree::Asset at ./spec/models/spree/asset_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2:1\"}}","suiteSourceFile":"core/spec/models/spree/asset_spec.rb"},{"name":"external URL #external_url returns nil if the external URL is blank","suite":"Spree::Asset at ./spec/models/spree/asset_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2:2\"}}","suiteSourceFile":"core/spec/models/spree/asset_spec.rb"},{"name":"external URL #external_url= sets the external URL","suite":"Spree::Asset at ./spec/models/spree/asset_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:3:1\"}}","suiteSourceFile":"core/spec/models/spree/asset_spec.rb"},{"name":"#client raises NotImplementedError","suite":"Spree::BaseAnalyticsEventHandler at ./spec/models/spree/base_analytics_event_handler_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/base_analytics_event_handler_spec.rb"},{"name":"#initialize sets user, session and request","suite":"Spree::BaseAnalyticsEventHandler at ./spec/models/spree/base_analytics_event_handler_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/base_analytics_event_handler_spec.rb"},{"name":"#handle_event raises NotImplementedError","suite":"Spree::BaseAnalyticsEventHandler at ./spec/models/spree/base_analytics_event_handler_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/base_analytics_event_handler_spec.rb"},{"name":"#event_human_name returns the label for supported events","suite":"Spree::BaseAnalyticsEventHandler at ./spec/models/spree/base_analytics_event_handler_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/base_analytics_event_handler_spec.rb"},{"name":"#event_human_name returns nil for unsupported events","suite":"Spree::BaseAnalyticsEventHandler at ./spec/models/spree/base_analytics_event_handler_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2\"}}","suiteSourceFile":"core/spec/models/spree/base_analytics_event_handler_spec.rb"},{"name":"#identity_hash when user is present returns hash with user_id, visitor_id and session_id","suite":"Spree::BaseAnalyticsEventHandler at ./spec/models/spree/base_analytics_event_handler_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:1\"}}","suiteSourceFile":"core/spec/models/spree/base_analytics_event_handler_spec.rb"},{"name":"#identity_hash when user is not present returns hash with nil user_id, visitor_id and session_id","suite":"Spree::BaseAnalyticsEventHandler at ./spec/models/spree/base_analytics_event_handler_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1\"}}","suiteSourceFile":"core/spec/models/spree/base_analytics_event_handler_spec.rb"},{"name":"AR overrides does not override Rails 5 default belongs_to_required_by_default","suite":"Spree::Base at ./spec/models/spree/base_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/base_spec.rb"},{"name":"AR overrides does not disable non-spree, Rails 5 models to validate their associated belongs_to model","suite":"Spree::Base at ./spec/models/spree/base_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/base_spec.rb"},{"name":".json_api_type example at ./spec/models/spree/base_spec.rb:50","suite":"Spree::Base at ./spec/models/spree/base_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/base_spec.rb"},{"name":".json_api_type example at ./spec/models/spree/base_spec.rb:51","suite":"Spree::Base at ./spec/models/spree/base_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","suiteSourceFile":"core/spec/models/spree/base_spec.rb"},{"name":".json_api_columns skips sensitive data","suite":"Spree::Base at ./spec/models/spree/base_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/base_spec.rb"},{"name":".json_api_columns example at ./spec/models/spree/base_spec.rb:60","suite":"Spree::Base at ./spec/models/spree/base_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","suiteSourceFile":"core/spec/models/spree/base_spec.rb"},{"name":".json_api_columns example at ./spec/models/spree/base_spec.rb:61","suite":"Spree::Base at ./spec/models/spree/base_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3\"}}","suiteSourceFile":"core/spec/models/spree/base_spec.rb"},{"name":".json_api_permitted_attributes example at ./spec/models/spree/base_spec.rb:65","suite":"Spree::Base at ./spec/models/spree/base_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/base_spec.rb"},{"name":"#compute when given an order when no line items match the tax category is 0","suite":"Spree::Calculator::DefaultTax at ./spec/models/spree/calculator/default_tax_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/calculator/default_tax_spec.rb"},{"name":"#compute when given an order when one item matches the tax category is equal to the item total * rate","suite":"Spree::Calculator::DefaultTax at ./spec/models/spree/calculator/default_tax_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/calculator/default_tax_spec.rb"},{"name":"#compute when given an order when one item matches the tax category correctly rounds to within two decimal places example at ./spec/models/spree/calculator/default_tax_spec.rb:50","suite":"Spree::Calculator::DefaultTax at ./spec/models/spree/calculator/default_tax_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/calculator/default_tax_spec.rb"},{"name":"#compute when given an order when more than one item matches the tax category is equal to the sum of the item totals * rate","suite":"Spree::Calculator::DefaultTax at ./spec/models/spree/calculator/default_tax_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/calculator/default_tax_spec.rb"},{"name":"#compute when given an order when tax is included in price will return the deducted amount from the totals","suite":"Spree::Calculator::DefaultTax at ./spec/models/spree/calculator/default_tax_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/calculator/default_tax_spec.rb"},{"name":"#compute when tax is included in price when the variant matches the tax category is equal to the item's full price * rate","suite":"Spree::Calculator::DefaultTax at ./spec/models/spree/calculator/default_tax_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1:2\"}}","suiteSourceFile":"core/spec/models/spree/calculator/default_tax_spec.rb"},{"name":"#compute when tax is included in price when the variant matches the tax category when line item is discounted is equal to the item's discounted total * rate","suite":"Spree::Calculator::DefaultTax at ./spec/models/spree/calculator/default_tax_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/calculator/default_tax_spec.rb"},{"name":"#compute when tax is not included in price when the line item is discounted is equal to the item's pre-tax total * rate","suite":"Spree::Calculator::DefaultTax at ./spec/models/spree/calculator/default_tax_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1:1\"}}","suiteSourceFile":"core/spec/models/spree/calculator/default_tax_spec.rb"},{"name":"#compute when tax is not included in price when the variant matches the tax category is equal to the item pre-tax total * rate","suite":"Spree::Calculator::DefaultTax at ./spec/models/spree/calculator/default_tax_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:2:1\"}}","suiteSourceFile":"core/spec/models/spree/calculator/default_tax_spec.rb"},{"name":"#compute when given a shipment is 5% of 15","suite":"Spree::Calculator::DefaultTax at ./spec/models/spree/calculator/default_tax_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/calculator/default_tax_spec.rb"},{"name":"#compute when given a shipment takes discounts into consideration","suite":"Spree::Calculator::DefaultTax at ./spec/models/spree/calculator/default_tax_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:2\"}}","suiteSourceFile":"core/spec/models/spree/calculator/default_tax_spec.rb"},{"name":"when given a line_item #compute_line_item computes the line item right","suite":"Spree::Calculator::DefaultTax at ./spec/models/spree/calculator/default_tax_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/calculator/default_tax_spec.rb"},{"name":"when given a line_item #compute_line_item with a 40$ promo computes the line item right","suite":"Spree::Calculator::DefaultTax at ./spec/models/spree/calculator/default_tax_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/calculator/default_tax_spec.rb"},{"name":"compute rounds result correctly","suite":"Spree::Calculator::FlatPercentItemTotal at ./spec/models/spree/calculator/flat_percent_item_total_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/calculator/flat_percent_item_total_spec.rb"},{"name":"compute returns object.amount if computed amount is greater","suite":"Spree::Calculator::FlatPercentItemTotal at ./spec/models/spree/calculator/flat_percent_item_total_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/calculator/flat_percent_item_total_spec.rb"},{"name":"#compute example at ./spec/models/spree/calculator/flat_rate_spec.rb:10","suite":"Spree::Calculator::FlatRate at ./spec/models/spree/calculator/flat_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/calculator/flat_rate_spec.rb"},{"name":"#compute behaves like computing amount correctly computes the amount as the rate when currency matches the line_item's currency","suite":"Spree::Calculator::FlatRate at ./spec/models/spree/calculator/flat_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/calculator/flat_rate_spec.rb"},{"name":"#compute behaves like computing amount correctly computes the amount as 0 when currency does not match the line_item's currency","suite":"Spree::Calculator::FlatRate at ./spec/models/spree/calculator/flat_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2\"}}","suiteSourceFile":"core/spec/models/spree/calculator/flat_rate_spec.rb"},{"name":"#compute behaves like computing amount correctly computes the amount as 0 when currency is blank","suite":"Spree::Calculator::FlatRate at ./spec/models/spree/calculator/flat_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:3\"}}","suiteSourceFile":"core/spec/models/spree/calculator/flat_rate_spec.rb"},{"name":"#compute behaves like computing amount correctly computes the amount as the rate when the currencies use different casing","suite":"Spree::Calculator::FlatRate at ./spec/models/spree/calculator/flat_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:4\"}}","suiteSourceFile":"core/spec/models/spree/calculator/flat_rate_spec.rb"},{"name":"#compute behaves like computing amount correctly computes the amount as 0 when there is no object","suite":"Spree::Calculator::FlatRate at ./spec/models/spree/calculator/flat_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:5\"}}","suiteSourceFile":"core/spec/models/spree/calculator/flat_rate_spec.rb"},{"name":"#compute when apply_only_on_full_priced_items is true when line item has compare at price returns 0","suite":"Spree::Calculator::FlatRate at ./spec/models/spree/calculator/flat_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1:1\"}}","suiteSourceFile":"core/spec/models/spree/calculator/flat_rate_spec.rb"},{"name":"#compute when apply_only_on_full_priced_items is true when line item does not have compare at price behaves like computing amount correctly computes the amount as the rate when currency matches the line_item's currency","suite":"Spree::Calculator::FlatRate at ./spec/models/spree/calculator/flat_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/calculator/flat_rate_spec.rb"},{"name":"#compute when apply_only_on_full_priced_items is true when line item does not have compare at price behaves like computing amount correctly computes the amount as 0 when currency does not match the line_item's currency","suite":"Spree::Calculator::FlatRate at ./spec/models/spree/calculator/flat_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:2:1:2\"}}","suiteSourceFile":"core/spec/models/spree/calculator/flat_rate_spec.rb"},{"name":"#compute when apply_only_on_full_priced_items is true when line item does not have compare at price behaves like computing amount correctly computes the amount as 0 when currency is blank","suite":"Spree::Calculator::FlatRate at ./spec/models/spree/calculator/flat_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:2:1:3\"}}","suiteSourceFile":"core/spec/models/spree/calculator/flat_rate_spec.rb"},{"name":"#compute when apply_only_on_full_priced_items is true when line item does not have compare at price behaves like computing amount correctly computes the amount as the rate when the currencies use different casing","suite":"Spree::Calculator::FlatRate at ./spec/models/spree/calculator/flat_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:2:1:4\"}}","suiteSourceFile":"core/spec/models/spree/calculator/flat_rate_spec.rb"},{"name":"#compute when apply_only_on_full_priced_items is true when line item does not have compare at price behaves like computing amount correctly computes the amount as 0 when there is no object","suite":"Spree::Calculator::FlatRate at ./spec/models/spree/calculator/flat_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:2:1:5\"}}","suiteSourceFile":"core/spec/models/spree/calculator/flat_rate_spec.rb"},{"name":"#compute example at ./spec/models/spree/calculator/flexi_rate_spec.rb:10","suite":"Spree::Calculator::FlexiRate at ./spec/models/spree/calculator/flexi_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/calculator/flexi_rate_spec.rb"},{"name":"#compute when apply_only_on_full_priced_items is true returns 0","suite":"Spree::Calculator::FlexiRate at ./spec/models/spree/calculator/flexi_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/calculator/flexi_rate_spec.rb"},{"name":"#compute when apply_only_on_full_priced_items is true behaves like computes amount correctly computes amount correctly when all fees are 0","suite":"Spree::Calculator::FlexiRate at ./spec/models/spree/calculator/flexi_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/calculator/flexi_rate_spec.rb"},{"name":"#compute when apply_only_on_full_priced_items is true behaves like computes amount correctly computes amount correctly when first_item has a value","suite":"Spree::Calculator::FlexiRate at ./spec/models/spree/calculator/flexi_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:2\"}}","suiteSourceFile":"core/spec/models/spree/calculator/flexi_rate_spec.rb"},{"name":"#compute when apply_only_on_full_priced_items is true behaves like computes amount correctly computes amount correctly when additional_items has a value","suite":"Spree::Calculator::FlexiRate at ./spec/models/spree/calculator/flexi_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:3\"}}","suiteSourceFile":"core/spec/models/spree/calculator/flexi_rate_spec.rb"},{"name":"#compute when apply_only_on_full_priced_items is true behaves like computes amount correctly computes amount correctly when additional_items and first_item have values","suite":"Spree::Calculator::FlexiRate at ./spec/models/spree/calculator/flexi_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:4\"}}","suiteSourceFile":"core/spec/models/spree/calculator/flexi_rate_spec.rb"},{"name":"#compute when apply_only_on_full_priced_items is true behaves like computes amount correctly computes amount correctly when additional_items and first_item have values AND max items has value","suite":"Spree::Calculator::FlexiRate at ./spec/models/spree/calculator/flexi_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:5\"}}","suiteSourceFile":"core/spec/models/spree/calculator/flexi_rate_spec.rb"},{"name":"#compute when apply_only_on_full_priced_items is true behaves like computes amount correctly allows creation of new object with all the attributes","suite":"Spree::Calculator::FlexiRate at ./spec/models/spree/calculator/flexi_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:6\"}}","suiteSourceFile":"core/spec/models/spree/calculator/flexi_rate_spec.rb"},{"name":"#compute example at ./spec/models/spree/calculator/percent_on_line_item_spec.rb:10","suite":"Spree::Calculator::PercentOnLineItem at ./spec/models/spree/calculator/percent_on_line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/calculator/percent_on_line_item_spec.rb"},{"name":"#compute behaves like computing amount correctly rounds result correctly","suite":"Spree::Calculator::PercentOnLineItem at ./spec/models/spree/calculator/percent_on_line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/calculator/percent_on_line_item_spec.rb"},{"name":"#compute behaves like computing amount correctly returns object.amount if computed amount is greater","suite":"Spree::Calculator::PercentOnLineItem at ./spec/models/spree/calculator/percent_on_line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2\"}}","suiteSourceFile":"core/spec/models/spree/calculator/percent_on_line_item_spec.rb"},{"name":"#compute when apply_only_on_full_priced_items preference is true when line item has a compare at price returns 0","suite":"Spree::Calculator::PercentOnLineItem at ./spec/models/spree/calculator/percent_on_line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1:1\"}}","suiteSourceFile":"core/spec/models/spree/calculator/percent_on_line_item_spec.rb"},{"name":"#compute when apply_only_on_full_priced_items preference is true when line item does not have a compare at price behaves like computing amount correctly rounds result correctly","suite":"Spree::Calculator::PercentOnLineItem at ./spec/models/spree/calculator/percent_on_line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/calculator/percent_on_line_item_spec.rb"},{"name":"#compute when apply_only_on_full_priced_items preference is true when line item does not have a compare at price behaves like computing amount correctly returns object.amount if computed amount is greater","suite":"Spree::Calculator::PercentOnLineItem at ./spec/models/spree/calculator/percent_on_line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:2:1:2\"}}","suiteSourceFile":"core/spec/models/spree/calculator/percent_on_line_item_spec.rb"},{"name":"computes with an order object","suite":"Spree::Calculator::PriceSack at ./spec/models/spree/calculator/price_sack_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","suiteSourceFile":"core/spec/models/spree/calculator/price_sack_spec.rb"},{"name":"computes with a shipment object","suite":"Spree::Calculator::PriceSack at ./spec/models/spree/calculator/price_sack_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2\"}}","suiteSourceFile":"core/spec/models/spree/calculator/price_sack_spec.rb"},{"name":"computes the correct amount","suite":"Spree::Calculator::PriceSack at ./spec/models/spree/calculator/price_sack_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3\"}}","suiteSourceFile":"core/spec/models/spree/calculator/price_sack_spec.rb"},{"name":"not an exchange no promotions or taxes example at ./spec/models/spree/calculator/refunds/default_refund_amount_spec.rb:19","suite":"Spree::Calculator::Returns::DefaultRefundAmount at ./spec/models/spree/calculator/refunds/default_refund_amount_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/calculator/refunds/default_refund_amount_spec.rb"},{"name":"not an exchange order adjustments example at ./spec/models/spree/calculator/refunds/default_refund_amount_spec.rb:30","suite":"Spree::Calculator::Returns::DefaultRefundAmount at ./spec/models/spree/calculator/refunds/default_refund_amount_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/calculator/refunds/default_refund_amount_spec.rb"},{"name":"not an exchange shipping adjustments example at ./spec/models/spree/calculator/refunds/default_refund_amount_spec.rb:38","suite":"Spree::Calculator::Returns::DefaultRefundAmount at ./spec/models/spree/calculator/refunds/default_refund_amount_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/calculator/refunds/default_refund_amount_spec.rb"},{"name":"an exchange example at ./spec/models/spree/calculator/refunds/default_refund_amount_spec.rb:45","suite":"Spree::Calculator::Returns::DefaultRefundAmount at ./spec/models/spree/calculator/refunds/default_refund_amount_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/calculator/refunds/default_refund_amount_spec.rb"},{"name":"has a description for the class","suite":"Spree::Calculator::Shipping::DigitalDelivery at ./spec/models/spree/calculator/shipping/digital_delivery_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","suiteSourceFile":"core/spec/models/spree/calculator/shipping/digital_delivery_spec.rb"},{"name":"#compute_package ignores the passed in object","suite":"Spree::Calculator::Shipping::DigitalDelivery at ./spec/models/spree/calculator/shipping/digital_delivery_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/calculator/shipping/digital_delivery_spec.rb"},{"name":"#compute_package alwayses return the preferred_amount","suite":"Spree::Calculator::Shipping::DigitalDelivery at ./spec/models/spree/calculator/shipping/digital_delivery_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","suiteSourceFile":"core/spec/models/spree/calculator/shipping/digital_delivery_spec.rb"},{"name":"#available? returns true for a digital order","suite":"Spree::Calculator::Shipping::DigitalDelivery at ./spec/models/spree/calculator/shipping/digital_delivery_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/calculator/shipping/digital_delivery_spec.rb"},{"name":"#available? returns false for a mixed order","suite":"Spree::Calculator::Shipping::DigitalDelivery at ./spec/models/spree/calculator/shipping/digital_delivery_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","suiteSourceFile":"core/spec/models/spree/calculator/shipping/digital_delivery_spec.rb"},{"name":"#available? returns false for an exclusively non-digital order","suite":"Spree::Calculator::Shipping::DigitalDelivery at ./spec/models/spree/calculator/shipping/digital_delivery_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3\"}}","suiteSourceFile":"core/spec/models/spree/calculator/shipping/digital_delivery_spec.rb"},{"name":"rounds result correctly","suite":"Spree::Calculator::Shipping::FlatPercentItemTotal at ./spec/models/spree/calculator/shipping/flat_percent_item_total_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","suiteSourceFile":"core/spec/models/spree/calculator/shipping/flat_percent_item_total_spec.rb"},{"name":"without any constraints returns the amount","suite":"Spree::Calculator::Shipping::FlatRate at ./spec/models/spree/calculator/shipping/flat_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/calculator/shipping/flat_rate_spec.rb"},{"name":"with weight constraints returns amount based on the contents item total","suite":"Spree::Calculator::Shipping::FlatRate at ./spec/models/spree/calculator/shipping/flat_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/calculator/shipping/flat_rate_spec.rb"},{"name":"with price constraints returns amount based on the contents weight","suite":"Spree::Calculator::Shipping::FlatRate at ./spec/models/spree/calculator/shipping/flat_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/calculator/shipping/flat_rate_spec.rb"},{"name":"with both weight and price constraints returns amount based on the contents weight and price","suite":"Spree::Calculator::Shipping::FlatRate at ./spec/models/spree/calculator/shipping/flat_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/calculator/shipping/flat_rate_spec.rb"},{"name":"compute computes amount correctly when all fees are 0","suite":"Spree::Calculator::Shipping::FlexiRate at ./spec/models/spree/calculator/shipping/flexi_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/calculator/shipping/flexi_rate_spec.rb"},{"name":"compute computes amount correctly when first_item has a value","suite":"Spree::Calculator::Shipping::FlexiRate at ./spec/models/spree/calculator/shipping/flexi_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/calculator/shipping/flexi_rate_spec.rb"},{"name":"compute computes amount correctly when additional_items has a value","suite":"Spree::Calculator::Shipping::FlexiRate at ./spec/models/spree/calculator/shipping/flexi_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/models/spree/calculator/shipping/flexi_rate_spec.rb"},{"name":"compute computes amount correctly when additional_items and first_item have values","suite":"Spree::Calculator::Shipping::FlexiRate at ./spec/models/spree/calculator/shipping/flexi_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","suiteSourceFile":"core/spec/models/spree/calculator/shipping/flexi_rate_spec.rb"},{"name":"compute computes amount correctly when additional_items and first_item have values AND max items has value","suite":"Spree::Calculator::Shipping::FlexiRate at ./spec/models/spree/calculator/shipping/flexi_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","suiteSourceFile":"core/spec/models/spree/calculator/shipping/flexi_rate_spec.rb"},{"name":"compute allows creation of new object with all the attributes","suite":"Spree::Calculator::Shipping::FlexiRate at ./spec/models/spree/calculator/shipping/flexi_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","suiteSourceFile":"core/spec/models/spree/calculator/shipping/flexi_rate_spec.rb"},{"name":"correctly calculates per item shipping","suite":"Spree::Calculator::Shipping::PerItem at ./spec/models/spree/calculator/shipping/per_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","suiteSourceFile":"core/spec/models/spree/calculator/shipping/per_item_spec.rb"},{"name":"computes the correct amount","suite":"Spree::Calculator::Shipping::PriceSack at ./spec/models/spree/calculator/shipping/price_sack_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","suiteSourceFile":"core/spec/models/spree/calculator/shipping/price_sack_spec.rb"},{"name":"#valid? when tiers is not a hash example at ./spec/models/spree/calculator/tiered_flat_rate_spec.rb:12","suite":"Spree::Calculator::TieredFlatRate at ./spec/models/spree/calculator/tiered_flat_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/calculator/tiered_flat_rate_spec.rb"},{"name":"#valid? when tiers is a hash and one of the keys is not a positive number example at ./spec/models/spree/calculator/tiered_flat_rate_spec.rb:19","suite":"Spree::Calculator::TieredFlatRate at ./spec/models/spree/calculator/tiered_flat_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/calculator/tiered_flat_rate_spec.rb"},{"name":"#compute when amount falls within the first tier example at ./spec/models/spree/calculator/tiered_flat_rate_spec.rb:40","suite":"Spree::Calculator::TieredFlatRate at ./spec/models/spree/calculator/tiered_flat_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/calculator/tiered_flat_rate_spec.rb"},{"name":"#compute when amount falls within the second tier example at ./spec/models/spree/calculator/tiered_flat_rate_spec.rb:46","suite":"Spree::Calculator::TieredFlatRate at ./spec/models/spree/calculator/tiered_flat_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/calculator/tiered_flat_rate_spec.rb"},{"name":"#valid? when base percent is less than zero example at ./spec/models/spree/calculator/tiered_percent_spec.rb:12","suite":"Spree::Calculator::TieredPercent at ./spec/models/spree/calculator/tiered_percent_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/calculator/tiered_percent_spec.rb"},{"name":"#valid? when base percent is greater than 100 example at ./spec/models/spree/calculator/tiered_percent_spec.rb:18","suite":"Spree::Calculator::TieredPercent at ./spec/models/spree/calculator/tiered_percent_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/calculator/tiered_percent_spec.rb"},{"name":"#valid? when tiers is not a hash example at ./spec/models/spree/calculator/tiered_percent_spec.rb:24","suite":"Spree::Calculator::TieredPercent at ./spec/models/spree/calculator/tiered_percent_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/calculator/tiered_percent_spec.rb"},{"name":"#valid? when tiers is a hash and one of the keys is not a positive number example at ./spec/models/spree/calculator/tiered_percent_spec.rb:31","suite":"Spree::Calculator::TieredPercent at ./spec/models/spree/calculator/tiered_percent_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1:1\"}}","suiteSourceFile":"core/spec/models/spree/calculator/tiered_percent_spec.rb"},{"name":"#valid? when tiers is a hash and one of the values is not a percent example at ./spec/models/spree/calculator/tiered_percent_spec.rb:37","suite":"Spree::Calculator::TieredPercent at ./spec/models/spree/calculator/tiered_percent_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:2:1\"}}","suiteSourceFile":"core/spec/models/spree/calculator/tiered_percent_spec.rb"},{"name":"#compute when amount falls within the first tier example at ./spec/models/spree/calculator/tiered_percent_spec.rb:58","suite":"Spree::Calculator::TieredPercent at ./spec/models/spree/calculator/tiered_percent_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/calculator/tiered_percent_spec.rb"},{"name":"#compute when amount falls within the second tier example at ./spec/models/spree/calculator/tiered_percent_spec.rb:64","suite":"Spree::Calculator::TieredPercent at ./spec/models/spree/calculator/tiered_percent_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/calculator/tiered_percent_spec.rb"},{"name":"with computable and compute methods stubbed out with a Spree::LineItem calls compute_line_item","suite":"Spree::Calculator at ./spec/models/spree/calculator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/calculator_spec.rb"},{"name":"with computable and compute methods stubbed out with a Spree::Order calls compute_order","suite":"Spree::Calculator at ./spec/models/spree/calculator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/calculator_spec.rb"},{"name":"with computable and compute methods stubbed out with a Spree::Shipment calls compute_shipment","suite":"Spree::Calculator at ./spec/models/spree/calculator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/calculator_spec.rb"},{"name":"with computable and compute methods stubbed out with a arbitrary object calls the correct compute","suite":"Spree::Calculator at ./spec/models/spree/calculator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/calculator_spec.rb"},{"name":"with computable with no stubbing with a Spree::LineItem raises NotImplementedError","suite":"Spree::Calculator at ./spec/models/spree/calculator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/calculator_spec.rb"},{"name":"with computable with no stubbing with a Spree::Order raises NotImplementedError","suite":"Spree::Calculator at ./spec/models/spree/calculator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/calculator_spec.rb"},{"name":"with computable with no stubbing with a Spree::Shipment raises NotImplementedError","suite":"Spree::Calculator at ./spec/models/spree/calculator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:3:1\"}}","suiteSourceFile":"core/spec/models/spree/calculator_spec.rb"},{"name":"with computable with no stubbing with a arbitrary object raises NotImplementedError","suite":"Spree::Calculator at ./spec/models/spree/calculator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:4:1\"}}","suiteSourceFile":"core/spec/models/spree/calculator_spec.rb"},{"name":"cannot link the same taxon to the same product more than once","suite":"Spree::Classification at ./spec/models/spree/classification_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","suiteSourceFile":"core/spec/models/spree/classification_spec.rb"},{"name":"has a valid fixtures","suite":"Spree::Classification at ./spec/models/spree/classification_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2\"}}","suiteSourceFile":"core/spec/models/spree/classification_spec.rb"},{"name":"removing product from taxon resets positions","suite":"Spree::Classification at ./spec/models/spree/classification_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/classification_spec.rb"},{"name":"replacing taxon's products resets positions","suite":"Spree::Classification at ./spec/models/spree/classification_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/classification_spec.rb"},{"name":"removing taxon from product resets positions","suite":"Spree::Classification at ./spec/models/spree/classification_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","suiteSourceFile":"core/spec/models/spree/classification_spec.rb"},{"name":"replacing product's taxons resets positions","suite":"Spree::Classification at ./spec/models/spree/classification_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","suiteSourceFile":"core/spec/models/spree/classification_spec.rb"},{"name":"destroying classification resets positions","suite":"Spree::Classification at ./spec/models/spree/classification_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","suiteSourceFile":"core/spec/models/spree/classification_spec.rb"},{"name":"counter cache classification_count on taxon increments when a classification is created","suite":"Spree::Classification at ./spec/models/spree/classification_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1:1\"}}","suiteSourceFile":"core/spec/models/spree/classification_spec.rb"},{"name":"counter cache classification_count on taxon decrements when a classification is destroyed","suite":"Spree::Classification at ./spec/models/spree/classification_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1:2\"}}","suiteSourceFile":"core/spec/models/spree/classification_spec.rb"},{"name":"counter cache classification_count on taxon correctly counts multiple classifications","suite":"Spree::Classification at ./spec/models/spree/classification_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1:3\"}}","suiteSourceFile":"core/spec/models/spree/classification_spec.rb"},{"name":"counter cache classification_count on product increments when a classification is created","suite":"Spree::Classification at ./spec/models/spree/classification_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2:1\"}}","suiteSourceFile":"core/spec/models/spree/classification_spec.rb"},{"name":"counter cache classification_count on product decrements when a classification is destroyed","suite":"Spree::Classification at ./spec/models/spree/classification_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2:2\"}}","suiteSourceFile":"core/spec/models/spree/classification_spec.rb"},{"name":"counter cache classification_count on product correctly counts multiple classifications","suite":"Spree::Classification at ./spec/models/spree/classification_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2:3\"}}","suiteSourceFile":"core/spec/models/spree/classification_spec.rb"},{"name":".grouped_taxon_ids_for_products returns the correct taxon ids","suite":"Spree::Classification at ./spec/models/spree/classification_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1\"}}","suiteSourceFile":"core/spec/models/spree/classification_spec.rb"},{"name":".grouped_taxon_ids_for_products when empty taxon groups returns an empty array","suite":"Spree::Classification at ./spec/models/spree/classification_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:2:1\"}}","suiteSourceFile":"core/spec/models/spree/classification_spec.rb"},{"name":".grouped_taxon_ids_for_products when empty product ids returns an empty array","suite":"Spree::Classification at ./spec/models/spree/classification_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:3:1\"}}","suiteSourceFile":"core/spec/models/spree/classification_spec.rb"},{"name":".money_methods currency is not defined generates a display_method that builds a Spree::Money without options","suite":"Spree::DisplayMoney at ./spec/models/spree/concerns/display_money_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/concerns/display_money_spec.rb"},{"name":".money_methods currency is not defined wrapped method accepts `:currency` keyword argument defined method passes the received keyword argument to the wrapped method","suite":"Spree::DisplayMoney at ./spec/models/spree/concerns/display_money_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/concerns/display_money_spec.rb"},{"name":".money_methods currency is not defined wrapped method accepts `currency` argument defined method passes the received keyword argument to the wrapped method","suite":"Spree::DisplayMoney at ./spec/models/spree/concerns/display_money_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/concerns/display_money_spec.rb"},{"name":".money_methods currency is defined generates a display_* method that builds a Spree::Money with currency","suite":"Spree::DisplayMoney at ./spec/models/spree/concerns/display_money_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/concerns/display_money_spec.rb"},{"name":".money_methods with multiple + options generates a display_* method that builds a Spree::Money with the specified options","suite":"Spree::DisplayMoney at ./spec/models/spree/concerns/display_money_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/concerns/display_money_spec.rb"},{"name":".ransackable_attributes returns default and whitelisted attributes","suite":"Spree::RansackableAttributes at ./spec/models/spree/concerns/ransackable_attributes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/concerns/ransackable_attributes_spec.rb"},{"name":".ransackable_attributes merges custom attributes from Spree.ransack","suite":"Spree::RansackableAttributes at ./spec/models/spree/concerns/ransackable_attributes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/concerns/ransackable_attributes_spec.rb"},{"name":".ransackable_attributes does not duplicate attributes","suite":"Spree::RansackableAttributes at ./spec/models/spree/concerns/ransackable_attributes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/models/spree/concerns/ransackable_attributes_spec.rb"},{"name":".ransackable_associations returns whitelisted associations","suite":"Spree::RansackableAttributes at ./spec/models/spree/concerns/ransackable_attributes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/concerns/ransackable_attributes_spec.rb"},{"name":".ransackable_associations merges custom associations from Spree.ransack","suite":"Spree::RansackableAttributes at ./spec/models/spree/concerns/ransackable_attributes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","suiteSourceFile":"core/spec/models/spree/concerns/ransackable_attributes_spec.rb"},{"name":".ransackable_associations does not duplicate associations","suite":"Spree::RansackableAttributes at ./spec/models/spree/concerns/ransackable_attributes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3\"}}","suiteSourceFile":"core/spec/models/spree/concerns/ransackable_attributes_spec.rb"},{"name":".ransackable_scopes returns whitelisted scopes","suite":"Spree::RansackableAttributes at ./spec/models/spree/concerns/ransackable_attributes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/concerns/ransackable_attributes_spec.rb"},{"name":".ransackable_scopes merges custom scopes from Spree.ransack","suite":"Spree::RansackableAttributes at ./spec/models/spree/concerns/ransackable_attributes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","suiteSourceFile":"core/spec/models/spree/concerns/ransackable_attributes_spec.rb"},{"name":".ransackable_scopes does not duplicate scopes","suite":"Spree::RansackableAttributes at ./spec/models/spree/concerns/ransackable_attributes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3\"}}","suiteSourceFile":"core/spec/models/spree/concerns/ransackable_attributes_spec.rb"},{"name":"instance methods #add_user adds a user to the resource with the default role","suite":"Spree::UserManagement at ./spec/models/spree/concerns/user_management_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/concerns/user_management_spec.rb"},{"name":"instance methods #add_user adds a user to the resource with a specified role","suite":"Spree::UserManagement at ./spec/models/spree/concerns/user_management_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/concerns/user_management_spec.rb"},{"name":"instance methods #remove_user removes a user from the resource","suite":"Spree::UserManagement at ./spec/models/spree/concerns/user_management_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/concerns/user_management_spec.rb"},{"name":"instance methods #default_user_role returns the default admin role","suite":"Spree::UserManagement at ./spec/models/spree/concerns/user_management_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/concerns/user_management_spec.rb"},{"name":"associations has many role_users","suite":"Spree::UserManagement at ./spec/models/spree/concerns/user_management_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/concerns/user_management_spec.rb"},{"name":"associations has many users through role_users","suite":"Spree::UserManagement at ./spec/models/spree/concerns/user_management_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","suiteSourceFile":"core/spec/models/spree/concerns/user_management_spec.rb"},{"name":"associations has many invitations","suite":"Spree::UserManagement at ./spec/models/spree/concerns/user_management_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3\"}}","suiteSourceFile":"core/spec/models/spree/concerns/user_management_spec.rb"},{"name":"#last_incomplete_spree_order with an incomplete order example at ./spec/models/spree/concerns/user_methods_spec.rb:20","suite":"Spree::UserMethods at ./spec/models/spree/concerns/user_methods_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/concerns/user_methods_spec.rb"},{"name":"#last_incomplete_spree_order with incomplete canceled order example at ./spec/models/spree/concerns/user_methods_spec.rb:26","suite":"Spree::UserMethods at ./spec/models/spree/concerns/user_methods_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/concerns/user_methods_spec.rb"},{"name":"#last_incomplete_spree_order without an incomplete order example at ./spec/models/spree/concerns/user_methods_spec.rb:30","suite":"Spree::UserMethods at ./spec/models/spree/concerns/user_methods_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/concerns/user_methods_spec.rb"},{"name":"#check_completed_orders rstrict t delete dependent destroyed does not destroy dependent destroy items","suite":"Spree::UserMethods at ./spec/models/spree/concerns/user_methods_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/concerns/user_methods_spec.rb"},{"name":"#check_completed_orders allow to destroy dependent destroy does not destroy dependent destroy items","suite":"Spree::UserMethods at ./spec/models/spree/concerns/user_methods_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/concerns/user_methods_spec.rb"},{"name":"#payment_sources includes only not expired credit cards with payment profile that belong to subject user","suite":"Spree::UserMethods at ./spec/models/spree/concerns/user_methods_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/concerns/user_methods_spec.rb"},{"name":"#payment_sources does not include credit cards that belong to other user","suite":"Spree::UserMethods at ./spec/models/spree/concerns/user_methods_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","suiteSourceFile":"core/spec/models/spree/concerns/user_methods_spec.rb"},{"name":"#payment_sources does not include credit cards without payment profile","suite":"Spree::UserMethods at ./spec/models/spree/concerns/user_methods_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3\"}}","suiteSourceFile":"core/spec/models/spree/concerns/user_methods_spec.rb"},{"name":"#payment_sources does not include outdated credit cards","suite":"Spree::UserMethods at ./spec/models/spree/concerns/user_methods_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4\"}}","suiteSourceFile":"core/spec/models/spree/concerns/user_methods_spec.rb"},{"name":"#payment_sources does not include credit cards with inactive payment method","suite":"Spree::UserMethods at ./spec/models/spree/concerns/user_methods_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:5\"}}","suiteSourceFile":"core/spec/models/spree/concerns/user_methods_spec.rb"},{"name":"#scramble_email_and_names scramble email and names","suite":"Spree::UserMethods at ./spec/models/spree/concerns/user_methods_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/concerns/user_methods_spec.rb"},{"name":"#invited_by returns the user who invited the current user","suite":"Spree::UserMethods at ./spec/models/spree/concerns/user_methods_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","suiteSourceFile":"core/spec/models/spree/concerns/user_methods_spec.rb"},{"name":".multi_search returns users based on an email","suite":"Spree::UserMethods at ./spec/models/spree/concerns/user_methods_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","suiteSourceFile":"core/spec/models/spree/concerns/user_methods_spec.rb"},{"name":".multi_search returns users based on the first name","suite":"Spree::UserMethods at ./spec/models/spree/concerns/user_methods_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2\"}}","suiteSourceFile":"core/spec/models/spree/concerns/user_methods_spec.rb"},{"name":"#can_be_deleted? when user has a role on current store returns true if another user also has a role on the store","suite":"Spree::UserMethods at ./spec/models/spree/concerns/user_methods_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1:1\"}}","suiteSourceFile":"core/spec/models/spree/concerns/user_methods_spec.rb"},{"name":"#can_be_deleted? when user has a role on current store returns false if user is the last with a role on the store","suite":"Spree::UserMethods at ./spec/models/spree/concerns/user_methods_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1:2\"}}","suiteSourceFile":"core/spec/models/spree/concerns/user_methods_spec.rb"},{"name":"#can_be_deleted? when user has no role on current store returns true if user has no completed orders","suite":"Spree::UserMethods at ./spec/models/spree/concerns/user_methods_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2:1\"}}","suiteSourceFile":"core/spec/models/spree/concerns/user_methods_spec.rb"},{"name":"#can_be_deleted? when user has no role on current store returns false if user has completed orders","suite":"Spree::UserMethods at ./spec/models/spree/concerns/user_methods_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2:2\"}}","suiteSourceFile":"core/spec/models/spree/concerns/user_methods_spec.rb"},{"name":"#add_role adds a role to the user","suite":"Spree::UserRoles at ./spec/models/spree/concerns/user_roles_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/concerns/user_roles_spec.rb"},{"name":"#add_role when a resource parameter is provided adds a role to the user for the resource","suite":"Spree::UserRoles at ./spec/models/spree/concerns/user_roles_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/concerns/user_roles_spec.rb"},{"name":"#remove_role removes a role from the user","suite":"Spree::UserRoles at ./spec/models/spree/concerns/user_roles_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/concerns/user_roles_spec.rb"},{"name":"#remove_role when a resource parameter is provided removes a role from the user for the resource","suite":"Spree::UserRoles at ./spec/models/spree/concerns/user_roles_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/concerns/user_roles_spec.rb"},{"name":"#has_spree_role? with a role example at ./spec/models/spree/concerns/user_roles_spec.rb:56","suite":"Spree::UserRoles at ./spec/models/spree/concerns/user_roles_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","suiteSourceFile":"core/spec/models/spree/concerns/user_roles_spec.rb"},{"name":"#has_spree_role? without a role example at ./spec/models/spree/concerns/user_roles_spec.rb:60","suite":"Spree::UserRoles at ./spec/models/spree/concerns/user_roles_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","suiteSourceFile":"core/spec/models/spree/concerns/user_roles_spec.rb"},{"name":"#has_spree_role? when a resource parameter is provided when the user has the role for the resource returns true","suite":"Spree::UserRoles at ./spec/models/spree/concerns/user_roles_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3:1:1\"}}","suiteSourceFile":"core/spec/models/spree/concerns/user_roles_spec.rb"},{"name":"#has_spree_role? when a resource parameter is provided when the user does not have the role for the resource returns false","suite":"Spree::UserRoles at ./spec/models/spree/concerns/user_roles_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3:2:1\"}}","suiteSourceFile":"core/spec/models/spree/concerns/user_roles_spec.rb"},{"name":"#spree_admin? example at ./spec/models/spree/concerns/user_roles_spec.rb:83","suite":"Spree::UserRoles at ./spec/models/spree/concerns/user_roles_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/concerns/user_roles_spec.rb"},{"name":"#spree_admin? when a resource parameter is provided checks against the resource","suite":"Spree::UserRoles at ./spec/models/spree/concerns/user_roles_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1\"}}","suiteSourceFile":"core/spec/models/spree/concerns/user_roles_spec.rb"},{"name":".spree_admin_created? returns true when admin exists","suite":"Spree::UserRoles at ./spec/models/spree/concerns/user_roles_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","suiteSourceFile":"core/spec/models/spree/concerns/user_roles_spec.rb"},{"name":".spree_admin_created? returns false when admin does not exist","suite":"Spree::UserRoles at ./spec/models/spree/concerns/user_roles_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2\"}}","suiteSourceFile":"core/spec/models/spree/concerns/user_roles_spec.rb"},{"name":"#gross_amount with no default zone set does not call TaxRate.included_tax_amount_for","suite":"Spree::VatPriceCalculation at ./spec/models/spree/concerns/vat_price_calculation_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/concerns/vat_price_calculation_spec.rb"},{"name":"#gross_amount with no zone given does not call TaxRate.included_tax_amount_for","suite":"Spree::VatPriceCalculation at ./spec/models/spree/concerns/vat_price_calculation_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/concerns/vat_price_calculation_spec.rb"},{"name":"#gross_amount with a default zone set and zone equal to the default zone does not call 'TaxRate.included_tax_amount_for'","suite":"Spree::VatPriceCalculation at ./spec/models/spree/concerns/vat_price_calculation_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1:1\"}}","suiteSourceFile":"core/spec/models/spree/concerns/vat_price_calculation_spec.rb"},{"name":"#gross_amount with a default zone set and zone not equal to default zone calls TaxRate.included_tax_amount_for two times","suite":"Spree::VatPriceCalculation at ./spec/models/spree/concerns/vat_price_calculation_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:2:1\"}}","suiteSourceFile":"core/spec/models/spree/concerns/vat_price_calculation_spec.rb"},{"name":"validates uniqueness","suite":"Spree::Country at ./spec/models/spree/country_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","suiteSourceFile":"core/spec/models/spree/country_spec.rb"},{"name":".by_iso will return Country by iso","suite":"Spree::Country at ./spec/models/spree/country_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/country_spec.rb"},{"name":".by_iso will return Country by iso3","suite":"Spree::Country at ./spec/models/spree/country_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","suiteSourceFile":"core/spec/models/spree/country_spec.rb"},{"name":".by_iso will return nil with wrong iso or iso3","suite":"Spree::Country at ./spec/models/spree/country_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3\"}}","suiteSourceFile":"core/spec/models/spree/country_spec.rb"},{"name":".by_iso will return Country by lower iso","suite":"Spree::Country at ./spec/models/spree/country_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:4\"}}","suiteSourceFile":"core/spec/models/spree/country_spec.rb"},{"name":"#default? no arguments returns true for store default country","suite":"Spree::Country at ./spec/models/spree/country_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","suiteSourceFile":"core/spec/models/spree/country_spec.rb"},{"name":"#default? no arguments returns false for other countries","suite":"Spree::Country at ./spec/models/spree/country_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:2\"}}","suiteSourceFile":"core/spec/models/spree/country_spec.rb"},{"name":"#default? other store passed returns true for store default country","suite":"Spree::Country at ./spec/models/spree/country_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","suiteSourceFile":"core/spec/models/spree/country_spec.rb"},{"name":"#default? other store passed returns false for other countries","suite":"Spree::Country at ./spec/models/spree/country_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:2\"}}","suiteSourceFile":"core/spec/models/spree/country_spec.rb"},{"name":"validations code validates presence","suite":"Spree::CouponCode at ./spec/models/spree/coupon_code_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/coupon_code_spec.rb"},{"name":"validations code validates uniqueness","suite":"Spree::CouponCode at ./spec/models/spree/coupon_code_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/coupon_code_spec.rb"},{"name":"responds to track_data","suite":"Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2\"}}","suiteSourceFile":"core/spec/models/spree/credit_card_spec.rb"},{"name":"ensures only one credit card per user is default at a time","suite":"Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16\"}}","suiteSourceFile":"core/spec/models/spree/credit_card_spec.rb"},{"name":"allows default credit cards for different users","suite":"Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:17\"}}","suiteSourceFile":"core/spec/models/spree/credit_card_spec.rb"},{"name":"allows this card to save even if the previously default card has expired","suite":"Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18\"}}","suiteSourceFile":"core/spec/models/spree/credit_card_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:4","suite":"Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/credit_card_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:5","suite":"Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/credit_card_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:7","suite":"Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/models/spree/credit_card_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:8","suite":"Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","suiteSourceFile":"core/spec/models/spree/credit_card_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:10","suite":"Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","suiteSourceFile":"core/spec/models/spree/credit_card_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:11","suite":"Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","suiteSourceFile":"core/spec/models/spree/credit_card_spec.rb"},{"name":"behaves like metadata reads data as symbolized keys","suite":"Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7\"}}","suiteSourceFile":"core/spec/models/spree/credit_card_spec.rb"},{"name":"behaves like metadata reads data as not symbolized keys","suite":"Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8\"}}","suiteSourceFile":"core/spec/models/spree/credit_card_spec.rb"},{"name":"behaves like metadata can query records by metadata properties","suite":"Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:10\"}}","suiteSourceFile":"core/spec/models/spree/credit_card_spec.rb"},{"name":"#can_capture? when payment is pending behaves like can be captured can be captured","suite":"Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/credit_card_spec.rb"},{"name":"#can_capture? when payment is checkout behaves like can be captured can be captured","suite":"Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/credit_card_spec.rb"},{"name":"#can_capture? when payment is invalid cannot be captured","suite":"Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3:1\"}}","suiteSourceFile":"core/spec/models/spree/credit_card_spec.rb"},{"name":"#can_void? when payment is not voided is true","suite":"Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1\"}}","suiteSourceFile":"core/spec/models/spree/credit_card_spec.rb"},{"name":"#can_void? when payment is voided is false","suite":"Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1\"}}","suiteSourceFile":"core/spec/models/spree/credit_card_spec.rb"},{"name":"#can_credit? when payment is not completed behaves like can not credit can not credit","suite":"Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/credit_card_spec.rb"},{"name":"#can_credit? when payment is completed when credit_allowed is zero behaves like can not credit can not credit","suite":"Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/credit_card_spec.rb"},{"name":"#can_credit? when payment is completed when credit_allowed bigger than zero can credit","suite":"Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/credit_card_spec.rb"},{"name":"#valid? validates presence of number","suite":"Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","suiteSourceFile":"core/spec/models/spree/credit_card_spec.rb"},{"name":"#valid? validates presence of security code","suite":"Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2\"}}","suiteSourceFile":"core/spec/models/spree/credit_card_spec.rb"},{"name":"#valid? validates name presence","suite":"Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:3\"}}","suiteSourceFile":"core/spec/models/spree/credit_card_spec.rb"},{"name":"#valid? only validates on create","suite":"Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:4\"}}","suiteSourceFile":"core/spec/models/spree/credit_card_spec.rb"},{"name":"#valid? encrypted data is present does not validate presence of number or cvv","suite":"Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:5:1\"}}","suiteSourceFile":"core/spec/models/spree/credit_card_spec.rb"},{"name":"#valid? imported is true does not validate presence of number or cvv","suite":"Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:6:1\"}}","suiteSourceFile":"core/spec/models/spree/credit_card_spec.rb"},{"name":"#save does not actually store the number","suite":"Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","suiteSourceFile":"core/spec/models/spree/credit_card_spec.rb"},{"name":"#save does not actually store the security code","suite":"Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2\"}}","suiteSourceFile":"core/spec/models/spree/credit_card_spec.rb"},{"name":"#number= strips non-numeric characters from card input","suite":"Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1\"}}","suiteSourceFile":"core/spec/models/spree/credit_card_spec.rb"},{"name":"#number= does not raise an exception on non-string input","suite":"Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2\"}}","suiteSourceFile":"core/spec/models/spree/credit_card_spec.rb"},{"name":"#verification_value= accepts a valid 3-digit value","suite":"Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1\"}}","suiteSourceFile":"core/spec/models/spree/credit_card_spec.rb"},{"name":"#verification_value= accepts a valid 4-digit value","suite":"Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:2\"}}","suiteSourceFile":"core/spec/models/spree/credit_card_spec.rb"},{"name":"#verification_value= stringifies an integer","suite":"Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:3\"}}","suiteSourceFile":"core/spec/models/spree/credit_card_spec.rb"},{"name":"#verification_value= strips any whitespace","suite":"Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:4\"}}","suiteSourceFile":"core/spec/models/spree/credit_card_spec.rb"},{"name":"#expiry= can set with a 2-digit month and year","suite":"Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1\"}}","suiteSourceFile":"core/spec/models/spree/credit_card_spec.rb"},{"name":"#expiry= can set with a 2-digit month and 4-digit year","suite":"Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:2\"}}","suiteSourceFile":"core/spec/models/spree/credit_card_spec.rb"},{"name":"#expiry= can set with a 2-digit month and 4-digit year without whitespace","suite":"Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:3\"}}","suiteSourceFile":"core/spec/models/spree/credit_card_spec.rb"},{"name":"#expiry= can set with a 2-digit month and 4-digit year without whitespace and slash","suite":"Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:4\"}}","suiteSourceFile":"core/spec/models/spree/credit_card_spec.rb"},{"name":"#expiry= can set with a 2-digit month and 2-digit year without whitespace and slash","suite":"Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:5\"}}","suiteSourceFile":"core/spec/models/spree/credit_card_spec.rb"},{"name":"#expiry= does not blow up when passed an empty string","suite":"Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:6\"}}","suiteSourceFile":"core/spec/models/spree/credit_card_spec.rb"},{"name":"#expiry= does not blow up when passed one number","suite":"Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:7\"}}","suiteSourceFile":"core/spec/models/spree/credit_card_spec.rb"},{"name":"#cc_type= converts between the different types","suite":"Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1\"}}","suiteSourceFile":"core/spec/models/spree/credit_card_spec.rb"},{"name":"#cc_type= assigns the type based on card number in the event of js failure","suite":"Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2\"}}","suiteSourceFile":"core/spec/models/spree/credit_card_spec.rb"},{"name":"Associations is able to access its payments","suite":"Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:1\"}}","suiteSourceFile":"core/spec/models/spree/credit_card_spec.rb"},{"name":"#first_name extracts the first name","suite":"Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:1\"}}","suiteSourceFile":"core/spec/models/spree/credit_card_spec.rb"},{"name":"#last_name extracts the last name","suite":"Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:1\"}}","suiteSourceFile":"core/spec/models/spree/credit_card_spec.rb"},{"name":"#to_active_merchant converts to an ActiveMerchant::Billing::CreditCard object","suite":"Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:1\"}}","suiteSourceFile":"core/spec/models/spree/credit_card_spec.rb"},{"name":"Scopes #not_expired includes only not expired credit cards","suite":"Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:1:1\"}}","suiteSourceFile":"core/spec/models/spree/credit_card_spec.rb"},{"name":"Scopes #not_expired does not include outdated credit cards","suite":"Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:1:2\"}}","suiteSourceFile":"core/spec/models/spree/credit_card_spec.rb"},{"name":"Scopes #capturable includes only capturable credit cards","suite":"Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:2:1\"}}","suiteSourceFile":"core/spec/models/spree/credit_card_spec.rb"},{"name":"Scopes #capturable does not include credit cards without profile or payment id","suite":"Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:2:2\"}}","suiteSourceFile":"core/spec/models/spree/credit_card_spec.rb"},{"name":"#display_brand when the cc_type does not exist example at ./spec/models/spree/credit_card_spec.rb:431","suite":"Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:20:1:1\"}}","suiteSourceFile":"core/spec/models/spree/credit_card_spec.rb"},{"name":"#display_brand when the cc_type exist example at ./spec/models/spree/credit_card_spec.rb:437","suite":"Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:20:2:1\"}}","suiteSourceFile":"core/spec/models/spree/credit_card_spec.rb"},{"name":"#wallet_type when the wallet_type does not exist example at ./spec/models/spree/credit_card_spec.rb:446","suite":"Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:21:1:1\"}}","suiteSourceFile":"core/spec/models/spree/credit_card_spec.rb"},{"name":"#wallet_type when the wallet_type exists example at ./spec/models/spree/credit_card_spec.rb:452","suite":"Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:21:2:1\"}}","suiteSourceFile":"core/spec/models/spree/credit_card_spec.rb"},{"name":"#store when store is set returns the set store","suite":"Spree::Current at ./spec/models/spree/current_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/current_spec.rb"},{"name":"#store when store is not set returns the default store","suite":"Spree::Current at ./spec/models/spree/current_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/current_spec.rb"},{"name":"#currency when currency is set returns the set currency","suite":"Spree::Current at ./spec/models/spree/current_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/current_spec.rb"},{"name":"#currency when currency is not set returns the default currency from the store","suite":"Spree::Current at ./spec/models/spree/current_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/current_spec.rb"},{"name":"#zone when zone is set returns the set zone","suite":"Spree::Current at ./spec/models/spree/current_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","suiteSourceFile":"core/spec/models/spree/current_spec.rb"},{"name":"#zone when zone is not set returns the default tax zone","suite":"Spree::Current at ./spec/models/spree/current_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","suiteSourceFile":"core/spec/models/spree/current_spec.rb"},{"name":"#zone when zone is not set and no default tax zone exists when store has a checkout_zone returns the store checkout_zone","suite":"Spree::Current at ./spec/models/spree/current_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3:1:1\"}}","suiteSourceFile":"core/spec/models/spree/current_spec.rb"},{"name":"#zone when zone is not set and no default tax zone exists when store has no checkout_zone returns nil","suite":"Spree::Current at ./spec/models/spree/current_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3:2:1\"}}","suiteSourceFile":"core/spec/models/spree/current_spec.rb"},{"name":"#global_pricing_context returns a Spree::Pricing::Context","suite":"Spree::Current at ./spec/models/spree/current_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/current_spec.rb"},{"name":"#global_pricing_context uses the current store","suite":"Spree::Current at ./spec/models/spree/current_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2\"}}","suiteSourceFile":"core/spec/models/spree/current_spec.rb"},{"name":"#global_pricing_context uses the current currency","suite":"Spree::Current at ./spec/models/spree/current_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3\"}}","suiteSourceFile":"core/spec/models/spree/current_spec.rb"},{"name":"#global_pricing_context uses the current zone","suite":"Spree::Current at ./spec/models/spree/current_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:4\"}}","suiteSourceFile":"core/spec/models/spree/current_spec.rb"},{"name":"#global_pricing_context memoizes the context","suite":"Spree::Current at ./spec/models/spree/current_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:5\"}}","suiteSourceFile":"core/spec/models/spree/current_spec.rb"},{"name":"#price_lists returns price lists for the current store","suite":"Spree::Current at ./spec/models/spree/current_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","suiteSourceFile":"core/spec/models/spree/current_spec.rb"},{"name":"#price_lists includes active price lists","suite":"Spree::Current at ./spec/models/spree/current_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2\"}}","suiteSourceFile":"core/spec/models/spree/current_spec.rb"},{"name":"#price_lists includes scheduled price lists within date range","suite":"Spree::Current at ./spec/models/spree/current_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3\"}}","suiteSourceFile":"core/spec/models/spree/current_spec.rb"},{"name":"#price_lists excludes inactive price lists","suite":"Spree::Current at ./spec/models/spree/current_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:4\"}}","suiteSourceFile":"core/spec/models/spree/current_spec.rb"},{"name":"#price_lists returns price lists ordered by position","suite":"Spree::Current at ./spec/models/spree/current_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:5\"}}","suiteSourceFile":"core/spec/models/spree/current_spec.rb"},{"name":"#price_lists memoizes the price lists","suite":"Spree::Current at ./spec/models/spree/current_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:6\"}}","suiteSourceFile":"core/spec/models/spree/current_spec.rb"},{"name":".reset resets all attributes","suite":"Spree::Current at ./spec/models/spree/current_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","suiteSourceFile":"core/spec/models/spree/current_spec.rb"},{"name":".reset clears memoized price_lists","suite":"Spree::Current at ./spec/models/spree/current_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2\"}}","suiteSourceFile":"core/spec/models/spree/current_spec.rb"},{"name":".reset clears memoized global_pricing_context","suite":"Spree::Current at ./spec/models/spree/current_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:3\"}}","suiteSourceFile":"core/spec/models/spree/current_spec.rb"},{"name":"Validations #sanitize_url removes https:// and http:// from the url","suite":"Spree::CustomDomain at ./spec/models/spree/custom_domain_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/custom_domain_spec.rb"},{"name":"Validations #url_is_valid is valid with valid url","suite":"Spree::CustomDomain at ./spec/models/spree/custom_domain_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/custom_domain_spec.rb"},{"name":"Validations #url_is_valid is valid with composed tlds","suite":"Spree::CustomDomain at ./spec/models/spree/custom_domain_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2\"}}","suiteSourceFile":"core/spec/models/spree/custom_domain_spec.rb"},{"name":"Validations #url_is_valid is invalid with wrong number of parts","suite":"Spree::CustomDomain at ./spec/models/spree/custom_domain_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:3\"}}","suiteSourceFile":"core/spec/models/spree/custom_domain_spec.rb"},{"name":"Callbacks touch store touches the store when the custom domain is created","suite":"Spree::CustomDomain at ./spec/models/spree/custom_domain_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/custom_domain_spec.rb"},{"name":"associations example at ./spec/models/spree/customer_group_spec.rb:8","suite":"Spree::CustomerGroup at ./spec/models/spree/customer_group_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/customer_group_spec.rb"},{"name":"associations example at ./spec/models/spree/customer_group_spec.rb:9","suite":"Spree::CustomerGroup at ./spec/models/spree/customer_group_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/customer_group_spec.rb"},{"name":"associations example at ./spec/models/spree/customer_group_spec.rb:10","suite":"Spree::CustomerGroup at ./spec/models/spree/customer_group_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/models/spree/customer_group_spec.rb"},{"name":"validations example at ./spec/models/spree/customer_group_spec.rb:14","suite":"Spree::CustomerGroup at ./spec/models/spree/customer_group_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/customer_group_spec.rb"},{"name":"validations example at ./spec/models/spree/customer_group_spec.rb:15","suite":"Spree::CustomerGroup at ./spec/models/spree/customer_group_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","suiteSourceFile":"core/spec/models/spree/customer_group_spec.rb"},{"name":"validations uniqueness validates uniqueness of name within store scope","suite":"Spree::CustomerGroup at ./spec/models/spree/customer_group_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:1\"}}","suiteSourceFile":"core/spec/models/spree/customer_group_spec.rb"},{"name":"validations uniqueness allows same name in different store","suite":"Spree::CustomerGroup at ./spec/models/spree/customer_group_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:2\"}}","suiteSourceFile":"core/spec/models/spree/customer_group_spec.rb"},{"name":"scopes .for_store returns groups for the specified store","suite":"Spree::CustomerGroup at ./spec/models/spree/customer_group_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","suiteSourceFile":"core/spec/models/spree/customer_group_spec.rb"},{"name":"#users_count returns the number of users in the group","suite":"Spree::CustomerGroup at ./spec/models/spree/customer_group_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/customer_group_spec.rb"},{"name":"soft delete supports soft deletion","suite":"Spree::CustomerGroup at ./spec/models/spree/customer_group_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","suiteSourceFile":"core/spec/models/spree/customer_group_spec.rb"},{"name":"#add_customers adds customers to the group","suite":"Spree::CustomerGroup at ./spec/models/spree/customer_group_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","suiteSourceFile":"core/spec/models/spree/customer_group_spec.rb"},{"name":"#add_customers returns the count of added customers","suite":"Spree::CustomerGroup at ./spec/models/spree/customer_group_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2\"}}","suiteSourceFile":"core/spec/models/spree/customer_group_spec.rb"},{"name":"#add_customers skips users already in the group","suite":"Spree::CustomerGroup at ./spec/models/spree/customer_group_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:3\"}}","suiteSourceFile":"core/spec/models/spree/customer_group_spec.rb"},{"name":"#add_customers returns 0 when no users are added","suite":"Spree::CustomerGroup at ./spec/models/spree/customer_group_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:4\"}}","suiteSourceFile":"core/spec/models/spree/customer_group_spec.rb"},{"name":"#add_customers handles empty array","suite":"Spree::CustomerGroup at ./spec/models/spree/customer_group_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:5\"}}","suiteSourceFile":"core/spec/models/spree/customer_group_spec.rb"},{"name":"#add_customers handles nil","suite":"Spree::CustomerGroup at ./spec/models/spree/customer_group_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:6\"}}","suiteSourceFile":"core/spec/models/spree/customer_group_spec.rb"},{"name":"#add_customers touches the added users","suite":"Spree::CustomerGroup at ./spec/models/spree/customer_group_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:7\"}}","suiteSourceFile":"core/spec/models/spree/customer_group_spec.rb"},{"name":"#add_customers does not touch users that were already in the group","suite":"Spree::CustomerGroup at ./spec/models/spree/customer_group_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:8\"}}","suiteSourceFile":"core/spec/models/spree/customer_group_spec.rb"},{"name":"#remove_customers removes customers from the group","suite":"Spree::CustomerGroup at ./spec/models/spree/customer_group_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","suiteSourceFile":"core/spec/models/spree/customer_group_spec.rb"},{"name":"#remove_customers returns the count of removed customers","suite":"Spree::CustomerGroup at ./spec/models/spree/customer_group_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2\"}}","suiteSourceFile":"core/spec/models/spree/customer_group_spec.rb"},{"name":"#remove_customers returns 0 when users are not in the group","suite":"Spree::CustomerGroup at ./spec/models/spree/customer_group_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:3\"}}","suiteSourceFile":"core/spec/models/spree/customer_group_spec.rb"},{"name":"#remove_customers handles empty array","suite":"Spree::CustomerGroup at ./spec/models/spree/customer_group_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:4\"}}","suiteSourceFile":"core/spec/models/spree/customer_group_spec.rb"},{"name":"#remove_customers handles nil","suite":"Spree::CustomerGroup at ./spec/models/spree/customer_group_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:5\"}}","suiteSourceFile":"core/spec/models/spree/customer_group_spec.rb"},{"name":"#remove_customers touches the removed users","suite":"Spree::CustomerGroup at ./spec/models/spree/customer_group_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:6\"}}","suiteSourceFile":"core/spec/models/spree/customer_group_spec.rb"},{"name":"#remove_customers does not touch users that were not in the group","suite":"Spree::CustomerGroup at ./spec/models/spree/customer_group_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:7\"}}","suiteSourceFile":"core/spec/models/spree/customer_group_spec.rb"},{"name":"associations example at ./spec/models/spree/customer_group_user_spec.rb:8","suite":"Spree::CustomerGroupUser at ./spec/models/spree/customer_group_user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/customer_group_user_spec.rb"},{"name":"associations example at ./spec/models/spree/customer_group_user_spec.rb:9","suite":"Spree::CustomerGroupUser at ./spec/models/spree/customer_group_user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/customer_group_user_spec.rb"},{"name":"validations example at ./spec/models/spree/customer_group_user_spec.rb:13","suite":"Spree::CustomerGroupUser at ./spec/models/spree/customer_group_user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/customer_group_user_spec.rb"},{"name":"validations example at ./spec/models/spree/customer_group_user_spec.rb:14","suite":"Spree::CustomerGroupUser at ./spec/models/spree/customer_group_user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","suiteSourceFile":"core/spec/models/spree/customer_group_user_spec.rb"},{"name":"validations uniqueness validates uniqueness of customer_group_id within user scope","suite":"Spree::CustomerGroupUser at ./spec/models/spree/customer_group_user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:1\"}}","suiteSourceFile":"core/spec/models/spree/customer_group_user_spec.rb"},{"name":"validations uniqueness allows same user in different groups","suite":"Spree::CustomerGroupUser at ./spec/models/spree/customer_group_user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:2\"}}","suiteSourceFile":"core/spec/models/spree/customer_group_user_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:4","suite":"Spree::CustomerReturn at ./spec/models/spree/customer_return_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/customer_return_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:5","suite":"Spree::CustomerReturn at ./spec/models/spree/customer_return_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/customer_return_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:7","suite":"Spree::CustomerReturn at ./spec/models/spree/customer_return_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/models/spree/customer_return_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:8","suite":"Spree::CustomerReturn at ./spec/models/spree/customer_return_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","suiteSourceFile":"core/spec/models/spree/customer_return_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:10","suite":"Spree::CustomerReturn at ./spec/models/spree/customer_return_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","suiteSourceFile":"core/spec/models/spree/customer_return_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:11","suite":"Spree::CustomerReturn at ./spec/models/spree/customer_return_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","suiteSourceFile":"core/spec/models/spree/customer_return_spec.rb"},{"name":"behaves like metadata reads data as symbolized keys","suite":"Spree::CustomerReturn at ./spec/models/spree/customer_return_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7\"}}","suiteSourceFile":"core/spec/models/spree/customer_return_spec.rb"},{"name":"behaves like metadata reads data as not symbolized keys","suite":"Spree::CustomerReturn at ./spec/models/spree/customer_return_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8\"}}","suiteSourceFile":"core/spec/models/spree/customer_return_spec.rb"},{"name":"behaves like metadata can query records by metadata properties","suite":"Spree::CustomerReturn at ./spec/models/spree/customer_return_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:10\"}}","suiteSourceFile":"core/spec/models/spree/customer_return_spec.rb"},{"name":"lifecycle events customer_return.created publishes created event when record is created","suite":"Spree::CustomerReturn at ./spec/models/spree/customer_return_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/customer_return_spec.rb"},{"name":"lifecycle events customer_return.updated publishes updated event when record is updated","suite":"Spree::CustomerReturn at ./spec/models/spree/customer_return_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/customer_return_spec.rb"},{"name":"lifecycle events customer_return.deleted publishes deleted event when record is destroyed","suite":"Spree::CustomerReturn at ./spec/models/spree/customer_return_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:1\"}}","suiteSourceFile":"core/spec/models/spree/customer_return_spec.rb"},{"name":".validation #must_have_return_authorization return item does not belong to return authorization is not valid","suite":"Spree::CustomerReturn at ./spec/models/spree/customer_return_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/customer_return_spec.rb"},{"name":".validation #must_have_return_authorization return item does not belong to return authorization adds an error message","suite":"Spree::CustomerReturn at ./spec/models/spree/customer_return_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/customer_return_spec.rb"},{"name":".validation #must_have_return_authorization return item belongs to return authorization is valid","suite":"Spree::CustomerReturn at ./spec/models/spree/customer_return_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/customer_return_spec.rb"},{"name":".validation #return_items_belong_to_same_order return items are part of different orders is not valid","suite":"Spree::CustomerReturn at ./spec/models/spree/customer_return_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/customer_return_spec.rb"},{"name":".validation #return_items_belong_to_same_order return items are part of different orders adds an error message","suite":"Spree::CustomerReturn at ./spec/models/spree/customer_return_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1:2\"}}","suiteSourceFile":"core/spec/models/spree/customer_return_spec.rb"},{"name":".validation #return_items_belong_to_same_order return items are part of the same order is valid","suite":"Spree::CustomerReturn at ./spec/models/spree/customer_return_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/customer_return_spec.rb"},{"name":"whitelisted_ransackable_attributes example at ./spec/models/spree/customer_return_spec.rb:120","suite":"Spree::CustomerReturn at ./spec/models/spree/customer_return_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/customer_return_spec.rb"},{"name":"#display_pre_tax_total example at ./spec/models/spree/customer_return_spec.rb:133","suite":"Spree::CustomerReturn at ./spec/models/spree/customer_return_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","suiteSourceFile":"core/spec/models/spree/customer_return_spec.rb"},{"name":"#pre_tax_total returns the sum of the return item's pre_tax_amount","suite":"Spree::CustomerReturn at ./spec/models/spree/customer_return_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","suiteSourceFile":"core/spec/models/spree/customer_return_spec.rb"},{"name":"#display_pre_tax_total returns a Spree::Money","suite":"Spree::CustomerReturn at ./spec/models/spree/customer_return_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","suiteSourceFile":"core/spec/models/spree/customer_return_spec.rb"},{"name":"#currency example at ./spec/models/spree/customer_return_spec.rb:170","suite":"Spree::CustomerReturn at ./spec/models/spree/customer_return_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1\"}}","suiteSourceFile":"core/spec/models/spree/customer_return_spec.rb"},{"name":"#order returns the order associated with the return item's inventory unit","suite":"Spree::CustomerReturn at ./spec/models/spree/customer_return_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1\"}}","suiteSourceFile":"core/spec/models/spree/customer_return_spec.rb"},{"name":"#order return item without inventory unit returns nil","suite":"Spree::CustomerReturn at ./spec/models/spree/customer_return_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:2:1\"}}","suiteSourceFile":"core/spec/models/spree/customer_return_spec.rb"},{"name":"#order_id return item is not associated yet is nil","suite":"Spree::CustomerReturn at ./spec/models/spree/customer_return_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1:1\"}}","suiteSourceFile":"core/spec/models/spree/customer_return_spec.rb"},{"name":"#order_id has an associated return item is the return item's inventory unit's order id","suite":"Spree::CustomerReturn at ./spec/models/spree/customer_return_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:2:1\"}}","suiteSourceFile":"core/spec/models/spree/customer_return_spec.rb"},{"name":".after_save to the initial stock location marks all inventory units are returned","suite":"Spree::CustomerReturn at ./spec/models/spree/customer_return_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1:1\"}}","suiteSourceFile":"core/spec/models/spree/customer_return_spec.rb"},{"name":".after_save to the initial stock location updates the stock item counts in the stock location","suite":"Spree::CustomerReturn at ./spec/models/spree/customer_return_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1:2\"}}","suiteSourceFile":"core/spec/models/spree/customer_return_spec.rb"},{"name":".after_save to the initial stock location with Config.track_inventory_levels == false does not update the stock item counts in the stock location","suite":"Spree::CustomerReturn at ./spec/models/spree/customer_return_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/customer_return_spec.rb"},{"name":".after_save to a different stock location updates the stock item counts in new stock location","suite":"Spree::CustomerReturn at ./spec/models/spree/customer_return_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2:1\"}}","suiteSourceFile":"core/spec/models/spree/customer_return_spec.rb"},{"name":".after_save to a different stock location does not raise an error when no stock item exists in the stock location","suite":"Spree::CustomerReturn at ./spec/models/spree/customer_return_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2:2\"}}","suiteSourceFile":"core/spec/models/spree/customer_return_spec.rb"},{"name":".after_save to a different stock location does not update the stock item counts in the original stock location","suite":"Spree::CustomerReturn at ./spec/models/spree/customer_return_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2:3\"}}","suiteSourceFile":"core/spec/models/spree/customer_return_spec.rb"},{"name":"#fully_reimbursed? when some return items are undecided example at ./spec/models/spree/customer_return_spec.rb:283","suite":"Spree::CustomerReturn at ./spec/models/spree/customer_return_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:1:1\"}}","suiteSourceFile":"core/spec/models/spree/customer_return_spec.rb"},{"name":"#fully_reimbursed? when all return items are decided when all return items are rejected example at ./spec/models/spree/customer_return_spec.rb:290","suite":"Spree::CustomerReturn at ./spec/models/spree/customer_return_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/customer_return_spec.rb"},{"name":"#fully_reimbursed? when all return items are decided when all return items are accepted when some return items have no reimbursement example at ./spec/models/spree/customer_return_spec.rb:297","suite":"Spree::CustomerReturn at ./spec/models/spree/customer_return_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:2:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/customer_return_spec.rb"},{"name":"#fully_reimbursed? when all return items are decided when all return items are accepted when all return items have a reimbursement when some reimbursements are not reimbursed example at ./spec/models/spree/customer_return_spec.rb:304","suite":"Spree::CustomerReturn at ./spec/models/spree/customer_return_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:2:2:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/customer_return_spec.rb"},{"name":"#fully_reimbursed? when all return items are decided when all return items are accepted when all return items have a reimbursement when all reimbursements are reimbursed example at ./spec/models/spree/customer_return_spec.rb:310","suite":"Spree::CustomerReturn at ./spec/models/spree/customer_return_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:2:2:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/customer_return_spec.rb"},{"name":"#create when slug is not provided generates slug automatically","suite":"Spree::DataFeed::Google at ./spec/models/spree/data_feed/google_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/data_feed/google_spec.rb"},{"name":"#create when slug is provided uses the slug provided","suite":"Spree::DataFeed::Google at ./spec/models/spree/data_feed/google_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/data_feed/google_spec.rb"},{"name":"#formatted_url returns full url to the data feed","suite":"Spree::DataFeed::Google at ./spec/models/spree/data_feed/google_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/data_feed/google_spec.rb"},{"name":".label returns a descriptive label","suite":"Spree::DataFeed::Google at ./spec/models/spree/data_feed/google_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/data_feed/google_spec.rb"},{"name":"validates presence of digital and line_item","suite":"Spree::DigitalLink at ./spec/models/spree/digital_link_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2\"}}","suiteSourceFile":"core/spec/models/spree/digital_link_spec.rb"},{"name":"validates presence of line_item","suite":"Spree::DigitalLink at ./spec/models/spree/digital_link_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3\"}}","suiteSourceFile":"core/spec/models/spree/digital_link_spec.rb"},{"name":"validates presence of digital","suite":"Spree::DigitalLink at ./spec/models/spree/digital_link_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4\"}}","suiteSourceFile":"core/spec/models/spree/digital_link_spec.rb"},{"name":"behaves like lifecycle events lifecycle events digital_link.created publishes created event when record is created","suite":"Spree::DigitalLink at ./spec/models/spree/digital_link_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/digital_link_spec.rb"},{"name":"behaves like lifecycle events lifecycle events digital_link.updated publishes updated event when record is updated","suite":"Spree::DigitalLink at ./spec/models/spree/digital_link_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/digital_link_spec.rb"},{"name":"behaves like lifecycle events lifecycle events digital_link.deleted publishes deleted event when record is deleted","suite":"Spree::DigitalLink at ./spec/models/spree/digital_link_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/digital_link_spec.rb"},{"name":"validates access_counter validates access_counter numericality","suite":"Spree::DigitalLink at ./spec/models/spree/digital_link_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","suiteSourceFile":"core/spec/models/spree/digital_link_spec.rb"},{"name":"validates access_counter validates access_counter 0 or greater","suite":"Spree::DigitalLink at ./spec/models/spree/digital_link_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2\"}}","suiteSourceFile":"core/spec/models/spree/digital_link_spec.rb"},{"name":"validates access_counter validates access_counter 0 is valid","suite":"Spree::DigitalLink at ./spec/models/spree/digital_link_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3\"}}","suiteSourceFile":"core/spec/models/spree/digital_link_spec.rb"},{"name":"#reset! resets access_counter","suite":"Spree::DigitalLink at ./spec/models/spree/digital_link_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","suiteSourceFile":"core/spec/models/spree/digital_link_spec.rb"},{"name":"#reset! resets created_at timestamp","suite":"Spree::DigitalLink at ./spec/models/spree/digital_link_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2\"}}","suiteSourceFile":"core/spec/models/spree/digital_link_spec.rb"},{"name":"#expired? out of date example at ./spec/models/spree/digital_link_spec.rb:70","suite":"Spree::DigitalLink at ./spec/models/spree/digital_link_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1:1\"}}","suiteSourceFile":"core/spec/models/spree/digital_link_spec.rb"},{"name":"#expired? out of date but the store does not track date of expire example at ./spec/models/spree/digital_link_spec.rb:82","suite":"Spree::DigitalLink at ./spec/models/spree/digital_link_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2:1\"}}","suiteSourceFile":"core/spec/models/spree/digital_link_spec.rb"},{"name":"#expired? still in date example at ./spec/models/spree/digital_link_spec.rb:88","suite":"Spree::DigitalLink at ./spec/models/spree/digital_link_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:3:1\"}}","suiteSourceFile":"core/spec/models/spree/digital_link_spec.rb"},{"name":"#access_limit_exceeded? count exceeded example at ./spec/models/spree/digital_link_spec.rb:102","suite":"Spree::DigitalLink at ./spec/models/spree/digital_link_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1:1\"}}","suiteSourceFile":"core/spec/models/spree/digital_link_spec.rb"},{"name":"#access_limit_exceeded? count exceeded but the store does not limit digital download count example at ./spec/models/spree/digital_link_spec.rb:114","suite":"Spree::DigitalLink at ./spec/models/spree/digital_link_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2:1\"}}","suiteSourceFile":"core/spec/models/spree/digital_link_spec.rb"},{"name":"#access_limit_exceeded? still in count range example at ./spec/models/spree/digital_link_spec.rb:120","suite":"Spree::DigitalLink at ./spec/models/spree/digital_link_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:3:1\"}}","suiteSourceFile":"core/spec/models/spree/digital_link_spec.rb"},{"name":"#authorizable? count exceeded example at ./spec/models/spree/digital_link_spec.rb:134","suite":"Spree::DigitalLink at ./spec/models/spree/digital_link_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1:1\"}}","suiteSourceFile":"core/spec/models/spree/digital_link_spec.rb"},{"name":"#authorizable? count exceeded but the store does not limit digital download count example at ./spec/models/spree/digital_link_spec.rb:146","suite":"Spree::DigitalLink at ./spec/models/spree/digital_link_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:2:1\"}}","suiteSourceFile":"core/spec/models/spree/digital_link_spec.rb"},{"name":"#authorizable? still in count range example at ./spec/models/spree/digital_link_spec.rb:152","suite":"Spree::DigitalLink at ./spec/models/spree/digital_link_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:3:1\"}}","suiteSourceFile":"core/spec/models/spree/digital_link_spec.rb"},{"name":"#authorizable? out of date example at ./spec/models/spree/digital_link_spec.rb:164","suite":"Spree::DigitalLink at ./spec/models/spree/digital_link_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:4:1\"}}","suiteSourceFile":"core/spec/models/spree/digital_link_spec.rb"},{"name":"#authorizable? out of date but the store does not track date of expire example at ./spec/models/spree/digital_link_spec.rb:176","suite":"Spree::DigitalLink at ./spec/models/spree/digital_link_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:5:1\"}}","suiteSourceFile":"core/spec/models/spree/digital_link_spec.rb"},{"name":"#authorizable? still in date example at ./spec/models/spree/digital_link_spec.rb:182","suite":"Spree::DigitalLink at ./spec/models/spree/digital_link_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:6:1\"}}","suiteSourceFile":"core/spec/models/spree/digital_link_spec.rb"},{"name":"authorize! increments the access counter","suite":"Spree::DigitalLink at ./spec/models/spree/digital_link_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1\"}}","suiteSourceFile":"core/spec/models/spree/digital_link_spec.rb"},{"name":"authorize! touches the digital_link when autorized","suite":"Spree::DigitalLink at ./spec/models/spree/digital_link_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:2\"}}","suiteSourceFile":"core/spec/models/spree/digital_link_spec.rb"},{"name":"authorize! does not touch the digital_link if not authorized","suite":"Spree::DigitalLink at ./spec/models/spree/digital_link_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:3\"}}","suiteSourceFile":"core/spec/models/spree/digital_link_spec.rb"},{"name":"validates presence of variant","suite":"Spree::Digital at ./spec/models/spree/digital_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2\"}}","suiteSourceFile":"core/spec/models/spree/digital_spec.rb"},{"name":"validates presence of attachment","suite":"Spree::Digital at ./spec/models/spree/digital_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3\"}}","suiteSourceFile":"core/spec/models/spree/digital_spec.rb"},{"name":"validates presence of attachment and variant","suite":"Spree::Digital at ./spec/models/spree/digital_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4\"}}","suiteSourceFile":"core/spec/models/spree/digital_spec.rb"},{"name":"behaves like lifecycle events lifecycle events digital.created publishes created event when record is created","suite":"Spree::Digital at ./spec/models/spree/digital_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/digital_spec.rb"},{"name":"behaves like lifecycle events lifecycle events digital.updated publishes updated event when record is updated","suite":"Spree::Digital at ./spec/models/spree/digital_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/digital_spec.rb"},{"name":"behaves like lifecycle events lifecycle events digital.deleted publishes deleted event when record is deleted","suite":"Spree::Digital at ./spec/models/spree/digital_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/digital_spec.rb"},{"name":"#initialize creates an event with name and payload","suite":"Spree::Event at ./spec/models/spree/event_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/event_spec.rb"},{"name":"#initialize freezes the payload and metadata","suite":"Spree::Event at ./spec/models/spree/event_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/event_spec.rb"},{"name":"#initialize sets created_at","suite":"Spree::Event at ./spec/models/spree/event_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/models/spree/event_spec.rb"},{"name":"#initialize generates an id","suite":"Spree::Event at ./spec/models/spree/event_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","suiteSourceFile":"core/spec/models/spree/event_spec.rb"},{"name":"#initialize includes spree_version in metadata","suite":"Spree::Event at ./spec/models/spree/event_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","suiteSourceFile":"core/spec/models/spree/event_spec.rb"},{"name":"#initialize accepts custom metadata","suite":"Spree::Event at ./spec/models/spree/event_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","suiteSourceFile":"core/spec/models/spree/event_spec.rb"},{"name":"#initialize deep stringifies payload keys","suite":"Spree::Event at ./spec/models/spree/event_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7\"}}","suiteSourceFile":"core/spec/models/spree/event_spec.rb"},{"name":"#initialize sets store_id from Spree::Current.store","suite":"Spree::Event at ./spec/models/spree/event_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8\"}}","suiteSourceFile":"core/spec/models/spree/event_spec.rb"},{"name":"#initialize accepts explicit store_id","suite":"Spree::Event at ./spec/models/spree/event_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:9\"}}","suiteSourceFile":"core/spec/models/spree/event_spec.rb"},{"name":"validations requires name","suite":"Spree::Event at ./spec/models/spree/event_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/event_spec.rb"},{"name":"validations requires store_id","suite":"Spree::Event at ./spec/models/spree/event_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","suiteSourceFile":"core/spec/models/spree/event_spec.rb"},{"name":"validations is valid with name and store_id","suite":"Spree::Event at ./spec/models/spree/event_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3\"}}","suiteSourceFile":"core/spec/models/spree/event_spec.rb"},{"name":"#store returns the store for the store_id","suite":"Spree::Event at ./spec/models/spree/event_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/event_spec.rb"},{"name":"#store returns nil when store_id is blank","suite":"Spree::Event at ./spec/models/spree/event_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","suiteSourceFile":"core/spec/models/spree/event_spec.rb"},{"name":"#store memoizes the store lookup","suite":"Spree::Event at ./spec/models/spree/event_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3\"}}","suiteSourceFile":"core/spec/models/spree/event_spec.rb"},{"name":"#resource_type extracts the resource type from the event name","suite":"Spree::Event at ./spec/models/spree/event_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/event_spec.rb"},{"name":"#resource_type handles nested event names","suite":"Spree::Event at ./spec/models/spree/event_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2\"}}","suiteSourceFile":"core/spec/models/spree/event_spec.rb"},{"name":"#action extracts the action from the event name","suite":"Spree::Event at ./spec/models/spree/event_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","suiteSourceFile":"core/spec/models/spree/event_spec.rb"},{"name":"#action handles multi-part actions","suite":"Spree::Event at ./spec/models/spree/event_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2\"}}","suiteSourceFile":"core/spec/models/spree/event_spec.rb"},{"name":"#matches? matches exact event names","suite":"Spree::Event at ./spec/models/spree/event_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","suiteSourceFile":"core/spec/models/spree/event_spec.rb"},{"name":"#matches? matches wildcard patterns","suite":"Spree::Event at ./spec/models/spree/event_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2\"}}","suiteSourceFile":"core/spec/models/spree/event_spec.rb"},{"name":"#matches? matches global wildcard","suite":"Spree::Event at ./spec/models/spree/event_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:3\"}}","suiteSourceFile":"core/spec/models/spree/event_spec.rb"},{"name":".matches? matches exact names","suite":"Spree::Event at ./spec/models/spree/event_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","suiteSourceFile":"core/spec/models/spree/event_spec.rb"},{"name":".matches? matches wildcard patterns","suite":"Spree::Event at ./spec/models/spree/event_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2\"}}","suiteSourceFile":"core/spec/models/spree/event_spec.rb"},{"name":".matches? matches global wildcard","suite":"Spree::Event at ./spec/models/spree/event_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:3\"}}","suiteSourceFile":"core/spec/models/spree/event_spec.rb"},{"name":".matches? handles complex patterns","suite":"Spree::Event at ./spec/models/spree/event_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:4\"}}","suiteSourceFile":"core/spec/models/spree/event_spec.rb"},{"name":"#attributes returns a hash representation with string keys","suite":"Spree::Event at ./spec/models/spree/event_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1\"}}","suiteSourceFile":"core/spec/models/spree/event_spec.rb"},{"name":"#inspect returns a readable string representation","suite":"Spree::Event at ./spec/models/spree/event_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1\"}}","suiteSourceFile":"core/spec/models/spree/event_spec.rb"},{"name":"#description describes the return items' change in options","suite":"Spree::Exchange at ./spec/models/spree/exchange_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/exchange_spec.rb"},{"name":"#display_amount is the total amount of all return items","suite":"Spree::Exchange at ./spec/models/spree/exchange_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/exchange_spec.rb"},{"name":"#perform! creates shipments for the order with the return items exchange inventory units","suite":"Spree::Exchange at ./spec/models/spree/exchange_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/exchange_spec.rb"},{"name":"#perform! when it cannot create shipments for all items raises an UnableToCreateShipments error","suite":"Spree::Exchange at ./spec/models/spree/exchange_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","suiteSourceFile":"core/spec/models/spree/exchange_spec.rb"},{"name":"#to_key example at ./spec/models/spree/exchange_spec.rb:65","suite":"Spree::Exchange at ./spec/models/spree/exchange_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/exchange_spec.rb"},{"name":".param_key example at ./spec/models/spree/exchange_spec.rb:69","suite":"Spree::Exchange at ./spec/models/spree/exchange_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","suiteSourceFile":"core/spec/models/spree/exchange_spec.rb"},{"name":".model_name example at ./spec/models/spree/exchange_spec.rb:73","suite":"Spree::Exchange at ./spec/models/spree/exchange_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","suiteSourceFile":"core/spec/models/spree/exchange_spec.rb"},{"name":"behaves like lifecycle events lifecycle events export.created publishes created event when record is created","suite":"Spree::Export at ./spec/models/spree/export_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/export_spec.rb"},{"name":"behaves like lifecycle events lifecycle events export.updated publishes updated event when record is updated","suite":"Spree::Export at ./spec/models/spree/export_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/export_spec.rb"},{"name":"behaves like lifecycle events lifecycle events export.deleted publishes deleted event when record is deleted","suite":"Spree::Export at ./spec/models/spree/export_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/export_spec.rb"},{"name":"#event_serializer_class returns the correct event serializer class","suite":"Spree::Export at ./spec/models/spree/export_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/export_spec.rb"},{"name":"#model_class returns the correct record class","suite":"Spree::Export at ./spec/models/spree/export_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/export_spec.rb"},{"name":"#export_file_name returns the correct file name","suite":"Spree::Export at ./spec/models/spree/export_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/export_spec.rb"},{"name":"#generate generates the export","suite":"Spree::Export at ./spec/models/spree/export_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","suiteSourceFile":"core/spec/models/spree/export_spec.rb"},{"name":"#generate sends the export done email","suite":"Spree::Export at ./spec/models/spree/export_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2\"}}","suiteSourceFile":"core/spec/models/spree/export_spec.rb"},{"name":"#generate when the export type is Spree::Exports::Customers generates the export","suite":"Spree::Export at ./spec/models/spree/export_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3:1\"}}","suiteSourceFile":"core/spec/models/spree/export_spec.rb"},{"name":"#records_to_export without search params returns all products","suite":"Spree::Export at ./spec/models/spree/export_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1:1\"}}","suiteSourceFile":"core/spec/models/spree/export_spec.rb"},{"name":"#records_to_export with search params returns matching products","suite":"Spree::Export at ./spec/models/spree/export_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2:1\"}}","suiteSourceFile":"core/spec/models/spree/export_spec.rb"},{"name":"#send_export_done_email queues the export done email","suite":"Spree::Export at ./spec/models/spree/export_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","suiteSourceFile":"core/spec/models/spree/export_spec.rb"},{"name":"#normalize_search_params with nil search_params does nothing","suite":"Spree::Export at ./spec/models/spree/export_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1:1\"}}","suiteSourceFile":"core/spec/models/spree/export_spec.rb"},{"name":"#normalize_search_params with empty search_params does nothing","suite":"Spree::Export at ./spec/models/spree/export_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2:1\"}}","suiteSourceFile":"core/spec/models/spree/export_spec.rb"},{"name":"#normalize_search_params with valid JSON string maintains the same content","suite":"Spree::Export at ./spec/models/spree/export_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:3:1\"}}","suiteSourceFile":"core/spec/models/spree/export_spec.rb"},{"name":"#normalize_search_params with valid JSON string ensures valid JSON output","suite":"Spree::Export at ./spec/models/spree/export_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:3:2\"}}","suiteSourceFile":"core/spec/models/spree/export_spec.rb"},{"name":"#normalize_search_params with invalid JSON string preserves the original string","suite":"Spree::Export at ./spec/models/spree/export_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:4:1\"}}","suiteSourceFile":"core/spec/models/spree/export_spec.rb"},{"name":"#normalize_search_params with Ruby hash input converts to JSON string","suite":"Spree::Export at ./spec/models/spree/export_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:5:1\"}}","suiteSourceFile":"core/spec/models/spree/export_spec.rb"},{"name":"#normalize_search_params with pre-normalized params does not double-process","suite":"Spree::Export at ./spec/models/spree/export_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:6:1\"}}","suiteSourceFile":"core/spec/models/spree/export_spec.rb"},{"name":"#csv_headers when no metafields exist returns customer headers","suite":"Spree::Exports::Customers at ./spec/models/spree/exports/customers_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/exports/customers_spec.rb"},{"name":"#csv_headers when metafields exist includes metafield headers","suite":"Spree::Exports::Customers at ./spec/models/spree/exports/customers_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/exports/customers_spec.rb"},{"name":"#records_to_export when search_params is nil includes all gift cards for the store","suite":"Spree::Exports::GiftCards at ./spec/models/spree/exports/gift_cards_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/exports/gift_cards_spec.rb"},{"name":"#records_to_export when search_params filters by status includes only active gift cards","suite":"Spree::Exports::GiftCards at ./spec/models/spree/exports/gift_cards_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/exports/gift_cards_spec.rb"},{"name":"#csv_headers when no metafields exist returns gift card headers","suite":"Spree::Exports::GiftCards at ./spec/models/spree/exports/gift_cards_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/exports/gift_cards_spec.rb"},{"name":"#csv_headers when metafields exist includes metafield headers","suite":"Spree::Exports::GiftCards at ./spec/models/spree/exports/gift_cards_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/exports/gift_cards_spec.rb"},{"name":"#csv_headers when no metafields exist returns newsletter subscriber headers","suite":"Spree::Exports::NewsletterSubscribers at ./spec/models/spree/exports/newsletter_subscribers_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/exports/newsletter_subscribers_spec.rb"},{"name":"#csv_headers when metafields exist includes metafield headers","suite":"Spree::Exports::NewsletterSubscribers at ./spec/models/spree/exports/newsletter_subscribers_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/exports/newsletter_subscribers_spec.rb"},{"name":"#csv_headers when no metafields exist returns order line item headers","suite":"Spree::Exports::Orders at ./spec/models/spree/exports/orders_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/exports/orders_spec.rb"},{"name":"#csv_headers when metafields exist includes metafield headers","suite":"Spree::Exports::Orders at ./spec/models/spree/exports/orders_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/exports/orders_spec.rb"},{"name":"#multi_line_csv? returns true","suite":"Spree::Exports::Orders at ./spec/models/spree/exports/orders_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/exports/orders_spec.rb"},{"name":"#scope when search_params is nil excludes archived products","suite":"Spree::Exports::Products at ./spec/models/spree/exports/products_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/exports/products_spec.rb"},{"name":"#scope when search_params is present includes all products","suite":"Spree::Exports::Products at ./spec/models/spree/exports/products_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/exports/products_spec.rb"},{"name":"#csv_headers when product_properties_enabled is false and no metafields returns product variant headers without properties","suite":"Spree::Exports::Products at ./spec/models/spree/exports/products_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/exports/products_spec.rb"},{"name":"#csv_headers when product_properties_enabled is true includes property headers","suite":"Spree::Exports::Products at ./spec/models/spree/exports/products_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/exports/products_spec.rb"},{"name":"#csv_headers when metafields exist includes metafield headers","suite":"Spree::Exports::Products at ./spec/models/spree/exports/products_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:1\"}}","suiteSourceFile":"core/spec/models/spree/exports/products_spec.rb"},{"name":"when the order has multiple line items can move more than one variant to the desired shipment","suite":"Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/fulfilment_changer_spec.rb"},{"name":"when the current shipment has enough inventory units adds the desired inventory units to the desired shipment","suite":"Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/fulfilment_changer_spec.rb"},{"name":"when the current shipment has enough inventory units removes the desired inventory units from the current shipment","suite":"Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","suiteSourceFile":"core/spec/models/spree/fulfilment_changer_spec.rb"},{"name":"when the current shipment has enough inventory units recalculates shipping costs for the current shipment","suite":"Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3\"}}","suiteSourceFile":"core/spec/models/spree/fulfilment_changer_spec.rb"},{"name":"when the current shipment has enough inventory units recalculates shipping costs for the new shipment","suite":"Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:4\"}}","suiteSourceFile":"core/spec/models/spree/fulfilment_changer_spec.rb"},{"name":"when the current shipment has enough inventory units when transferring to another stock location when the other stock location has enough stock is marked as a successful transfer","suite":"Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:5:1:1\"}}","suiteSourceFile":"core/spec/models/spree/fulfilment_changer_spec.rb"},{"name":"when the current shipment has enough inventory units when transferring to another stock location when the other stock location has enough stock stocks the current stock location back up","suite":"Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:5:1:2\"}}","suiteSourceFile":"core/spec/models/spree/fulfilment_changer_spec.rb"},{"name":"when the current shipment has enough inventory units when transferring to another stock location when the other stock location has enough stock unstocks the desired stock location","suite":"Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:5:1:3\"}}","suiteSourceFile":"core/spec/models/spree/fulfilment_changer_spec.rb"},{"name":"when the current shipment has enough inventory units when transferring to another stock location when the other stock location has enough stock when the order is not completed does not stock the current stock location back up","suite":"Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:5:1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/fulfilment_changer_spec.rb"},{"name":"when the current shipment has enough inventory units when transferring to another stock location when the other stock location has enough stock when the order is not completed does not unstock the desired location","suite":"Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:5:1:4:2\"}}","suiteSourceFile":"core/spec/models/spree/fulfilment_changer_spec.rb"},{"name":"when the current shipment has enough inventory units when transferring to another stock location when the desired stock location can only partially fulfil the quantity restocks seven at the original stock location","suite":"Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:5:2:1\"}}","suiteSourceFile":"core/spec/models/spree/fulfilment_changer_spec.rb"},{"name":"when the current shipment has enough inventory units when transferring to another stock location when the desired stock location can only partially fulfil the quantity unstocks seven at the desired stock location","suite":"Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:5:2:2\"}}","suiteSourceFile":"core/spec/models/spree/fulfilment_changer_spec.rb"},{"name":"when the current shipment has enough inventory units when transferring to another stock location when the desired stock location can only partially fulfil the quantity creates a shipment with the correct number of on hand and backordered units","suite":"Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:5:2:3\"}}","suiteSourceFile":"core/spec/models/spree/fulfilment_changer_spec.rb"},{"name":"when the current shipment has enough inventory units when transferring to another stock location when the desired stock location can only partially fulfil the quantity when the desired stock location already has a backordered units restocks seven at the original stock location","suite":"Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:5:2:4:1\"}}","suiteSourceFile":"core/spec/models/spree/fulfilment_changer_spec.rb"},{"name":"when the current shipment has enough inventory units when transferring to another stock location when the desired stock location can only partially fulfil the quantity when the desired stock location already has a backordered units unstocks seven at the desired stock location","suite":"Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:5:2:4:2\"}}","suiteSourceFile":"core/spec/models/spree/fulfilment_changer_spec.rb"},{"name":"when the current shipment has enough inventory units when transferring to another stock location when the desired stock location can only partially fulfil the quantity when the desired stock location already has a backordered units creates a shipment with the correct number of on hand and backordered units","suite":"Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:5:2:4:3\"}}","suiteSourceFile":"core/spec/models/spree/fulfilment_changer_spec.rb"},{"name":"when the current shipment has enough inventory units when transferring to another stock location when the desired stock location can only partially fulfil the quantity when the original shipment has on hand and backordered units removes the backordered item first","suite":"Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:5:2:5:1\"}}","suiteSourceFile":"core/spec/models/spree/fulfilment_changer_spec.rb"},{"name":"when the current shipment has enough inventory units when transferring to another stock location when the desired stock location can only partially fulfil the quantity when the original shipment has on hand and backordered units more than one backordered unit reduces the backordered items first","suite":"Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:5:2:5:2:1\"}}","suiteSourceFile":"core/spec/models/spree/fulfilment_changer_spec.rb"},{"name":"when the current shipment has enough inventory units when transferring to another stock location when the desired stock location can only partially fulfil the quantity when the original shipment has on hand and backordered units more than one on_hand unit reduces the backordered items first","suite":"Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:5:2:5:3:1\"}}","suiteSourceFile":"core/spec/models/spree/fulfilment_changer_spec.rb"},{"name":"when the current shipment has enough inventory units when transferring to another stock location when the desired stock location can only partially fulfil the quantity when the original shipment had some backordered units restocks four at the original stock location","suite":"Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:5:2:6:1\"}}","suiteSourceFile":"core/spec/models/spree/fulfilment_changer_spec.rb"},{"name":"when the current shipment has enough inventory units when transferring to another stock location when the desired stock location can only partially fulfil the quantity when the original shipment had some backordered units unstocks five at the desired stock location","suite":"Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:5:2:6:2\"}}","suiteSourceFile":"core/spec/models/spree/fulfilment_changer_spec.rb"},{"name":"when the current shipment has enough inventory units when transferring to another stock location when the desired stock location can only partially fulfil the quantity when the original shipment had some backordered units creates a shipment with the correct number of on hand and backordered units","suite":"Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:5:2:6:3\"}}","suiteSourceFile":"core/spec/models/spree/fulfilment_changer_spec.rb"},{"name":"when the current shipment has enough inventory units when transferring to another stock location when the other stock location does not have enough stock is not successful","suite":"Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:5:3:1\"}}","suiteSourceFile":"core/spec/models/spree/fulfilment_changer_spec.rb"},{"name":"when the current shipment has enough inventory units when transferring to another stock location when the other stock location does not have enough stock has an activemodel error hash","suite":"Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:5:3:2\"}}","suiteSourceFile":"core/spec/models/spree/fulfilment_changer_spec.rb"},{"name":"when the current shipment has enough inventory units when the quantity to transfer is not positive is not successful","suite":"Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:6:1\"}}","suiteSourceFile":"core/spec/models/spree/fulfilment_changer_spec.rb"},{"name":"when the current shipment has enough inventory units when the quantity to transfer is not positive has an activemodel error hash","suite":"Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:6:2\"}}","suiteSourceFile":"core/spec/models/spree/fulfilment_changer_spec.rb"},{"name":"when the current shipment has enough inventory units when the desired shipment is identical to the current shipment is not successful","suite":"Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:7:1\"}}","suiteSourceFile":"core/spec/models/spree/fulfilment_changer_spec.rb"},{"name":"when the current shipment has enough inventory units when the desired shipment is identical to the current shipment has an activemodel error hash","suite":"Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:7:2\"}}","suiteSourceFile":"core/spec/models/spree/fulfilment_changer_spec.rb"},{"name":"when the current shipment has enough inventory units when the desired shipment has no stock location is not successful","suite":"Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:8:1\"}}","suiteSourceFile":"core/spec/models/spree/fulfilment_changer_spec.rb"},{"name":"when the current shipment has enough inventory units when the desired shipment has no stock location has an activemodel error hash","suite":"Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:8:2\"}}","suiteSourceFile":"core/spec/models/spree/fulfilment_changer_spec.rb"},{"name":"when the current shipment has enough inventory units when the current shipment has been shipped already is not successful","suite":"Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:9:1\"}}","suiteSourceFile":"core/spec/models/spree/fulfilment_changer_spec.rb"},{"name":"when the current shipment has enough inventory units when the current shipment has been shipped already has an activemodel error hash","suite":"Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:9:2\"}}","suiteSourceFile":"core/spec/models/spree/fulfilment_changer_spec.rb"},{"name":"when the current shipment has not enough inventory units adds the desired inventory units to the desired shipment","suite":"Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/fulfilment_changer_spec.rb"},{"name":"when the current shipment has not enough inventory units removes the desired inventory units from the current shipment","suite":"Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","suiteSourceFile":"core/spec/models/spree/fulfilment_changer_spec.rb"},{"name":"when the current shipment is emptied out by the transfer adds the desired inventory units to the desired shipment","suite":"Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/fulfilment_changer_spec.rb"},{"name":"when the current shipment is emptied out by the transfer removes the current shipment","suite":"Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2\"}}","suiteSourceFile":"core/spec/models/spree/fulfilment_changer_spec.rb"},{"name":"when the desired shipment is not yet persisted adds the desired inventory units to the desired shipment","suite":"Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","suiteSourceFile":"core/spec/models/spree/fulfilment_changer_spec.rb"},{"name":"when the desired shipment is not yet persisted updates desired shipment cost after selecting the shipping rate","suite":"Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2\"}}","suiteSourceFile":"core/spec/models/spree/fulfilment_changer_spec.rb"},{"name":"when the desired shipment is not yet persisted if the desired shipment is invalid is not successful","suite":"Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3:1\"}}","suiteSourceFile":"core/spec/models/spree/fulfilment_changer_spec.rb"},{"name":"when the desired shipment is not yet persisted if the desired shipment is invalid has an activemodel error hash","suite":"Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3:2\"}}","suiteSourceFile":"core/spec/models/spree/fulfilment_changer_spec.rb"},{"name":"when stock_item is last on_hand is successful","suite":"Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","suiteSourceFile":"core/spec/models/spree/fulfilment_changer_spec.rb"},{"name":"when stock_item is last on_hand has inventory unit on_hand","suite":"Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2\"}}","suiteSourceFile":"core/spec/models/spree/fulfilment_changer_spec.rb"},{"name":"disable recurring contract by destroying payment source","suite":"Spree::Gateway::Bogus at ./spec/models/spree/gateway/bogus_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","suiteSourceFile":"core/spec/models/spree/gateway/bogus_spec.rb"},{"name":"passes through all arguments on a method_missing call","suite":"Spree::Gateway at ./spec/models/spree/gateway_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","suiteSourceFile":"core/spec/models/spree/gateway_spec.rb"},{"name":"returns exchange multiplier for gateway","suite":"Spree::Gateway at ./spec/models/spree/gateway_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4\"}}","suiteSourceFile":"core/spec/models/spree/gateway_spec.rb"},{"name":"returns public preferences","suite":"Spree::Gateway at ./spec/models/spree/gateway_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5\"}}","suiteSourceFile":"core/spec/models/spree/gateway_spec.rb"},{"name":"Validations validates the type","suite":"Spree::Gateway at ./spec/models/spree/gateway_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/gateway_spec.rb"},{"name":"Validations automatically sets the name","suite":"Spree::Gateway at ./spec/models/spree/gateway_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","suiteSourceFile":"core/spec/models/spree/gateway_spec.rb"},{"name":"fetching payment sources finds credit cards associated on a order completed","suite":"Spree::Gateway at ./spec/models/spree/gateway_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/gateway_spec.rb"},{"name":"fetching payment sources finds credit cards associated with the order user","suite":"Spree::Gateway at ./spec/models/spree/gateway_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","suiteSourceFile":"core/spec/models/spree/gateway_spec.rb"},{"name":"#gateway_dashboard_payment_url returns nil","suite":"Spree::Gateway at ./spec/models/spree/gateway_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","suiteSourceFile":"core/spec/models/spree/gateway_spec.rb"},{"name":"#gateway_dashboard_payment_url when implemented returns the url","suite":"Spree::Gateway at ./spec/models/spree/gateway_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2:1\"}}","suiteSourceFile":"core/spec/models/spree/gateway_spec.rb"},{"name":"lifecycle events gift_card_batch.created publishes created event when record is created","suite":"Spree::GiftCardBatch at ./spec/models/spree/gift_card_batch_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/gift_card_batch_spec.rb"},{"name":"lifecycle events gift_card_batch.updated publishes updated event when record is updated","suite":"Spree::GiftCardBatch at ./spec/models/spree/gift_card_batch_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/gift_card_batch_spec.rb"},{"name":"lifecycle events gift_card_batch.deleted publishes deleted event when record is destroyed","suite":"Spree::GiftCardBatch at ./spec/models/spree/gift_card_batch_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/gift_card_batch_spec.rb"},{"name":"#create_gift_cards generates gift cards","suite":"Spree::GiftCardBatch at ./spec/models/spree/gift_card_batch_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/gift_card_batch_spec.rb"},{"name":"#generate_gift_cards when codes count is less than 500 generates gift cards","suite":"Spree::GiftCardBatch at ./spec/models/spree/gift_card_batch_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","suiteSourceFile":"core/spec/models/spree/gift_card_batch_spec.rb"},{"name":"#generate_gift_cards when codes count is greater than 500 enqueues a job","suite":"Spree::GiftCardBatch at ./spec/models/spree/gift_card_batch_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","suiteSourceFile":"core/spec/models/spree/gift_card_batch_spec.rb"},{"name":"behaves like lifecycle events lifecycle events gift_card.created publishes created event when record is created","suite":"Spree::GiftCard at ./spec/models/spree/gift_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/gift_card_spec.rb"},{"name":"behaves like lifecycle events lifecycle events gift_card.updated publishes updated event when record is updated","suite":"Spree::GiftCard at ./spec/models/spree/gift_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/gift_card_spec.rb"},{"name":"behaves like lifecycle events lifecycle events gift_card.deleted publishes deleted event when record is deleted","suite":"Spree::GiftCard at ./spec/models/spree/gift_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/gift_card_spec.rb"},{"name":"Callbacks #ensure_can_be_deleted ensures a used gift card can't be destroyed","suite":"Spree::GiftCard at ./spec/models/spree/gift_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/gift_card_spec.rb"},{"name":"Callbacks #ensure_can_be_deleted adds an error","suite":"Spree::GiftCard at ./spec/models/spree/gift_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:2\"}}","suiteSourceFile":"core/spec/models/spree/gift_card_spec.rb"},{"name":"Scopes #active returns active gift cards","suite":"Spree::GiftCard at ./spec/models/spree/gift_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","suiteSourceFile":"core/spec/models/spree/gift_card_spec.rb"},{"name":"Scopes #expired returns expired gift cards","suite":"Spree::GiftCard at ./spec/models/spree/gift_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","suiteSourceFile":"core/spec/models/spree/gift_card_spec.rb"},{"name":"Scopes #redeemed returns redeemed gift cards","suite":"Spree::GiftCard at ./spec/models/spree/gift_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3:1\"}}","suiteSourceFile":"core/spec/models/spree/gift_card_spec.rb"},{"name":"Scopes #partially_redeemed returns partially redeemed gift cards","suite":"Spree::GiftCard at ./spec/models/spree/gift_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4:1\"}}","suiteSourceFile":"core/spec/models/spree/gift_card_spec.rb"},{"name":"#active? when expired returns false","suite":"Spree::GiftCard at ./spec/models/spree/gift_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1\"}}","suiteSourceFile":"core/spec/models/spree/gift_card_spec.rb"},{"name":"#active? when redeemed returns false","suite":"Spree::GiftCard at ./spec/models/spree/gift_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1\"}}","suiteSourceFile":"core/spec/models/spree/gift_card_spec.rb"},{"name":"#active? when active returns true","suite":"Spree::GiftCard at ./spec/models/spree/gift_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3:1\"}}","suiteSourceFile":"core/spec/models/spree/gift_card_spec.rb"},{"name":"#amount_remaining when active returns the remaining amount","suite":"Spree::GiftCard at ./spec/models/spree/gift_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:1\"}}","suiteSourceFile":"core/spec/models/spree/gift_card_spec.rb"},{"name":"#amount_remaining when redeemed returns 0","suite":"Spree::GiftCard at ./spec/models/spree/gift_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1\"}}","suiteSourceFile":"core/spec/models/spree/gift_card_spec.rb"},{"name":"#amount_remaining when authorized returns the remaining amount","suite":"Spree::GiftCard at ./spec/models/spree/gift_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3:1\"}}","suiteSourceFile":"core/spec/models/spree/gift_card_spec.rb"},{"name":"#display_state when expired returns expired","suite":"Spree::GiftCard at ./spec/models/spree/gift_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1:1\"}}","suiteSourceFile":"core/spec/models/spree/gift_card_spec.rb"},{"name":"#display_state when active returns active","suite":"Spree::GiftCard at ./spec/models/spree/gift_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2:1\"}}","suiteSourceFile":"core/spec/models/spree/gift_card_spec.rb"},{"name":"#to_csv returns an array","suite":"Spree::GiftCard at ./spec/models/spree/gift_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","suiteSourceFile":"core/spec/models/spree/gift_card_spec.rb"},{"name":"#to_csv returns the correct number of fields","suite":"Spree::GiftCard at ./spec/models/spree/gift_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2\"}}","suiteSourceFile":"core/spec/models/spree/gift_card_spec.rb"},{"name":"#to_csv includes the gift card code","suite":"Spree::GiftCard at ./spec/models/spree/gift_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:3\"}}","suiteSourceFile":"core/spec/models/spree/gift_card_spec.rb"},{"name":"#to_csv includes the currency","suite":"Spree::GiftCard at ./spec/models/spree/gift_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:4\"}}","suiteSourceFile":"core/spec/models/spree/gift_card_spec.rb"},{"name":"#to_csv includes the user email","suite":"Spree::GiftCard at ./spec/models/spree/gift_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:5\"}}","suiteSourceFile":"core/spec/models/spree/gift_card_spec.rb"},{"name":"State transitions when active transitions from active to partially_redeemed","suite":"Spree::GiftCard at ./spec/models/spree/gift_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1:1\"}}","suiteSourceFile":"core/spec/models/spree/gift_card_spec.rb"},{"name":"State transitions when active transitions from active to redeemed","suite":"Spree::GiftCard at ./spec/models/spree/gift_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1:2\"}}","suiteSourceFile":"core/spec/models/spree/gift_card_spec.rb"},{"name":"State transitions when partially_redeemed allows multiple partial redemptions (remains partially_redeemed)","suite":"Spree::GiftCard at ./spec/models/spree/gift_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2:1\"}}","suiteSourceFile":"core/spec/models/spree/gift_card_spec.rb"},{"name":"State transitions when partially_redeemed transitions from partially_redeemed to redeemed when fully used","suite":"Spree::GiftCard at ./spec/models/spree/gift_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2:2\"}}","suiteSourceFile":"core/spec/models/spree/gift_card_spec.rb"},{"name":"State transitions when redeemed does not allow further redemption","suite":"Spree::GiftCard at ./spec/models/spree/gift_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:3:1\"}}","suiteSourceFile":"core/spec/models/spree/gift_card_spec.rb"},{"name":"custom events gift_card.redeemed publishes gift_card.redeemed event when fully redeemed","suite":"Spree::GiftCard at ./spec/models/spree/gift_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1:1\"}}","suiteSourceFile":"core/spec/models/spree/gift_card_spec.rb"},{"name":"custom events gift_card.partially_redeemed publishes gift_card.partially_redeemed event when partially redeemed","suite":"Spree::GiftCard at ./spec/models/spree/gift_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:2:1\"}}","suiteSourceFile":"core/spec/models/spree/gift_card_spec.rb"},{"name":"validation has attachment present","suite":"Spree::Image at ./spec/models/spree/image_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/image_spec.rb"},{"name":"validation has attachment absent","suite":"Spree::Image at ./spec/models/spree/image_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/image_spec.rb"},{"name":"validation allows only web image content types","suite":"Spree::Image at ./spec/models/spree/image_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/models/spree/image_spec.rb"},{"name":"validation does not allow non-web image content types","suite":"Spree::Image at ./spec/models/spree/image_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","suiteSourceFile":"core/spec/models/spree/image_spec.rb"},{"name":"#styles will return all styles for the image","suite":"Spree::Image at ./spec/models/spree/image_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/image_spec.rb"},{"name":"#style will return style for the given name","suite":"Spree::Image at ./spec/models/spree/image_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/image_spec.rb"},{"name":"cache expiration update position when viewable is a master variant touches product variants","suite":"Spree::Image at ./spec/models/spree/image_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/image_spec.rb"},{"name":"cache expiration update position when viewable is a variant does not touch product variants","suite":"Spree::Image at ./spec/models/spree/image_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/image_spec.rb"},{"name":"image_count counter cache increments image_count when image is created","suite":"Spree::Image at ./spec/models/spree/image_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","suiteSourceFile":"core/spec/models/spree/image_spec.rb"},{"name":"image_count counter cache decrements image_count when image is destroyed","suite":"Spree::Image at ./spec/models/spree/image_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2\"}}","suiteSourceFile":"core/spec/models/spree/image_spec.rb"},{"name":"image_count counter cache tracks multiple images correctly","suite":"Spree::Image at ./spec/models/spree/image_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3\"}}","suiteSourceFile":"core/spec/models/spree/image_spec.rb"},{"name":"total_image_count counter cache on product increments total_image_count when image is created on master","suite":"Spree::Image at ./spec/models/spree/image_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","suiteSourceFile":"core/spec/models/spree/image_spec.rb"},{"name":"total_image_count counter cache on product increments total_image_count when image is created on variant","suite":"Spree::Image at ./spec/models/spree/image_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2\"}}","suiteSourceFile":"core/spec/models/spree/image_spec.rb"},{"name":"total_image_count counter cache on product decrements total_image_count when image is destroyed","suite":"Spree::Image at ./spec/models/spree/image_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:3\"}}","suiteSourceFile":"core/spec/models/spree/image_spec.rb"},{"name":"total_image_count counter cache on product tracks images across all variants correctly","suite":"Spree::Image at ./spec/models/spree/image_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:4\"}}","suiteSourceFile":"core/spec/models/spree/image_spec.rb"},{"name":"Associations example at ./spec/models/spree/import_mapping_spec.rb:9","suite":"Spree::ImportMapping at ./spec/models/spree/import_mapping_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/import_mapping_spec.rb"},{"name":"Validations presence validations validates presence of import","suite":"Spree::ImportMapping at ./spec/models/spree/import_mapping_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/import_mapping_spec.rb"},{"name":"Validations presence validations validates presence of schema_field","suite":"Spree::ImportMapping at ./spec/models/spree/import_mapping_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:2\"}}","suiteSourceFile":"core/spec/models/spree/import_mapping_spec.rb"},{"name":"Validations uniqueness validations validates uniqueness of schema_field scoped to import_id","suite":"Spree::ImportMapping at ./spec/models/spree/import_mapping_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/import_mapping_spec.rb"},{"name":"Validations uniqueness validations allows same schema_field for different imports","suite":"Spree::ImportMapping at ./spec/models/spree/import_mapping_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:2\"}}","suiteSourceFile":"core/spec/models/spree/import_mapping_spec.rb"},{"name":"Validations uniqueness validations validates uniqueness of file_column scoped to import_id","suite":"Spree::ImportMapping at ./spec/models/spree/import_mapping_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:3\"}}","suiteSourceFile":"core/spec/models/spree/import_mapping_spec.rb"},{"name":"Validations uniqueness validations allows blank file_column","suite":"Spree::ImportMapping at ./spec/models/spree/import_mapping_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:4\"}}","suiteSourceFile":"core/spec/models/spree/import_mapping_spec.rb"},{"name":"Validations uniqueness validations allows same file_column for different imports","suite":"Spree::ImportMapping at ./spec/models/spree/import_mapping_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:5\"}}","suiteSourceFile":"core/spec/models/spree/import_mapping_spec.rb"},{"name":"#required? when schema_field is a required field returns true","suite":"Spree::ImportMapping at ./spec/models/spree/import_mapping_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","suiteSourceFile":"core/spec/models/spree/import_mapping_spec.rb"},{"name":"#required? when schema_field is not a required field returns false","suite":"Spree::ImportMapping at ./spec/models/spree/import_mapping_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","suiteSourceFile":"core/spec/models/spree/import_mapping_spec.rb"},{"name":"#mapped? when file_column is present returns true","suite":"Spree::ImportMapping at ./spec/models/spree/import_mapping_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1\"}}","suiteSourceFile":"core/spec/models/spree/import_mapping_spec.rb"},{"name":"#mapped? when file_column is blank returns false","suite":"Spree::ImportMapping at ./spec/models/spree/import_mapping_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1\"}}","suiteSourceFile":"core/spec/models/spree/import_mapping_spec.rb"},{"name":"#mapped? when file_column is blank returns false when file_column is empty string","suite":"Spree::ImportMapping at ./spec/models/spree/import_mapping_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:2\"}}","suiteSourceFile":"core/spec/models/spree/import_mapping_spec.rb"},{"name":"#try_to_auto_assign_file_column when exact match exists assigns the matching file column","suite":"Spree::ImportMapping at ./spec/models/spree/import_mapping_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:1\"}}","suiteSourceFile":"core/spec/models/spree/import_mapping_spec.rb"},{"name":"#try_to_auto_assign_file_column when case-insensitive match exists assigns the matching file column","suite":"Spree::ImportMapping at ./spec/models/spree/import_mapping_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1\"}}","suiteSourceFile":"core/spec/models/spree/import_mapping_spec.rb"},{"name":"#try_to_auto_assign_file_column when parameterized match exists assigns the matching file column","suite":"Spree::ImportMapping at ./spec/models/spree/import_mapping_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3:1\"}}","suiteSourceFile":"core/spec/models/spree/import_mapping_spec.rb"},{"name":"#try_to_auto_assign_file_column when no match exists does not assign a file column","suite":"Spree::ImportMapping at ./spec/models/spree/import_mapping_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:4:1\"}}","suiteSourceFile":"core/spec/models/spree/import_mapping_spec.rb"},{"name":"#try_to_auto_assign_file_column when file_column is already set overwrites with matching column","suite":"Spree::ImportMapping at ./spec/models/spree/import_mapping_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:5:1\"}}","suiteSourceFile":"core/spec/models/spree/import_mapping_spec.rb"},{"name":"#schema_field_label when schema_field exists in import schema returns the label for the schema field","suite":"Spree::ImportMapping at ./spec/models/spree/import_mapping_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1:1\"}}","suiteSourceFile":"core/spec/models/spree/import_mapping_spec.rb"},{"name":"#schema_field_label when schema_field is a metafield returns the metafield definition name","suite":"Spree::ImportMapping at ./spec/models/spree/import_mapping_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2:1\"}}","suiteSourceFile":"core/spec/models/spree/import_mapping_spec.rb"},{"name":"#schema_field_label when schema_field does not exist in import schema returns nil","suite":"Spree::ImportMapping at ./spec/models/spree/import_mapping_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:3:1\"}}","suiteSourceFile":"core/spec/models/spree/import_mapping_spec.rb"},{"name":"Associations #store delegates to import","suite":"Spree::ImportRow at ./spec/models/spree/import_row_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/import_row_spec.rb"},{"name":"Validations row_number uniqueness validates uniqueness scoped to import_id","suite":"Spree::ImportRow at ./spec/models/spree/import_row_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/import_row_spec.rb"},{"name":"Validations row_number uniqueness allows same row_number for different imports","suite":"Spree::ImportRow at ./spec/models/spree/import_row_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:2\"}}","suiteSourceFile":"core/spec/models/spree/import_row_spec.rb"},{"name":"State machine initial state starts in pending state","suite":"Spree::ImportRow at ./spec/models/spree/import_row_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","suiteSourceFile":"core/spec/models/spree/import_row_spec.rb"},{"name":"State machine start_processing event transitions from pending to processing","suite":"Spree::ImportRow at ./spec/models/spree/import_row_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","suiteSourceFile":"core/spec/models/spree/import_row_spec.rb"},{"name":"State machine fail event transitions from processing to failed","suite":"Spree::ImportRow at ./spec/models/spree/import_row_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3:1\"}}","suiteSourceFile":"core/spec/models/spree/import_row_spec.rb"},{"name":"State machine fail event publishes import_row.fail event","suite":"Spree::ImportRow at ./spec/models/spree/import_row_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3:2\"}}","suiteSourceFile":"core/spec/models/spree/import_row_spec.rb"},{"name":"State machine complete event transitions from processing to completed","suite":"Spree::ImportRow at ./spec/models/spree/import_row_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4:1\"}}","suiteSourceFile":"core/spec/models/spree/import_row_spec.rb"},{"name":"State machine complete event publishes import_row.complete event","suite":"Spree::ImportRow at ./spec/models/spree/import_row_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4:2\"}}","suiteSourceFile":"core/spec/models/spree/import_row_spec.rb"},{"name":"Scopes .pending_and_failed returns pending and failed rows","suite":"Spree::ImportRow at ./spec/models/spree/import_row_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1\"}}","suiteSourceFile":"core/spec/models/spree/import_row_spec.rb"},{"name":"Scopes .completed returns only completed rows","suite":"Spree::ImportRow at ./spec/models/spree/import_row_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1\"}}","suiteSourceFile":"core/spec/models/spree/import_row_spec.rb"},{"name":"Scopes .failed returns only failed rows","suite":"Spree::ImportRow at ./spec/models/spree/import_row_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3:1\"}}","suiteSourceFile":"core/spec/models/spree/import_row_spec.rb"},{"name":"Scopes .processed returns completed and failed rows","suite":"Spree::ImportRow at ./spec/models/spree/import_row_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:4:1\"}}","suiteSourceFile":"core/spec/models/spree/import_row_spec.rb"},{"name":"#data_json with valid JSON data returns parsed JSON","suite":"Spree::ImportRow at ./spec/models/spree/import_row_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:1\"}}","suiteSourceFile":"core/spec/models/spree/import_row_spec.rb"},{"name":"#data_json with valid JSON data memoizes the result","suite":"Spree::ImportRow at ./spec/models/spree/import_row_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:2\"}}","suiteSourceFile":"core/spec/models/spree/import_row_spec.rb"},{"name":"#data_json with invalid JSON data returns empty hash","suite":"Spree::ImportRow at ./spec/models/spree/import_row_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1\"}}","suiteSourceFile":"core/spec/models/spree/import_row_spec.rb"},{"name":"#to_schema_hash returns attributes mapped to schema fields","suite":"Spree::ImportRow at ./spec/models/spree/import_row_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","suiteSourceFile":"core/spec/models/spree/import_row_spec.rb"},{"name":"#attribute_by_schema_field returns the mapped attribute value","suite":"Spree::ImportRow at ./spec/models/spree/import_row_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","suiteSourceFile":"core/spec/models/spree/import_row_spec.rb"},{"name":"#process! when processing succeeds transitions to processing then completed","suite":"Spree::ImportRow at ./spec/models/spree/import_row_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1:1\"}}","suiteSourceFile":"core/spec/models/spree/import_row_spec.rb"},{"name":"#process! when processing succeeds sets the item","suite":"Spree::ImportRow at ./spec/models/spree/import_row_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1:2\"}}","suiteSourceFile":"core/spec/models/spree/import_row_spec.rb"},{"name":"#process! when processing fails transitions to failed","suite":"Spree::ImportRow at ./spec/models/spree/import_row_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2:1\"}}","suiteSourceFile":"core/spec/models/spree/import_row_spec.rb"},{"name":"#process! when processing fails sets validation errors","suite":"Spree::ImportRow at ./spec/models/spree/import_row_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2:2\"}}","suiteSourceFile":"core/spec/models/spree/import_row_spec.rb"},{"name":"#process! when processing fails reports the error to Rails.error","suite":"Spree::ImportRow at ./spec/models/spree/import_row_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2:3\"}}","suiteSourceFile":"core/spec/models/spree/import_row_spec.rb"},{"name":"behaves like lifecycle events lifecycle events import.created publishes created event when record is created","suite":"Spree::Import at ./spec/models/spree/import_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/import_spec.rb"},{"name":"behaves like lifecycle events lifecycle events import.updated publishes updated event when record is updated","suite":"Spree::Import at ./spec/models/spree/import_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/import_spec.rb"},{"name":"behaves like lifecycle events lifecycle events import.deleted publishes deleted event when record is deleted","suite":"Spree::Import at ./spec/models/spree/import_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/import_spec.rb"},{"name":"Validations type validation validates type is whitelisted","suite":"Spree::Import at ./spec/models/spree/import_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/import_spec.rb"},{"name":"Validations type validation allows valid types","suite":"Spree::Import at ./spec/models/spree/import_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:2\"}}","suiteSourceFile":"core/spec/models/spree/import_spec.rb"},{"name":"Validations attachment validation validates attachment content type","suite":"Spree::Import at ./spec/models/spree/import_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/import_spec.rb"},{"name":"State machine initial state starts in pending state","suite":"Spree::Import at ./spec/models/spree/import_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","suiteSourceFile":"core/spec/models/spree/import_spec.rb"},{"name":"State machine start_mapping event transitions from pending to mapping","suite":"Spree::Import at ./spec/models/spree/import_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","suiteSourceFile":"core/spec/models/spree/import_spec.rb"},{"name":"State machine start_mapping event creates mappings before transition","suite":"Spree::Import at ./spec/models/spree/import_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:2\"}}","suiteSourceFile":"core/spec/models/spree/import_spec.rb"},{"name":"State machine complete_mapping event transitions from mapping to completed_mapping","suite":"Spree::Import at ./spec/models/spree/import_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3:1\"}}","suiteSourceFile":"core/spec/models/spree/import_spec.rb"},{"name":"State machine complete_mapping event creates rows asynchronously after transition","suite":"Spree::Import at ./spec/models/spree/import_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3:2\"}}","suiteSourceFile":"core/spec/models/spree/import_spec.rb"},{"name":"State machine start_processing event transitions from completed_mapping to processing","suite":"Spree::Import at ./spec/models/spree/import_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4:1\"}}","suiteSourceFile":"core/spec/models/spree/import_spec.rb"},{"name":"State machine complete event transitions from processing to completed","suite":"Spree::Import at ./spec/models/spree/import_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:5:1\"}}","suiteSourceFile":"core/spec/models/spree/import_spec.rb"},{"name":"State machine complete event publishes import.completed event","suite":"Spree::Import at ./spec/models/spree/import_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:5:2\"}}","suiteSourceFile":"core/spec/models/spree/import_spec.rb"},{"name":"#model_class for Products import returns Spree::Product","suite":"Spree::Import at ./spec/models/spree/import_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1\"}}","suiteSourceFile":"core/spec/models/spree/import_spec.rb"},{"name":"#model_class for Customers import returns the user class","suite":"Spree::Import at ./spec/models/spree/import_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1\"}}","suiteSourceFile":"core/spec/models/spree/import_spec.rb"},{"name":"#import_schema returns the correct schema class","suite":"Spree::Import at ./spec/models/spree/import_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","suiteSourceFile":"core/spec/models/spree/import_spec.rb"},{"name":"#display_name returns the correct display name","suite":"Spree::Import at ./spec/models/spree/import_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","suiteSourceFile":"core/spec/models/spree/import_spec.rb"},{"name":"#csv_headers returns the CSV headers","suite":"Spree::Import at ./spec/models/spree/import_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","suiteSourceFile":"core/spec/models/spree/import_spec.rb"},{"name":"#csv_headers with custom delimiter parses headers with custom delimiter","suite":"Spree::Import at ./spec/models/spree/import_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2:1\"}}","suiteSourceFile":"core/spec/models/spree/import_spec.rb"},{"name":"#schema_fields when model supports metafields returns base fields from schema","suite":"Spree::Import at ./spec/models/spree/import_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1:1\"}}","suiteSourceFile":"core/spec/models/spree/import_spec.rb"},{"name":"#schema_fields when model supports metafields includes metafield fields","suite":"Spree::Import at ./spec/models/spree/import_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1:2\"}}","suiteSourceFile":"core/spec/models/spree/import_spec.rb"},{"name":"#schema_fields when model supports metafields combines base fields and metafield fields","suite":"Spree::Import at ./spec/models/spree/import_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1:3\"}}","suiteSourceFile":"core/spec/models/spree/import_spec.rb"},{"name":"#schema_fields when model supports metafields has correct structure for metafield fields","suite":"Spree::Import at ./spec/models/spree/import_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1:4\"}}","suiteSourceFile":"core/spec/models/spree/import_spec.rb"},{"name":"#schema_fields when model does not support metafields returns only base fields from schema","suite":"Spree::Import at ./spec/models/spree/import_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2:1\"}}","suiteSourceFile":"core/spec/models/spree/import_spec.rb"},{"name":"#schema_fields when model does not support metafields does not include any metafield fields","suite":"Spree::Import at ./spec/models/spree/import_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2:2\"}}","suiteSourceFile":"core/spec/models/spree/import_spec.rb"},{"name":"#schema_fields when model supports metafields but has no metafield definitions returns only base fields","suite":"Spree::Import at ./spec/models/spree/import_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:3:1\"}}","suiteSourceFile":"core/spec/models/spree/import_spec.rb"},{"name":"#create_mappings creates mappings for schema fields","suite":"Spree::Import at ./spec/models/spree/import_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1\"}}","suiteSourceFile":"core/spec/models/spree/import_spec.rb"},{"name":"#create_mappings auto-assigns file columns when possible","suite":"Spree::Import at ./spec/models/spree/import_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:2\"}}","suiteSourceFile":"core/spec/models/spree/import_spec.rb"},{"name":"#unmapped_file_columns returns columns that are not mapped","suite":"Spree::Import at ./spec/models/spree/import_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1\"}}","suiteSourceFile":"core/spec/models/spree/import_spec.rb"},{"name":"#mapping_done? when all required fields are mapped returns true","suite":"Spree::Import at ./spec/models/spree/import_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1:1\"}}","suiteSourceFile":"core/spec/models/spree/import_spec.rb"},{"name":"#mapping_done? when not all required fields are mapped returns false","suite":"Spree::Import at ./spec/models/spree/import_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2:1\"}}","suiteSourceFile":"core/spec/models/spree/import_spec.rb"},{"name":"#create_rows_async enqueues CreateRowsJob","suite":"Spree::Import at ./spec/models/spree/import_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:1\"}}","suiteSourceFile":"core/spec/models/spree/import_spec.rb"},{"name":"#process_rows_async enqueues ProcessRowsJob","suite":"Spree::Import at ./spec/models/spree/import_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:1\"}}","suiteSourceFile":"core/spec/models/spree/import_spec.rb"},{"name":"#store when owner is a Store returns the owner","suite":"Spree::Import at ./spec/models/spree/import_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:1:1\"}}","suiteSourceFile":"core/spec/models/spree/import_spec.rb"},{"name":".available_types returns configured import types","suite":"Spree::Import at ./spec/models/spree/import_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:1\"}}","suiteSourceFile":"core/spec/models/spree/import_spec.rb"},{"name":".available_models returns model classes for available types","suite":"Spree::Import at ./spec/models/spree/import_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:1\"}}","suiteSourceFile":"core/spec/models/spree/import_spec.rb"},{"name":".type_for_model returns the import type for a given model","suite":"Spree::Import at ./spec/models/spree/import_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:17:1\"}}","suiteSourceFile":"core/spec/models/spree/import_spec.rb"},{"name":".model_class returns the model class for the import type","suite":"Spree::Import at ./spec/models/spree/import_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:1\"}}","suiteSourceFile":"core/spec/models/spree/import_spec.rb"},{"name":"#event_serializer_class returns the correct event serializer class","suite":"Spree::Import at ./spec/models/spree/import_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:1\"}}","suiteSourceFile":"core/spec/models/spree/import_spec.rb"},{"name":"custom events import.completed publishes import.completed event when completed","suite":"Spree::Import at ./spec/models/spree/import_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:20:1:1\"}}","suiteSourceFile":"core/spec/models/spree/import_spec.rb"},{"name":"example at ./spec/models/spree/integration_spec.rb:7","suite":"Spree::Integration at ./spec/models/spree/integration_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","suiteSourceFile":"core/spec/models/spree/integration_spec.rb"},{"name":"scopes .backordered example at ./spec/models/spree/inventory_unit_spec.rb:14","suite":"Spree::InventoryUnit at ./spec/models/spree/inventory_unit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/inventory_unit_spec.rb"},{"name":"scopes .on_hand example at ./spec/models/spree/inventory_unit_spec.rb:18","suite":"Spree::InventoryUnit at ./spec/models/spree/inventory_unit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/inventory_unit_spec.rb"},{"name":"scopes .on_hand_or_backordered example at ./spec/models/spree/inventory_unit_spec.rb:22","suite":"Spree::InventoryUnit at ./spec/models/spree/inventory_unit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/inventory_unit_spec.rb"},{"name":"scopes .shipped example at ./spec/models/spree/inventory_unit_spec.rb:26","suite":"Spree::InventoryUnit at ./spec/models/spree/inventory_unit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/inventory_unit_spec.rb"},{"name":"scopes .returned example at ./spec/models/spree/inventory_unit_spec.rb:30","suite":"Spree::InventoryUnit at ./spec/models/spree/inventory_unit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5:1\"}}","suiteSourceFile":"core/spec/models/spree/inventory_unit_spec.rb"},{"name":"#backordered_for_stock_item returns modifiable objects","suite":"Spree::InventoryUnit at ./spec/models/spree/inventory_unit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/inventory_unit_spec.rb"},{"name":"#backordered_for_stock_item finds inventory units from its stock location when the unit's variant matches the stock item's variant","suite":"Spree::InventoryUnit at ./spec/models/spree/inventory_unit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","suiteSourceFile":"core/spec/models/spree/inventory_unit_spec.rb"},{"name":"#backordered_for_stock_item does not find inventory units that aren't backordered","suite":"Spree::InventoryUnit at ./spec/models/spree/inventory_unit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3\"}}","suiteSourceFile":"core/spec/models/spree/inventory_unit_spec.rb"},{"name":"#backordered_for_stock_item does not find inventory units that don't match the stock item's variant","suite":"Spree::InventoryUnit at ./spec/models/spree/inventory_unit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:4\"}}","suiteSourceFile":"core/spec/models/spree/inventory_unit_spec.rb"},{"name":"#backordered_for_stock_item does not change shipping cost when fulfilling the order","suite":"Spree::InventoryUnit at ./spec/models/spree/inventory_unit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:5\"}}","suiteSourceFile":"core/spec/models/spree/inventory_unit_spec.rb"},{"name":"#backordered_for_stock_item other shipments does not find inventory units belonging to incomplete orders","suite":"Spree::InventoryUnit at ./spec/models/spree/inventory_unit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:6:1\"}}","suiteSourceFile":"core/spec/models/spree/inventory_unit_spec.rb"},{"name":"#finalize_units! creates a stock movement","suite":"Spree::InventoryUnit at ./spec/models/spree/inventory_unit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/inventory_unit_spec.rb"},{"name":"#current_or_new_return_item associated with a return item returns a persisted return item","suite":"Spree::InventoryUnit at ./spec/models/spree/inventory_unit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1\"}}","suiteSourceFile":"core/spec/models/spree/inventory_unit_spec.rb"},{"name":"#current_or_new_return_item associated with a return item returns it's associated return_item","suite":"Spree::InventoryUnit at ./spec/models/spree/inventory_unit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:2\"}}","suiteSourceFile":"core/spec/models/spree/inventory_unit_spec.rb"},{"name":"#current_or_new_return_item associated with a return item connects return_authorizations","suite":"Spree::InventoryUnit at ./spec/models/spree/inventory_unit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:3\"}}","suiteSourceFile":"core/spec/models/spree/inventory_unit_spec.rb"},{"name":"#current_or_new_return_item no associated return item returns a new return item","suite":"Spree::InventoryUnit at ./spec/models/spree/inventory_unit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1\"}}","suiteSourceFile":"core/spec/models/spree/inventory_unit_spec.rb"},{"name":"#current_or_new_return_item no associated return item associates itself to the new return_item","suite":"Spree::InventoryUnit at ./spec/models/spree/inventory_unit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:2\"}}","suiteSourceFile":"core/spec/models/spree/inventory_unit_spec.rb"},{"name":"#additional_tax_total is the correct amount","suite":"Spree::InventoryUnit at ./spec/models/spree/inventory_unit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","suiteSourceFile":"core/spec/models/spree/inventory_unit_spec.rb"},{"name":"#included_tax_total is the correct amount","suite":"Spree::InventoryUnit at ./spec/models/spree/inventory_unit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","suiteSourceFile":"core/spec/models/spree/inventory_unit_spec.rb"},{"name":"#additional_tax_total is the correct amount","suite":"Spree::InventoryUnit at ./spec/models/spree/inventory_unit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","suiteSourceFile":"core/spec/models/spree/inventory_unit_spec.rb"},{"name":"#included_tax_total is the correct amount","suite":"Spree::InventoryUnit at ./spec/models/spree/inventory_unit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1\"}}","suiteSourceFile":"core/spec/models/spree/inventory_unit_spec.rb"},{"name":"#charged_amount is the correct amount","suite":"Spree::InventoryUnit at ./spec/models/spree/inventory_unit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1\"}}","suiteSourceFile":"core/spec/models/spree/inventory_unit_spec.rb"},{"name":"Validations when invitee is the same as inviter is invalid","suite":"Spree::Invitation at ./spec/models/spree/invitation_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/invitation_spec.rb"},{"name":"Validations when invitation is accepted after expiration is invalid","suite":"Spree::Invitation at ./spec/models/spree/invitation_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/invitation_spec.rb"},{"name":"Validations when invitee already exists in the store is invalid","suite":"Spree::Invitation at ./spec/models/spree/invitation_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/invitation_spec.rb"},{"name":"Callbacks sets defaults on initialization","suite":"Spree::Invitation at ./spec/models/spree/invitation_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/invitation_spec.rb"},{"name":"Callbacks sets invitee from email before validation","suite":"Spree::Invitation at ./spec/models/spree/invitation_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","suiteSourceFile":"core/spec/models/spree/invitation_spec.rb"},{"name":"State Machine has initial state of pending","suite":"Spree::Invitation at ./spec/models/spree/invitation_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/invitation_spec.rb"},{"name":"State Machine when accepting an invitation changes status to accepted","suite":"Spree::Invitation at ./spec/models/spree/invitation_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","suiteSourceFile":"core/spec/models/spree/invitation_spec.rb"},{"name":"State Machine when accepting an invitation sets accepted_at timestamp","suite":"Spree::Invitation at ./spec/models/spree/invitation_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:2\"}}","suiteSourceFile":"core/spec/models/spree/invitation_spec.rb"},{"name":"State Machine when accepting an invitation publishes invitation.accept event","suite":"Spree::Invitation at ./spec/models/spree/invitation_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:3\"}}","suiteSourceFile":"core/spec/models/spree/invitation_spec.rb"},{"name":"State Machine when accepting an invitation creates a resource user","suite":"Spree::Invitation at ./spec/models/spree/invitation_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:4\"}}","suiteSourceFile":"core/spec/models/spree/invitation_spec.rb"},{"name":"#expired? returns true when expires_at is in the past","suite":"Spree::Invitation at ./spec/models/spree/invitation_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/invitation_spec.rb"},{"name":"#expired? returns false when expires_at is in the future","suite":"Spree::Invitation at ./spec/models/spree/invitation_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2\"}}","suiteSourceFile":"core/spec/models/spree/invitation_spec.rb"},{"name":"#resend! publishes invitation.resent event if invitation is pending and not expired","suite":"Spree::Invitation at ./spec/models/spree/invitation_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","suiteSourceFile":"core/spec/models/spree/invitation_spec.rb"},{"name":"#resend! does not publish event if invitation is expired","suite":"Spree::Invitation at ./spec/models/spree/invitation_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2\"}}","suiteSourceFile":"core/spec/models/spree/invitation_spec.rb"},{"name":"#resend! does not publish event if invitation is accepted","suite":"Spree::Invitation at ./spec/models/spree/invitation_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3\"}}","suiteSourceFile":"core/spec/models/spree/invitation_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:4","suite":"Spree::LineItem at ./spec/models/spree/line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/line_item_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:5","suite":"Spree::LineItem at ./spec/models/spree/line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/line_item_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:7","suite":"Spree::LineItem at ./spec/models/spree/line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/models/spree/line_item_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:8","suite":"Spree::LineItem at ./spec/models/spree/line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","suiteSourceFile":"core/spec/models/spree/line_item_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:10","suite":"Spree::LineItem at ./spec/models/spree/line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","suiteSourceFile":"core/spec/models/spree/line_item_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:11","suite":"Spree::LineItem at ./spec/models/spree/line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","suiteSourceFile":"core/spec/models/spree/line_item_spec.rb"},{"name":"behaves like metadata reads data as symbolized keys","suite":"Spree::LineItem at ./spec/models/spree/line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7\"}}","suiteSourceFile":"core/spec/models/spree/line_item_spec.rb"},{"name":"behaves like metadata reads data as not symbolized keys","suite":"Spree::LineItem at ./spec/models/spree/line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8\"}}","suiteSourceFile":"core/spec/models/spree/line_item_spec.rb"},{"name":"behaves like metadata can query records by metadata properties","suite":"Spree::LineItem at ./spec/models/spree/line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:10\"}}","suiteSourceFile":"core/spec/models/spree/line_item_spec.rb"},{"name":"behaves like lifecycle events lifecycle events line_item.created publishes created event when record is created","suite":"Spree::LineItem at ./spec/models/spree/line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/line_item_spec.rb"},{"name":"behaves like lifecycle events lifecycle events line_item.updated publishes updated event when record is updated","suite":"Spree::LineItem at ./spec/models/spree/line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/line_item_spec.rb"},{"name":"behaves like lifecycle events lifecycle events line_item.deleted publishes deleted event when record is deleted","suite":"Spree::LineItem at ./spec/models/spree/line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/line_item_spec.rb"},{"name":"Validations ensure_proper_currency order is present when line_item's currency matches with order's example at ./spec/models/spree/line_item_spec.rb:15","suite":"Spree::LineItem at ./spec/models/spree/line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/line_item_spec.rb"},{"name":"Validations ensure_proper_currency order is present when line_item's currency does not matches with order's example at ./spec/models/spree/line_item_spec.rb:23","suite":"Spree::LineItem at ./spec/models/spree/line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/line_item_spec.rb"},{"name":"#quantity has a default quantity of 1","suite":"Spree::LineItem at ./spec/models/spree/line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/line_item_spec.rb"},{"name":"#quantity allows to set different value for quantity","suite":"Spree::LineItem at ./spec/models/spree/line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2\"}}","suiteSourceFile":"core/spec/models/spree/line_item_spec.rb"},{"name":"#ensure_valid_quantity quantity.nil? example at ./spec/models/spree/line_item_spec.rb:48","suite":"Spree::LineItem at ./spec/models/spree/line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:1\"}}","suiteSourceFile":"core/spec/models/spree/line_item_spec.rb"},{"name":"#ensure_valid_quantity quantity < 0 example at ./spec/models/spree/line_item_spec.rb:57","suite":"Spree::LineItem at ./spec/models/spree/line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1\"}}","suiteSourceFile":"core/spec/models/spree/line_item_spec.rb"},{"name":"#ensure_valid_quantity quantity = 0 example at ./spec/models/spree/line_item_spec.rb:66","suite":"Spree::LineItem at ./spec/models/spree/line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3:1\"}}","suiteSourceFile":"core/spec/models/spree/line_item_spec.rb"},{"name":"#ensure_valid_quantity quantity > 0 example at ./spec/models/spree/line_item_spec.rb:77","suite":"Spree::LineItem at ./spec/models/spree/line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:4:1\"}}","suiteSourceFile":"core/spec/models/spree/line_item_spec.rb"},{"name":"#save touches the order","suite":"Spree::LineItem at ./spec/models/spree/line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","suiteSourceFile":"core/spec/models/spree/line_item_spec.rb"},{"name":"#discontinued fetches discontinued products","suite":"Spree::LineItem at ./spec/models/spree/line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","suiteSourceFile":"core/spec/models/spree/line_item_spec.rb"},{"name":"#discontinued fetches discontinued variants","suite":"Spree::LineItem at ./spec/models/spree/line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2\"}}","suiteSourceFile":"core/spec/models/spree/line_item_spec.rb"},{"name":"#destroy deletes inventory units","suite":"Spree::LineItem at ./spec/models/spree/line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1\"}}","suiteSourceFile":"core/spec/models/spree/line_item_spec.rb"},{"name":"#save line item changes triggers adjustment total recalculation","suite":"Spree::LineItem at ./spec/models/spree/line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1:1\"}}","suiteSourceFile":"core/spec/models/spree/line_item_spec.rb"},{"name":"#save line item does not change does not trigger adjustment total recalculation","suite":"Spree::LineItem at ./spec/models/spree/line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:2:1\"}}","suiteSourceFile":"core/spec/models/spree/line_item_spec.rb"},{"name":"#save target_shipment is provided verifies inventory","suite":"Spree::LineItem at ./spec/models/spree/line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:3:1\"}}","suiteSourceFile":"core/spec/models/spree/line_item_spec.rb"},{"name":"#create when order has a tax zone creates a tax adjustment","suite":"Spree::LineItem at ./spec/models/spree/line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1:1\"}}","suiteSourceFile":"core/spec/models/spree/line_item_spec.rb"},{"name":"#create when order does not have a tax zone does not create a tax adjustment","suite":"Spree::LineItem at ./spec/models/spree/line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:2:1\"}}","suiteSourceFile":"core/spec/models/spree/line_item_spec.rb"},{"name":"#copy_price copies over a variant's prices","suite":"Spree::LineItem at ./spec/models/spree/line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1\"}}","suiteSourceFile":"core/spec/models/spree/line_item_spec.rb"},{"name":"#copy_price variant price amount is equal 0 copies over a variant's price","suite":"Spree::LineItem at ./spec/models/spree/line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2:1\"}}","suiteSourceFile":"core/spec/models/spree/line_item_spec.rb"},{"name":"#copy_price variant price amount is equal 0 should be valid","suite":"Spree::LineItem at ./spec/models/spree/line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2:2\"}}","suiteSourceFile":"core/spec/models/spree/line_item_spec.rb"},{"name":"#copy_price no price available in the selected currency doesn't copy the price","suite":"Spree::LineItem at ./spec/models/spree/line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:3:1\"}}","suiteSourceFile":"core/spec/models/spree/line_item_spec.rb"},{"name":"#copy_price no price available in the selected currency shouldn't be valid","suite":"Spree::LineItem at ./spec/models/spree/line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:3:2\"}}","suiteSourceFile":"core/spec/models/spree/line_item_spec.rb"},{"name":"#update_price copies over a variants differing price for another vat zone","suite":"Spree::LineItem at ./spec/models/spree/line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:1\"}}","suiteSourceFile":"core/spec/models/spree/line_item_spec.rb"},{"name":"#copy_tax_category copies over a variant's tax category","suite":"Spree::LineItem at ./spec/models/spree/line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:1\"}}","suiteSourceFile":"core/spec/models/spree/line_item_spec.rb"},{"name":"#discounted_amount returns the amount minus any discounts","suite":"Spree::LineItem at ./spec/models/spree/line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:1\"}}","suiteSourceFile":"core/spec/models/spree/line_item_spec.rb"},{"name":".currency returns the globally configured currency","suite":"Spree::LineItem at ./spec/models/spree/line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:1\"}}","suiteSourceFile":"core/spec/models/spree/line_item_spec.rb"},{"name":"#discounted_money returns a money object with the discounted amount","suite":"Spree::LineItem at ./spec/models/spree/line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:1\"}}","suiteSourceFile":"core/spec/models/spree/line_item_spec.rb"},{"name":"#money returns a Spree::Money representing the total for this line item","suite":"Spree::LineItem at ./spec/models/spree/line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:17:1\"}}","suiteSourceFile":"core/spec/models/spree/line_item_spec.rb"},{"name":"#single_money returns a Spree::Money representing the price for one variant","suite":"Spree::LineItem at ./spec/models/spree/line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:1\"}}","suiteSourceFile":"core/spec/models/spree/line_item_spec.rb"},{"name":"has inventory (completed order so items were already unstocked) nothing left on stock allows to decrease item quantity","suite":"Spree::LineItem at ./spec/models/spree/line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:1:1\"}}","suiteSourceFile":"core/spec/models/spree/line_item_spec.rb"},{"name":"has inventory (completed order so items were already unstocked) nothing left on stock doesnt allow to increase item quantity","suite":"Spree::LineItem at ./spec/models/spree/line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:1:2\"}}","suiteSourceFile":"core/spec/models/spree/line_item_spec.rb"},{"name":"has inventory (completed order so items were already unstocked) 2 items left on stock allows to increase quantity up to stock availability","suite":"Spree::LineItem at ./spec/models/spree/line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:2:1\"}}","suiteSourceFile":"core/spec/models/spree/line_item_spec.rb"},{"name":"has inventory (completed order so items were already unstocked) 2 items left on stock doesnt allow to increase quantity over stock availability","suite":"Spree::LineItem at ./spec/models/spree/line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:2:2\"}}","suiteSourceFile":"core/spec/models/spree/line_item_spec.rb"},{"name":"currency same as order.currency is a valid line item","suite":"Spree::LineItem at ./spec/models/spree/line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:20:1\"}}","suiteSourceFile":"core/spec/models/spree/line_item_spec.rb"},{"name":"currency different than order.currency is not a valid line item","suite":"Spree::LineItem at ./spec/models/spree/line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:21:1\"}}","suiteSourceFile":"core/spec/models/spree/line_item_spec.rb"},{"name":"#options= can handle updating a blank line item with no order","suite":"Spree::LineItem at ./spec/models/spree/line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:22:1\"}}","suiteSourceFile":"core/spec/models/spree/line_item_spec.rb"},{"name":"#options= updates the data provided in the options","suite":"Spree::LineItem at ./spec/models/spree/line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:22:2\"}}","suiteSourceFile":"core/spec/models/spree/line_item_spec.rb"},{"name":"#options= updates the price based on the options provided","suite":"Spree::LineItem at ./spec/models/spree/line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:22:3\"}}","suiteSourceFile":"core/spec/models/spree/line_item_spec.rb"},{"name":"precision of pre_tax_amount keeps four digits of precision even when reloading","suite":"Spree::LineItem at ./spec/models/spree/line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:23:1\"}}","suiteSourceFile":"core/spec/models/spree/line_item_spec.rb"},{"name":"#update_price_from_modifier with specified currency sets currency","suite":"Spree::LineItem at ./spec/models/spree/line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:24:1:1\"}}","suiteSourceFile":"core/spec/models/spree/line_item_spec.rb"},{"name":"#update_price_from_modifier with specified currency variant with price in this currency sets the proper price","suite":"Spree::LineItem at ./spec/models/spree/line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:24:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/line_item_spec.rb"},{"name":"#update_price_from_modifier with specified currency variant without price in this currency sets the proper price","suite":"Spree::LineItem at ./spec/models/spree/line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:24:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/line_item_spec.rb"},{"name":"#update_price_from_modifier without currency sets the proper price","suite":"Spree::LineItem at ./spec/models/spree/line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:24:2:1\"}}","suiteSourceFile":"core/spec/models/spree/line_item_spec.rb"},{"name":"#shipments returns the shipments for the line item","suite":"Spree::LineItem at ./spec/models/spree/line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:25:1\"}}","suiteSourceFile":"core/spec/models/spree/line_item_spec.rb"},{"name":"#shipping_cost returns the shipping cost for the line item","suite":"Spree::LineItem at ./spec/models/spree/line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:26:1\"}}","suiteSourceFile":"core/spec/models/spree/line_item_spec.rb"},{"name":"#shipping_cost when the shipment is canceled returns 0","suite":"Spree::LineItem at ./spec/models/spree/line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:26:2:1\"}}","suiteSourceFile":"core/spec/models/spree/line_item_spec.rb"},{"name":"#shipping_cost when the shipment is not present returns 0","suite":"Spree::LineItem at ./spec/models/spree/line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:26:3:1\"}}","suiteSourceFile":"core/spec/models/spree/line_item_spec.rb"},{"name":"#shipping_cost when the shipment cost is 0 returns 0","suite":"Spree::LineItem at ./spec/models/spree/line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:26:4:1\"}}","suiteSourceFile":"core/spec/models/spree/line_item_spec.rb"},{"name":"#amount returns the amount for the line item","suite":"Spree::LineItem at ./spec/models/spree/line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:27:1\"}}","suiteSourceFile":"core/spec/models/spree/line_item_spec.rb"},{"name":"#display_amount returns the amount for the line item","suite":"Spree::LineItem at ./spec/models/spree/line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:28:1\"}}","suiteSourceFile":"core/spec/models/spree/line_item_spec.rb"},{"name":"#compare_at_amount returns the compare at amount for the line item","suite":"Spree::LineItem at ./spec/models/spree/line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:1\"}}","suiteSourceFile":"core/spec/models/spree/line_item_spec.rb"},{"name":"#compare_at_amount when compare_at_price is nil returns zero","suite":"Spree::LineItem at ./spec/models/spree/line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:2:1\"}}","suiteSourceFile":"core/spec/models/spree/line_item_spec.rb"},{"name":"#compare_at_amount when compare_at_price is zero returns zero","suite":"Spree::LineItem at ./spec/models/spree/line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:3:1\"}}","suiteSourceFile":"core/spec/models/spree/line_item_spec.rb"},{"name":"#display_compare_at_amount returns the compare at amount for the line item","suite":"Spree::LineItem at ./spec/models/spree/line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:30:1\"}}","suiteSourceFile":"core/spec/models/spree/line_item_spec.rb"},{"name":"#item_weight returns the weight for the line item","suite":"Spree::LineItem at ./spec/models/spree/line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:31:1\"}}","suiteSourceFile":"core/spec/models/spree/line_item_spec.rb"},{"name":"#dimensions_unit returns the dimension unit for the line item","suite":"Spree::LineItem at ./spec/models/spree/line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:32:1\"}}","suiteSourceFile":"core/spec/models/spree/line_item_spec.rb"},{"name":"#weight_unit returns the weight unit for the line item","suite":"Spree::LineItem at ./spec/models/spree/line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:33:1\"}}","suiteSourceFile":"core/spec/models/spree/line_item_spec.rb"},{"name":"#should_update_price? when order is not completed returns true","suite":"Spree::LineItem at ./spec/models/spree/line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:34:1:1\"}}","suiteSourceFile":"core/spec/models/spree/line_item_spec.rb"},{"name":"#should_update_price? when order is completed returns false","suite":"Spree::LineItem at ./spec/models/spree/line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:34:2:1\"}}","suiteSourceFile":"core/spec/models/spree/line_item_spec.rb"},{"name":"#recalculate_price with volume-based pricing updates price when quantity increases to meet volume threshold","suite":"Spree::LineItem at ./spec/models/spree/line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:35:1:1\"}}","suiteSourceFile":"core/spec/models/spree/line_item_spec.rb"},{"name":"#recalculate_price with volume-based pricing reverts to base price when quantity decreases below volume threshold","suite":"Spree::LineItem at ./spec/models/spree/line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:35:1:2\"}}","suiteSourceFile":"core/spec/models/spree/line_item_spec.rb"},{"name":"#recalculate_price with volume-based pricing when order is completed does not update price when quantity changes","suite":"Spree::LineItem at ./spec/models/spree/line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:35:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/line_item_spec.rb"},{"name":"#recalculate_price without volume-based pricing does not change price when quantity changes","suite":"Spree::LineItem at ./spec/models/spree/line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:35:2:1\"}}","suiteSourceFile":"core/spec/models/spree/line_item_spec.rb"},{"name":"#recalculate_price when creating line item with quantity meeting volume threshold applies volume price on initial creation","suite":"Spree::LineItem at ./spec/models/spree/line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:35:3:1\"}}","suiteSourceFile":"core/spec/models/spree/line_item_spec.rb"},{"name":"#recalculate_price when creating line item with quantity meeting volume threshold does not apply volume price when quantity is below threshold","suite":"Spree::LineItem at ./spec/models/spree/line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:35:3:2\"}}","suiteSourceFile":"core/spec/models/spree/line_item_spec.rb"},{"name":"#discounted_price returns the discounted price for the line item","suite":"Spree::LineItem at ./spec/models/spree/line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:36:1\"}}","suiteSourceFile":"core/spec/models/spree/line_item_spec.rb"},{"name":"#discounted_price when line item promo_total is zero returns the price for the line item","suite":"Spree::LineItem at ./spec/models/spree/line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:36:2:1\"}}","suiteSourceFile":"core/spec/models/spree/line_item_spec.rb"},{"name":"#discounted_price when quantity is zero returns the price for the line item","suite":"Spree::LineItem at ./spec/models/spree/line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:36:3:1\"}}","suiteSourceFile":"core/spec/models/spree/line_item_spec.rb"},{"name":"#parsed_details deserializes log entry with billing response","suite":"Spree::LogEntry at ./spec/models/spree/log_entry_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/log_entry_spec.rb"},{"name":"scopes .available returns only both definitions (from DisplayOn concern)","suite":"Spree::MetafieldDefinition at ./spec/models/spree/metafield_definition_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/metafield_definition_spec.rb"},{"name":"scopes .available_on_front_end returns public definitions (front_end and both)","suite":"Spree::MetafieldDefinition at ./spec/models/spree/metafield_definition_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/metafield_definition_spec.rb"},{"name":"scopes .available_on_back_end returns admin definitions (back_end and both)","suite":"Spree::MetafieldDefinition at ./spec/models/spree/metafield_definition_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/metafield_definition_spec.rb"},{"name":"scopes .for_resource_type returns definitions for specific resource type","suite":"Spree::MetafieldDefinition at ./spec/models/spree/metafield_definition_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/metafield_definition_spec.rb"},{"name":"#csv_header_name returns the CSV header name with metafield prefix","suite":"Spree::MetafieldDefinition at ./spec/models/spree/metafield_definition_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/metafield_definition_spec.rb"},{"name":"#full_key returns the full key with namespace","suite":"Spree::MetafieldDefinition at ./spec/models/spree/metafield_definition_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/metafield_definition_spec.rb"},{"name":"Callbacks sets the type from the metafield definition","suite":"Spree::Metafield at ./spec/models/spree/metafield_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/metafield_spec.rb"},{"name":"Validations validates the type must match the metafield definition","suite":"Spree::Metafield at ./spec/models/spree/metafield_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/metafield_spec.rb"},{"name":"Scopes .with_key returns the metafields with the given key","suite":"Spree::Metafield at ./spec/models/spree/metafield_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","suiteSourceFile":"core/spec/models/spree/metafield_spec.rb"},{"name":"#serialize_value returns the value","suite":"Spree::Metafield at ./spec/models/spree/metafield_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/metafield_spec.rb"},{"name":"#csv_value for base Metafield returns the value as string","suite":"Spree::Metafield at ./spec/models/spree/metafield_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:1\"}}","suiteSourceFile":"core/spec/models/spree/metafield_spec.rb"},{"name":"#csv_value for Boolean metafield returns Yes for true values","suite":"Spree::Metafield at ./spec/models/spree/metafield_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1\"}}","suiteSourceFile":"core/spec/models/spree/metafield_spec.rb"},{"name":"#csv_value for Boolean metafield returns No for false values","suite":"Spree::Metafield at ./spec/models/spree/metafield_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:2\"}}","suiteSourceFile":"core/spec/models/spree/metafield_spec.rb"},{"name":"#csv_value for Number metafield returns the number as string","suite":"Spree::Metafield at ./spec/models/spree/metafield_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3:1\"}}","suiteSourceFile":"core/spec/models/spree/metafield_spec.rb"},{"name":"#csv_value for Json metafield returns the JSON string","suite":"Spree::Metafield at ./spec/models/spree/metafield_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:4:1\"}}","suiteSourceFile":"core/spec/models/spree/metafield_spec.rb"},{"name":"#csv_value for ShortText metafield returns the text value","suite":"Spree::Metafield at ./spec/models/spree/metafield_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:5:1\"}}","suiteSourceFile":"core/spec/models/spree/metafield_spec.rb"},{"name":"#csv_value for LongText metafield returns the text value","suite":"Spree::Metafield at ./spec/models/spree/metafield_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:6:1\"}}","suiteSourceFile":"core/spec/models/spree/metafield_spec.rb"},{"name":"#csv_value for RichText metafield returns plain text without HTML tags","suite":"Spree::Metafield at ./spec/models/spree/metafield_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:7:1\"}}","suiteSourceFile":"core/spec/models/spree/metafield_spec.rb"},{"name":"normalizes normalizes the boolean value","suite":"Spree::Metafields::Boolean at ./spec/models/spree/metafields/boolean_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/metafields/boolean_spec.rb"},{"name":"#serialize_value returns the boolean value","suite":"Spree::Metafields::Boolean at ./spec/models/spree/metafields/boolean_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/metafields/boolean_spec.rb"},{"name":"#csv_value returns the boolean value","suite":"Spree::Metafields::Boolean at ./spec/models/spree/metafields/boolean_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/metafields/boolean_spec.rb"},{"name":"Validations returns false if the value is not valid JSON","suite":"Spree::Metafields::Json at ./spec/models/spree/metafields/json_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/metafields/json_spec.rb"},{"name":"Validations returns true for valid JSON object","suite":"Spree::Metafields::Json at ./spec/models/spree/metafields/json_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/metafields/json_spec.rb"},{"name":"Validations returns true for valid JSON array","suite":"Spree::Metafields::Json at ./spec/models/spree/metafields/json_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/models/spree/metafields/json_spec.rb"},{"name":"Validations returns true for valid JSON string","suite":"Spree::Metafields::Json at ./spec/models/spree/metafields/json_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","suiteSourceFile":"core/spec/models/spree/metafields/json_spec.rb"},{"name":"Validations returns true for valid JSON number","suite":"Spree::Metafields::Json at ./spec/models/spree/metafields/json_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","suiteSourceFile":"core/spec/models/spree/metafields/json_spec.rb"},{"name":"Validations returns true for valid JSON boolean","suite":"Spree::Metafields::Json at ./spec/models/spree/metafields/json_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","suiteSourceFile":"core/spec/models/spree/metafields/json_spec.rb"},{"name":"Validations returns true for valid JSON null","suite":"Spree::Metafields::Json at ./spec/models/spree/metafields/json_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7\"}}","suiteSourceFile":"core/spec/models/spree/metafields/json_spec.rb"},{"name":"#serialize_value returns parsed JSON object","suite":"Spree::Metafields::Json at ./spec/models/spree/metafields/json_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/metafields/json_spec.rb"},{"name":"#serialize_value returns parsed JSON array","suite":"Spree::Metafields::Json at ./spec/models/spree/metafields/json_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","suiteSourceFile":"core/spec/models/spree/metafields/json_spec.rb"},{"name":"#serialize_value returns original value if parsing fails","suite":"Spree::Metafields::Json at ./spec/models/spree/metafields/json_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3\"}}","suiteSourceFile":"core/spec/models/spree/metafields/json_spec.rb"},{"name":"Validations returns false if the value is not a number","suite":"Spree::Metafields::Number at ./spec/models/spree/metafields/number_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/metafields/number_spec.rb"},{"name":"#serialize_value returns the number","suite":"Spree::Metafields::Number at ./spec/models/spree/metafields/number_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/metafields/number_spec.rb"},{"name":"#csv_value returns the number as a string","suite":"Spree::Metafields::Number at ./spec/models/spree/metafields/number_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/metafields/number_spec.rb"},{"name":"#value returns the rich text body","suite":"Spree::Metafields::RichText at ./spec/models/spree/metafields/rich_text_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/metafields/rich_text_spec.rb"},{"name":"#serialize_value returns the rich text body","suite":"Spree::Metafields::RichText at ./spec/models/spree/metafields/rich_text_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/metafields/rich_text_spec.rb"},{"name":"behaves like lifecycle events lifecycle events newsletter_subscriber.created publishes created event when record is created","suite":"Spree::NewsletterSubscriber at ./spec/models/spree/newsletter_subscriber_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/newsletter_subscriber_spec.rb"},{"name":"behaves like lifecycle events lifecycle events newsletter_subscriber.updated publishes updated event when record is updated","suite":"Spree::NewsletterSubscriber at ./spec/models/spree/newsletter_subscriber_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/newsletter_subscriber_spec.rb"},{"name":"behaves like lifecycle events lifecycle events newsletter_subscriber.deleted publishes deleted event when record is deleted","suite":"Spree::NewsletterSubscriber at ./spec/models/spree/newsletter_subscriber_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/newsletter_subscriber_spec.rb"},{"name":"normalizations example at ./spec/models/spree/newsletter_subscriber_spec.rb:11","suite":"Spree::NewsletterSubscriber at ./spec/models/spree/newsletter_subscriber_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/newsletter_subscriber_spec.rb"},{"name":"normalizations example at ./spec/models/spree/newsletter_subscriber_spec.rb:12","suite":"Spree::NewsletterSubscriber at ./spec/models/spree/newsletter_subscriber_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","suiteSourceFile":"core/spec/models/spree/newsletter_subscriber_spec.rb"},{"name":"normalizations example at ./spec/models/spree/newsletter_subscriber_spec.rb:13","suite":"Spree::NewsletterSubscriber at ./spec/models/spree/newsletter_subscriber_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3\"}}","suiteSourceFile":"core/spec/models/spree/newsletter_subscriber_spec.rb"},{"name":"validations example at ./spec/models/spree/newsletter_subscriber_spec.rb:17","suite":"Spree::NewsletterSubscriber at ./spec/models/spree/newsletter_subscriber_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/newsletter_subscriber_spec.rb"},{"name":"validations example at ./spec/models/spree/newsletter_subscriber_spec.rb:18","suite":"Spree::NewsletterSubscriber at ./spec/models/spree/newsletter_subscriber_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","suiteSourceFile":"core/spec/models/spree/newsletter_subscriber_spec.rb"},{"name":"validations example at ./spec/models/spree/newsletter_subscriber_spec.rb:19","suite":"Spree::NewsletterSubscriber at ./spec/models/spree/newsletter_subscriber_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3\"}}","suiteSourceFile":"core/spec/models/spree/newsletter_subscriber_spec.rb"},{"name":"validations example at ./spec/models/spree/newsletter_subscriber_spec.rb:20","suite":"Spree::NewsletterSubscriber at ./spec/models/spree/newsletter_subscriber_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4\"}}","suiteSourceFile":"core/spec/models/spree/newsletter_subscriber_spec.rb"},{"name":"scopes verified returns verified subscribers only","suite":"Spree::NewsletterSubscriber at ./spec/models/spree/newsletter_subscriber_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1\"}}","suiteSourceFile":"core/spec/models/spree/newsletter_subscriber_spec.rb"},{"name":"scopes unverified returns unverified subscribers only","suite":"Spree::NewsletterSubscriber at ./spec/models/spree/newsletter_subscriber_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1\"}}","suiteSourceFile":"core/spec/models/spree/newsletter_subscriber_spec.rb"},{"name":"subscribe with user calls subscribe service","suite":"Spree::NewsletterSubscriber at ./spec/models/spree/newsletter_subscriber_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:1\"}}","suiteSourceFile":"core/spec/models/spree/newsletter_subscriber_spec.rb"},{"name":"subscribe without user calls subscribe service","suite":"Spree::NewsletterSubscriber at ./spec/models/spree/newsletter_subscriber_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1\"}}","suiteSourceFile":"core/spec/models/spree/newsletter_subscriber_spec.rb"},{"name":"verify when subscriber is found calls verify service","suite":"Spree::NewsletterSubscriber at ./spec/models/spree/newsletter_subscriber_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1:1\"}}","suiteSourceFile":"core/spec/models/spree/newsletter_subscriber_spec.rb"},{"name":"verify when subscriber is not found returns ActiveRecord::RecordNotFound","suite":"Spree::NewsletterSubscriber at ./spec/models/spree/newsletter_subscriber_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2:1\"}}","suiteSourceFile":"core/spec/models/spree/newsletter_subscriber_spec.rb"},{"name":"verified? when email is not verified example at ./spec/models/spree/newsletter_subscriber_spec.rb:108","suite":"Spree::NewsletterSubscriber at ./spec/models/spree/newsletter_subscriber_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1:1\"}}","suiteSourceFile":"core/spec/models/spree/newsletter_subscriber_spec.rb"},{"name":"verified? when email is verified example at ./spec/models/spree/newsletter_subscriber_spec.rb:114","suite":"Spree::NewsletterSubscriber at ./spec/models/spree/newsletter_subscriber_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2:1\"}}","suiteSourceFile":"core/spec/models/spree/newsletter_subscriber_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:4","suite":"Spree::OptionType at ./spec/models/spree/option_type_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/option_type_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:5","suite":"Spree::OptionType at ./spec/models/spree/option_type_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/option_type_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:7","suite":"Spree::OptionType at ./spec/models/spree/option_type_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/models/spree/option_type_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:8","suite":"Spree::OptionType at ./spec/models/spree/option_type_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","suiteSourceFile":"core/spec/models/spree/option_type_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:10","suite":"Spree::OptionType at ./spec/models/spree/option_type_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","suiteSourceFile":"core/spec/models/spree/option_type_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:11","suite":"Spree::OptionType at ./spec/models/spree/option_type_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","suiteSourceFile":"core/spec/models/spree/option_type_spec.rb"},{"name":"behaves like metadata reads data as symbolized keys","suite":"Spree::OptionType at ./spec/models/spree/option_type_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7\"}}","suiteSourceFile":"core/spec/models/spree/option_type_spec.rb"},{"name":"behaves like metadata reads data as not symbolized keys","suite":"Spree::OptionType at ./spec/models/spree/option_type_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8\"}}","suiteSourceFile":"core/spec/models/spree/option_type_spec.rb"},{"name":"behaves like metadata can query records by metadata properties","suite":"Spree::OptionType at ./spec/models/spree/option_type_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:10\"}}","suiteSourceFile":"core/spec/models/spree/option_type_spec.rb"},{"name":"#filterable example at ./spec/models/spree/option_type_spec.rb:7","suite":"Spree::OptionType at ./spec/models/spree/option_type_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/option_type_spec.rb"},{"name":"callbacks #normalize_name should parameterize the name","suite":"Spree::OptionType at ./spec/models/spree/option_type_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","suiteSourceFile":"core/spec/models/spree/option_type_spec.rb"},{"name":"translations translates option type fields","suite":"Spree::OptionType at ./spec/models/spree/option_type_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/option_type_spec.rb"},{"name":"translations with always_use_translations enabled creates option type with normalized presentation without NotNullViolation","suite":"Spree::OptionType at ./spec/models/spree/option_type_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1\"}}","suiteSourceFile":"core/spec/models/spree/option_type_spec.rb"},{"name":"translations with always_use_translations enabled normalizes translated presentations across locales","suite":"Spree::OptionType at ./spec/models/spree/option_type_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:2\"}}","suiteSourceFile":"core/spec/models/spree/option_type_spec.rb"},{"name":"color methods .color should return the first option type with name \"color\"","suite":"Spree::OptionType at ./spec/models/spree/option_type_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:1\"}}","suiteSourceFile":"core/spec/models/spree/option_type_spec.rb"},{"name":"color methods #color? should return true if the name is \"color\" or \"colour\"","suite":"Spree::OptionType at ./spec/models/spree/option_type_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1\"}}","suiteSourceFile":"core/spec/models/spree/option_type_spec.rb"},{"name":"color methods #color? should return false if the name is not \"color\" or \"colour\"","suite":"Spree::OptionType at ./spec/models/spree/option_type_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:2\"}}","suiteSourceFile":"core/spec/models/spree/option_type_spec.rb"},{"name":"touching touches a product on touch","suite":"Spree::OptionType at ./spec/models/spree/option_type_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","suiteSourceFile":"core/spec/models/spree/option_type_spec.rb"},{"name":"touching touches a product on update","suite":"Spree::OptionType at ./spec/models/spree/option_type_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2\"}}","suiteSourceFile":"core/spec/models/spree/option_type_spec.rb"},{"name":"#filter_param returns filtered name param","suite":"Spree::OptionType at ./spec/models/spree/option_type_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","suiteSourceFile":"core/spec/models/spree/option_type_spec.rb"},{"name":"#self.color finds color option type","suite":"Spree::OptionType at ./spec/models/spree/option_type_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1\"}}","suiteSourceFile":"core/spec/models/spree/option_type_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:4","suite":"Spree::OptionValue at ./spec/models/spree/option_value_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/option_value_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:5","suite":"Spree::OptionValue at ./spec/models/spree/option_value_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/option_value_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:7","suite":"Spree::OptionValue at ./spec/models/spree/option_value_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/models/spree/option_value_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:8","suite":"Spree::OptionValue at ./spec/models/spree/option_value_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","suiteSourceFile":"core/spec/models/spree/option_value_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:10","suite":"Spree::OptionValue at ./spec/models/spree/option_value_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","suiteSourceFile":"core/spec/models/spree/option_value_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:11","suite":"Spree::OptionValue at ./spec/models/spree/option_value_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","suiteSourceFile":"core/spec/models/spree/option_value_spec.rb"},{"name":"behaves like metadata reads data as symbolized keys","suite":"Spree::OptionValue at ./spec/models/spree/option_value_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7\"}}","suiteSourceFile":"core/spec/models/spree/option_value_spec.rb"},{"name":"behaves like metadata reads data as not symbolized keys","suite":"Spree::OptionValue at ./spec/models/spree/option_value_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8\"}}","suiteSourceFile":"core/spec/models/spree/option_value_spec.rb"},{"name":"behaves like metadata can query records by metadata properties","suite":"Spree::OptionValue at ./spec/models/spree/option_value_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:10\"}}","suiteSourceFile":"core/spec/models/spree/option_value_spec.rb"},{"name":"callbacks #normalize_name should parameterize the name","suite":"Spree::OptionValue at ./spec/models/spree/option_value_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/option_value_spec.rb"},{"name":"callbacks #touch_all_variants touches all variants associated with the option value","suite":"Spree::OptionValue at ./spec/models/spree/option_value_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/option_value_spec.rb"},{"name":"callbacks #touch_all_products touches all products associated with the option value","suite":"Spree::OptionValue at ./spec/models/spree/option_value_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:1\"}}","suiteSourceFile":"core/spec/models/spree/option_value_spec.rb"},{"name":"#display_presentation returns the presentation with the option type presentation","suite":"Spree::OptionValue at ./spec/models/spree/option_value_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/option_value_spec.rb"},{"name":".to_tom_select_json returns the option values in the correct format","suite":"Spree::OptionValue at ./spec/models/spree/option_value_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/option_value_spec.rb"},{"name":"translations translates option value fields","suite":"Spree::OptionValue at ./spec/models/spree/option_value_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","suiteSourceFile":"core/spec/models/spree/option_value_spec.rb"},{"name":"touching touches a variant","suite":"Spree::OptionValueVariant at ./spec/models/spree/option_value_variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/option_value_variant_spec.rb"},{"name":"validation when @use_billing is populated with true clones the bill address to the ship address","suite":"Spree::Order at ./spec/models/spree/order/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order/address_spec.rb"},{"name":"validation when @use_billing is populated with 'true' clones the bill address to the shipping","suite":"Spree::Order at ./spec/models/spree/order/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order/address_spec.rb"},{"name":"validation when @use_billing is populated with '1' clones the bill address to the shipping","suite":"Spree::Order at ./spec/models/spree/order/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/order/address_spec.rb"},{"name":"validation when @use_billing is populated with something other than a 'truthful' value does not clone the bill address to the shipping","suite":"Spree::Order at ./spec/models/spree/order/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/order/address_spec.rb"},{"name":"address book mass attribute assignment for bill_address_id, ship_address_id is able to mass assign bill_address_id","suite":"Spree::Order at ./spec/models/spree/order/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order/address_spec.rb"},{"name":"address book mass attribute assignment for bill_address_id, ship_address_id is able to mass assign ship_address_id","suite":"Spree::Order at ./spec/models/spree/order/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:2\"}}","suiteSourceFile":"core/spec/models/spree/order/address_spec.rb"},{"name":"address book Create order with the same bill & ship addresses has equal ids when set ids","suite":"Spree::Order at ./spec/models/spree/order/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order/address_spec.rb"},{"name":"address book Create order with the same bill & ship addresses has equal ids when option use_billing is active","suite":"Spree::Order at ./spec/models/spree/order/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:2\"}}","suiteSourceFile":"core/spec/models/spree/order/address_spec.rb"},{"name":"address book when user wants to update firstname of the address with already completed order creates new address with updated attributes","suite":"Spree::Order at ./spec/models/spree/order/address_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:1\"}}","suiteSourceFile":"core/spec/models/spree/order/address_spec.rb"},{"name":"when an order has an adjustment that zeroes the total, but another adjustment for shipping that raises it above zero transitions from delivery to payment","suite":"Spree::Order at ./spec/models/spree/order/adjustments_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order/adjustments_spec.rb"},{"name":"when an order has an taxed shipment with tax included_in_price and apply free_shipping_promotion removes the shipment tax adjustment","suite":"Spree::Order at ./spec/models/spree/order/adjustments_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order/adjustments_spec.rb"},{"name":"validations email validation o'brien@gmail.com is a valid email address","suite":"Spree::Order at ./spec/models/spree/order/callbacks_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order/callbacks_spec.rb"},{"name":"#save when associated with a registered user assigns the email address of the user","suite":"Spree::Order at ./spec/models/spree/order/callbacks_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order/callbacks_spec.rb"},{"name":"in the cart state does not validate email address","suite":"Spree::Order at ./spec/models/spree/order/callbacks_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/order/callbacks_spec.rb"},{"name":"with default state machine has the following transitions","suite":"Spree::Order at ./spec/models/spree/order/checkout_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order/checkout_spec.rb"},{"name":"with default state machine does not have a transition from delivery to confirm","suite":"Spree::Order at ./spec/models/spree/order/checkout_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/order/checkout_spec.rb"},{"name":"with default state machine .find_transition when contract was broken","suite":"Spree::Order at ./spec/models/spree/order/checkout_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/models/spree/order/checkout_spec.rb"},{"name":"with default state machine .remove_transition","suite":"Spree::Order at ./spec/models/spree/order/checkout_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","suiteSourceFile":"core/spec/models/spree/order/checkout_spec.rb"},{"name":"with default state machine .remove_transition when contract was broken","suite":"Spree::Order at ./spec/models/spree/order/checkout_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","suiteSourceFile":"core/spec/models/spree/order/checkout_spec.rb"},{"name":"with default state machine always return integer on checkout_step_index","suite":"Spree::Order at ./spec/models/spree/order/checkout_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","suiteSourceFile":"core/spec/models/spree/order/checkout_spec.rb"},{"name":"with default state machine passes delivery state when transitioning from address over delivery to payment","suite":"Spree::Order at ./spec/models/spree/order/checkout_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7\"}}","suiteSourceFile":"core/spec/models/spree/order/checkout_spec.rb"},{"name":"with default state machine starts out at cart","suite":"Spree::Order at ./spec/models/spree/order/checkout_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:9\"}}","suiteSourceFile":"core/spec/models/spree/order/checkout_spec.rb"},{"name":"with default state machine #checkout_steps when confirmation not required example at ./spec/models/spree/order/checkout_spec.rb:81","suite":"Spree::Order at ./spec/models/spree/order/checkout_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order/checkout_spec.rb"},{"name":"with default state machine #checkout_steps when confirmation required example at ./spec/models/spree/order/checkout_spec.rb:92","suite":"Spree::Order at ./spec/models/spree/order/checkout_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order/checkout_spec.rb"},{"name":"with default state machine #checkout_steps when delivery not required example at ./spec/models/spree/order/checkout_spec.rb:100","suite":"Spree::Order at ./spec/models/spree/order/checkout_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8:3:1\"}}","suiteSourceFile":"core/spec/models/spree/order/checkout_spec.rb"},{"name":"with default state machine #checkout_steps when payment not required example at ./spec/models/spree/order/checkout_spec.rb:108","suite":"Spree::Order at ./spec/models/spree/order/checkout_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8:4:1\"}}","suiteSourceFile":"core/spec/models/spree/order/checkout_spec.rb"},{"name":"with default state machine #checkout_steps when payment required example at ./spec/models/spree/order/checkout_spec.rb:116","suite":"Spree::Order at ./spec/models/spree/order/checkout_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8:5:1\"}}","suiteSourceFile":"core/spec/models/spree/order/checkout_spec.rb"},{"name":"with default state machine to address cannot transition to address without any line items","suite":"Spree::Order at ./spec/models/spree/order/checkout_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:10:2\"}}","suiteSourceFile":"core/spec/models/spree/order/checkout_spec.rb"},{"name":"with default state machine to address with a line item transitions to address","suite":"Spree::Order at ./spec/models/spree/order/checkout_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:10:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order/checkout_spec.rb"},{"name":"with default state machine to address with a line item doesn't raise an error if the default address is invalid","suite":"Spree::Order at ./spec/models/spree/order/checkout_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:10:1:2\"}}","suiteSourceFile":"core/spec/models/spree/order/checkout_spec.rb"},{"name":"with default state machine to address with a line item with default addresses behaves like it cloned the default address example at ./spec/models/spree/order/checkout_spec.rb:160","suite":"Spree::Order at ./spec/models/spree/order/checkout_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:10:1:3:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order/checkout_spec.rb"},{"name":"with default state machine to address with a line item with default addresses behaves like it cloned the default address example at ./spec/models/spree/order/checkout_spec.rb:160","suite":"Spree::Order at ./spec/models/spree/order/checkout_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:10:1:3:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order/checkout_spec.rb"},{"name":"with default state machine from address updates totals","suite":"Spree::Order at ./spec/models/spree/order/checkout_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:11:1\"}}","suiteSourceFile":"core/spec/models/spree/order/checkout_spec.rb"},{"name":"with default state machine from address updates prices","suite":"Spree::Order at ./spec/models/spree/order/checkout_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:11:2\"}}","suiteSourceFile":"core/spec/models/spree/order/checkout_spec.rb"},{"name":"with default state machine from address transitions to delivery","suite":"Spree::Order at ./spec/models/spree/order/checkout_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:11:3\"}}","suiteSourceFile":"core/spec/models/spree/order/checkout_spec.rb"},{"name":"with default state machine from address cannot transition to delivery with an existing shipment if there are no shipping rates for any shipment raises an InvalidTransitionError","suite":"Spree::Order at ./spec/models/spree/order/checkout_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:11:4:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order/checkout_spec.rb"},{"name":"with default state machine from address cannot transition to delivery with an existing shipment if there are no shipping rates for any shipment deletes all the shipments","suite":"Spree::Order at ./spec/models/spree/order/checkout_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:11:4:1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/order/checkout_spec.rb"},{"name":"with default state machine to delivery when order has default selected_shipping_rate_id invokes set_shipment_cost","suite":"Spree::Order at ./spec/models/spree/order/checkout_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:12:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order/checkout_spec.rb"},{"name":"with default state machine to delivery when order has default selected_shipping_rate_id updates shipment_total","suite":"Spree::Order at ./spec/models/spree/order/checkout_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:12:1:2\"}}","suiteSourceFile":"core/spec/models/spree/order/checkout_spec.rb"},{"name":"with default state machine from delivery attempts to apply free shipping promotions","suite":"Spree::Order at ./spec/models/spree/order/checkout_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:13:1\"}}","suiteSourceFile":"core/spec/models/spree/order/checkout_spec.rb"},{"name":"with default state machine from delivery with payment required transitions to payment","suite":"Spree::Order at ./spec/models/spree/order/checkout_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:13:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order/checkout_spec.rb"},{"name":"with default state machine from delivery without payment required transitions to complete","suite":"Spree::Order at ./spec/models/spree/order/checkout_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:13:3:1\"}}","suiteSourceFile":"core/spec/models/spree/order/checkout_spec.rb"},{"name":"with default state machine from delivery correctly determining payment required based on shipping information with a shipment that has a price transitions to payment","suite":"Spree::Order at ./spec/models/spree/order/checkout_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:13:4:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order/checkout_spec.rb"},{"name":"with default state machine from delivery correctly determining payment required based on shipping information with a shipment that is free skips payment, transitions to complete","suite":"Spree::Order at ./spec/models/spree/order/checkout_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:13:4:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order/checkout_spec.rb"},{"name":"with default state machine from payment with confirmation required transitions to confirm","suite":"Spree::Order at ./spec/models/spree/order/checkout_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:14:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order/checkout_spec.rb"},{"name":"with default state machine from payment without confirmation required when there is at least one valid payment line_items are in stock transitions to complete","suite":"Spree::Order at ./spec/models/spree/order/checkout_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:14:2:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order/checkout_spec.rb"},{"name":"with default state machine from payment without confirmation required when there is at least one valid payment line_items are not in stock does not receive process_payments!","suite":"Spree::Order at ./spec/models/spree/order/checkout_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:14:2:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order/checkout_spec.rb"},{"name":"with default state machine from payment without confirmation required when there is at least one valid payment line_items are not in stock does not transition to complete","suite":"Spree::Order at ./spec/models/spree/order/checkout_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:14:2:1:2:2\"}}","suiteSourceFile":"core/spec/models/spree/order/checkout_spec.rb"},{"name":"with default state machine from payment without confirmation required when there is only an invalid payment raises a StateMachine::InvalidTransition","suite":"Spree::Order at ./spec/models/spree/order/checkout_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:14:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order/checkout_spec.rb"},{"name":"with default state machine from payment when payment is not required does not call process payments","suite":"Spree::Order at ./spec/models/spree/order/checkout_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:14:3:1\"}}","suiteSourceFile":"core/spec/models/spree/order/checkout_spec.rb"},{"name":"to complete default credit card makes the current credit card a user's default credit card","suite":"Spree::Order at ./spec/models/spree/order/checkout_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:2\"}}","suiteSourceFile":"core/spec/models/spree/order/checkout_spec.rb"},{"name":"to complete default credit card creates a digital_link for the digital line_item","suite":"Spree::Order at ./spec/models/spree/order/checkout_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:3\"}}","suiteSourceFile":"core/spec/models/spree/order/checkout_spec.rb"},{"name":"to complete default credit card creates a digital_link for the physical line_item if it has a digital asset","suite":"Spree::Order at ./spec/models/spree/order/checkout_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:4\"}}","suiteSourceFile":"core/spec/models/spree/order/checkout_spec.rb"},{"name":"to complete default credit card does not assign a default credit card if temporary_credit_card is set","suite":"Spree::Order at ./spec/models/spree/order/checkout_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:5\"}}","suiteSourceFile":"core/spec/models/spree/order/checkout_spec.rb"},{"name":"to complete default credit card newsletter subscription when newsletter is accepted for the order subscribes to newsletter","suite":"Spree::Order at ./spec/models/spree/order/checkout_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order/checkout_spec.rb"},{"name":"to complete default credit card newsletter subscription when newsletter is not accepted for the order does not subscribe to newsletter","suite":"Spree::Order at ./spec/models/spree/order/checkout_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order/checkout_spec.rb"},{"name":"to complete default credit card when gift card is present redeems the gift card","suite":"Spree::Order at ./spec/models/spree/order/checkout_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:6:1\"}}","suiteSourceFile":"core/spec/models/spree/order/checkout_spec.rb"},{"name":"to complete default credit card when gift card is present when gift card has amount bigger than order total partially redeems the gift card","suite":"Spree::Order at ./spec/models/spree/order/checkout_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:6:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order/checkout_spec.rb"},{"name":"to complete default credit card when user is not present with signup_for_an_account set to true creates a new user","suite":"Spree::Order at ./spec/models/spree/order/checkout_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:7:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order/checkout_spec.rb"},{"name":"to complete default credit card when user is not present with signup_for_an_account set to false does not create a new user","suite":"Spree::Order at ./spec/models/spree/order/checkout_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:7:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order/checkout_spec.rb"},{"name":"re-define checkout flow does not keep old event transitions when checkout_flow is redefined","suite":"Spree::Order at ./spec/models/spree/order/checkout_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/order/checkout_spec.rb"},{"name":"re-define checkout flow does not keep old events when checkout_flow is redefined","suite":"Spree::Order at ./spec/models/spree/order/checkout_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2\"}}","suiteSourceFile":"core/spec/models/spree/order/checkout_spec.rb"},{"name":"with only a complete step does not attempt to process payments","suite":"Spree::Order at ./spec/models/spree/order/checkout_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","suiteSourceFile":"core/spec/models/spree/order/checkout_spec.rb"},{"name":"insert checkout step maintains removed transitions","suite":"Spree::Order at ./spec/models/spree/order/checkout_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","suiteSourceFile":"core/spec/models/spree/order/checkout_spec.rb"},{"name":"insert checkout step before example at ./spec/models/spree/order/checkout_spec.rb:679","suite":"Spree::Order at ./spec/models/spree/order/checkout_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order/checkout_spec.rb"},{"name":"insert checkout step before goes through checkout without raising error","suite":"Spree::Order at ./spec/models/spree/order/checkout_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2:2\"}}","suiteSourceFile":"core/spec/models/spree/order/checkout_spec.rb"},{"name":"insert checkout step after example at ./spec/models/spree/order/checkout_spec.rb:696","suite":"Spree::Order at ./spec/models/spree/order/checkout_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:3:1\"}}","suiteSourceFile":"core/spec/models/spree/order/checkout_spec.rb"},{"name":"insert checkout step after goes through checkout without raising error","suite":"Spree::Order at ./spec/models/spree/order/checkout_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:3:2\"}}","suiteSourceFile":"core/spec/models/spree/order/checkout_spec.rb"},{"name":"remove checkout step maintains removed transitions","suite":"Spree::Order at ./spec/models/spree/order/checkout_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","suiteSourceFile":"core/spec/models/spree/order/checkout_spec.rb"},{"name":"remove checkout step example at ./spec/models/spree/order/checkout_spec.rb:724","suite":"Spree::Order at ./spec/models/spree/order/checkout_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2\"}}","suiteSourceFile":"core/spec/models/spree/order/checkout_spec.rb"},{"name":"update_from_params calls update_attributes without order params","suite":"Spree::Order at ./spec/models/spree/order/checkout_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1\"}}","suiteSourceFile":"core/spec/models/spree/order/checkout_spec.rb"},{"name":"update_from_params runs the callbacks","suite":"Spree::Order at ./spec/models/spree/order/checkout_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2\"}}","suiteSourceFile":"core/spec/models/spree/order/checkout_spec.rb"},{"name":"update_from_params passing a credit card sets confirmation value when its available via :cvc_confirm","suite":"Spree::Order at ./spec/models/spree/order/checkout_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:3:1\"}}","suiteSourceFile":"core/spec/models/spree/order/checkout_spec.rb"},{"name":"update_from_params passing a credit card sets existing card as source for new payment","suite":"Spree::Order at ./spec/models/spree/order/checkout_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:3:2\"}}","suiteSourceFile":"core/spec/models/spree/order/checkout_spec.rb"},{"name":"update_from_params passing a credit card sets request_env on payment","suite":"Spree::Order at ./spec/models/spree/order/checkout_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:3:3\"}}","suiteSourceFile":"core/spec/models/spree/order/checkout_spec.rb"},{"name":"update_from_params passing a credit card dont let users mess with others users cards","suite":"Spree::Order at ./spec/models/spree/order/checkout_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:3:4\"}}","suiteSourceFile":"core/spec/models/spree/order/checkout_spec.rb"},{"name":"update_from_params has params does not let through unpermitted attributes","suite":"Spree::Order at ./spec/models/spree/order/checkout_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:4:1\"}}","suiteSourceFile":"core/spec/models/spree/order/checkout_spec.rb"},{"name":"update_from_params has params has existing_card param does not attempt to permit existing_card","suite":"Spree::Order at ./spec/models/spree/order/checkout_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:4:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order/checkout_spec.rb"},{"name":"update_from_params has params has allowed params accepts permitted attributes","suite":"Spree::Order at ./spec/models/spree/order/checkout_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:4:3:1\"}}","suiteSourceFile":"core/spec/models/spree/order/checkout_spec.rb"},{"name":"CurrencyUpdater when changing order currency #homogenize_line_item_currencies succeeds without error","suite":"Spree::Order at ./spec/models/spree/order/currency_updater_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order/currency_updater_spec.rb"},{"name":"CurrencyUpdater when changing order currency #homogenize_line_item_currencies changes the line_item currencies","suite":"Spree::Order at ./spec/models/spree/order/currency_updater_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/order/currency_updater_spec.rb"},{"name":"CurrencyUpdater when changing order currency #homogenize_line_item_currencies changes the line_item amounts","suite":"Spree::Order at ./spec/models/spree/order/currency_updater_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:3\"}}","suiteSourceFile":"core/spec/models/spree/order/currency_updater_spec.rb"},{"name":"CurrencyUpdater when changing order currency #homogenize_line_item_currencies calculates the item total in the order.currency","suite":"Spree::Order at ./spec/models/spree/order/currency_updater_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:4\"}}","suiteSourceFile":"core/spec/models/spree/order/currency_updater_spec.rb"},{"name":"CurrencyUpdater when changing order currency #homogenize_line_item_currencies when there is a price with nil amount destroys the line item when we switch to that price's currency","suite":"Spree::Order at ./spec/models/spree/order/currency_updater_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:5:1\"}}","suiteSourceFile":"core/spec/models/spree/order/currency_updater_spec.rb"},{"name":"line_item analysis understands that all products are digital","suite":"Spree::Order at ./spec/models/spree/order/digital_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order/digital_spec.rb"},{"name":"line_item analysis understands that no products are digital","suite":"Spree::Order at ./spec/models/spree/order/digital_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/order/digital_spec.rb"},{"name":"line_item analysis understands that empty order is not digital","suite":"Spree::Order at ./spec/models/spree/order/digital_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/models/spree/order/digital_spec.rb"},{"name":"line_item analysis understands that not all products are digital","suite":"Spree::Order at ./spec/models/spree/order/digital_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","suiteSourceFile":"core/spec/models/spree/order/digital_spec.rb"},{"name":"Spree::Cart::AddItem.call adds digital Variants of quantity 1 to an order","suite":"Spree::Order at ./spec/models/spree/order/digital_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order/digital_spec.rb"},{"name":"Spree::Cart::AddItem.call handles quantity higher than 1 when adding one specific digital Variant","suite":"Spree::Order at ./spec/models/spree/order/digital_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","suiteSourceFile":"core/spec/models/spree/order/digital_spec.rb"},{"name":"#digital?/#some_digital? returns true/true for a digital order","suite":"Spree::Order at ./spec/models/spree/order/digital_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/order/digital_spec.rb"},{"name":"#digital?/#some_digital? returns false/true for a mixed order","suite":"Spree::Order at ./spec/models/spree/order/digital_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","suiteSourceFile":"core/spec/models/spree/order/digital_spec.rb"},{"name":"#digital?/#some_digital? returns false/false for an exclusively non-digital order","suite":"Spree::Order at ./spec/models/spree/order/digital_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3\"}}","suiteSourceFile":"core/spec/models/spree/order/digital_spec.rb"},{"name":"#digital_links correctly loads the links","suite":"Spree::Order at ./spec/models/spree/order/digital_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/order/digital_spec.rb"},{"name":"#finalize! sets completed_at","suite":"Spree::Order at ./spec/models/spree/order/finalizing_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order/finalizing_spec.rb"},{"name":"#finalize! sells inventory units","suite":"Spree::Order at ./spec/models/spree/order/finalizing_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/order/finalizing_spec.rb"},{"name":"#finalize! decreases the stock for each variant in the shipment","suite":"Spree::Order at ./spec/models/spree/order/finalizing_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/models/spree/order/finalizing_spec.rb"},{"name":"#finalize! changes the shipment state to ready if order is paid","suite":"Spree::Order at ./spec/models/spree/order/finalizing_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","suiteSourceFile":"core/spec/models/spree/order/finalizing_spec.rb"},{"name":"#finalize! does not sell inventory units if track_inventory_levels is false","suite":"Spree::Order at ./spec/models/spree/order/finalizing_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","suiteSourceFile":"core/spec/models/spree/order/finalizing_spec.rb"},{"name":"#finalize! freezes all adjustments","suite":"Spree::Order at ./spec/models/spree/order/finalizing_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","suiteSourceFile":"core/spec/models/spree/order/finalizing_spec.rb"},{"name":"#finalize! order is considered risky changes state to risky","suite":"Spree::Order at ./spec/models/spree/order/finalizing_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7:1\"}}","suiteSourceFile":"core/spec/models/spree/order/finalizing_spec.rb"},{"name":"#finalize! order is considered risky and order is approved leaves order in complete state","suite":"Spree::Order at ./spec/models/spree/order/finalizing_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order/finalizing_spec.rb"},{"name":"#finalize! order is not considered risky sets completed_at","suite":"Spree::Order at ./spec/models/spree/order/finalizing_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8:1\"}}","suiteSourceFile":"core/spec/models/spree/order/finalizing_spec.rb"},{"name":"#gift_card_total when there is a gift card returns the gift card total","suite":"Order at ./spec/models/spree/order/gift_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order/gift_card_spec.rb"},{"name":"#apply_gift_card when there is a gift card applies the gift card to the order","suite":"Order at ./spec/models/spree/order/gift_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order/gift_card_spec.rb"},{"name":"#remove_gift_card when there is a gift card removes the gift card from the order","suite":"Order at ./spec/models/spree/order/gift_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order/gift_card_spec.rb"},{"name":"processing payments processes the checkout payment","suite":"Spree::Order at ./spec/models/spree/order/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order/payment_spec.rb"},{"name":"processing payments does not go over total for order","suite":"Spree::Order at ./spec/models/spree/order/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/models/spree/order/payment_spec.rb"},{"name":"processing payments does not use failed payments","suite":"Spree::Order at ./spec/models/spree/order/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","suiteSourceFile":"core/spec/models/spree/order/payment_spec.rb"},{"name":"processing payments processes all checkout payments along with store credits with store credits payment method auto capture turned on order should be paid","suite":"Spree::Order at ./spec/models/spree/order/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order/payment_spec.rb"},{"name":"processing payments processes all checkout payments along with store credits with store credits payment method auto capture turned off order payment state should be balance due example at ./spec/models/spree/order/payment_spec.rb:66","suite":"Spree::Order at ./spec/models/spree/order/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order/payment_spec.rb"},{"name":"processing payments processes all checkout payments along with store credits with store credits payment method auto capture turned off order payment state should be balance due example at ./spec/models/spree/order/payment_spec.rb:76","suite":"Spree::Order at ./spec/models/spree/order/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order/payment_spec.rb"},{"name":"ensure source attributes stick around does not have inverse_of defined","suite":"Spree::Order at ./spec/models/spree/order/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order/payment_spec.rb"},{"name":"ensure source attributes stick around keeps source attributes after updating","suite":"Spree::Order at ./spec/models/spree/order/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","suiteSourceFile":"core/spec/models/spree/order/payment_spec.rb"},{"name":"#process_payments! processes the payments","suite":"Spree::Order at ./spec/models/spree/order/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/order/payment_spec.rb"},{"name":"#process_payments! raises an error if there are no payments to process","suite":"Spree::Order at ./spec/models/spree/order/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","suiteSourceFile":"core/spec/models/spree/order/payment_spec.rb"},{"name":"#process_payments! updates order with correct payment total","suite":"Spree::Order at ./spec/models/spree/order/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:5\"}}","suiteSourceFile":"core/spec/models/spree/order/payment_spec.rb"},{"name":"#process_payments! when there are pending payments skips processing the payments","suite":"Spree::Order at ./spec/models/spree/order/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3:1\"}}","suiteSourceFile":"core/spec/models/spree/order/payment_spec.rb"},{"name":"#process_payments! when there are pending payments when there is other unprocessed payment processes only the other payment","suite":"Spree::Order at ./spec/models/spree/order/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order/payment_spec.rb"},{"name":"#process_payments! when a payment raises a GatewayError returns true when configured to allow checkout on gateway failures","suite":"Spree::Order at ./spec/models/spree/order/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4:1\"}}","suiteSourceFile":"core/spec/models/spree/order/payment_spec.rb"},{"name":"#process_payments! when a payment raises a GatewayError returns false when not configured to allow checkout on gateway failures","suite":"Spree::Order at ./spec/models/spree/order/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4:2\"}}","suiteSourceFile":"core/spec/models/spree/order/payment_spec.rb"},{"name":"#authorize_payments! processes payments with attempt_authorization!","suite":"Spree::Order at ./spec/models/spree/order/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/order/payment_spec.rb"},{"name":"#authorize_payments! example at ./spec/models/spree/order/payment_spec.rb:236","suite":"Spree::Order at ./spec/models/spree/order/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2\"}}","suiteSourceFile":"core/spec/models/spree/order/payment_spec.rb"},{"name":"#capture_payments! processes payments with attempt_authorization!","suite":"Spree::Order at ./spec/models/spree/order/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","suiteSourceFile":"core/spec/models/spree/order/payment_spec.rb"},{"name":"#capture_payments! example at ./spec/models/spree/order/payment_spec.rb:251","suite":"Spree::Order at ./spec/models/spree/order/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2\"}}","suiteSourceFile":"core/spec/models/spree/order/payment_spec.rb"},{"name":"#outstanding_balance returns positive amount when payment_total is less than total","suite":"Spree::Order at ./spec/models/spree/order/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","suiteSourceFile":"core/spec/models/spree/order/payment_spec.rb"},{"name":"#outstanding_balance returns negative amount when payment_total is greater than total","suite":"Spree::Order at ./spec/models/spree/order/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2\"}}","suiteSourceFile":"core/spec/models/spree/order/payment_spec.rb"},{"name":"#outstanding_balance incorporates refund reimbursements","suite":"Spree::Order at ./spec/models/spree/order/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:3\"}}","suiteSourceFile":"core/spec/models/spree/order/payment_spec.rb"},{"name":"#outstanding_balance does not incorporate refunds without a reimbursement","suite":"Spree::Order at ./spec/models/spree/order/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:4\"}}","suiteSourceFile":"core/spec/models/spree/order/payment_spec.rb"},{"name":"#outstanding_balance? is true when total greater than payment_total","suite":"Spree::Order at ./spec/models/spree/order/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","suiteSourceFile":"core/spec/models/spree/order/payment_spec.rb"},{"name":"#outstanding_balance? is true when total less than payment_total","suite":"Spree::Order at ./spec/models/spree/order/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2\"}}","suiteSourceFile":"core/spec/models/spree/order/payment_spec.rb"},{"name":"#outstanding_balance? is false when total equals payment_total","suite":"Spree::Order at ./spec/models/spree/order/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:3\"}}","suiteSourceFile":"core/spec/models/spree/order/payment_spec.rb"},{"name":"payment required? total is zero example at ./spec/models/spree/order/payment_spec.rb:326","suite":"Spree::Order at ./spec/models/spree/order/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order/payment_spec.rb"},{"name":"payment required? total > zero example at ./spec/models/spree/order/payment_spec.rb:332","suite":"Spree::Order at ./spec/models/spree/order/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order/payment_spec.rb"},{"name":".is_risky? Not risky order with avs_response == D is not considered risky","suite":"Spree::Order at ./spec/models/spree/order/risk_assessment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order/risk_assessment_spec.rb"},{"name":".is_risky? Not risky order with avs_response == M is not considered risky","suite":"Spree::Order at ./spec/models/spree/order/risk_assessment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order/risk_assessment_spec.rb"},{"name":".is_risky? Not risky order with avs_response == '' is not considered risky","suite":"Spree::Order at ./spec/models/spree/order/risk_assessment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/order/risk_assessment_spec.rb"},{"name":".is_risky? Not risky order with cvv_response_code == M is not considered risky","suite":"Spree::Order at ./spec/models/spree/order/risk_assessment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/order/risk_assessment_spec.rb"},{"name":".is_risky? Not risky order with cvv_response_message == '' is not considered risky","suite":"Spree::Order at ./spec/models/spree/order/risk_assessment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:5:1\"}}","suiteSourceFile":"core/spec/models/spree/order/risk_assessment_spec.rb"},{"name":".is_risky? Risky order AVS response message returns true if the order has an avs_response","suite":"Spree::Order at ./spec/models/spree/order/risk_assessment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order/risk_assessment_spec.rb"},{"name":".is_risky? Risky order CVV response code returns true if the order has an cvv_response_code","suite":"Spree::Order at ./spec/models/spree/order/risk_assessment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order/risk_assessment_spec.rb"},{"name":".is_risky? Risky order state == 'failed' returns true if the order has state == 'failed'","suite":"Spree::Order at ./spec/models/spree/order/risk_assessment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:3:1\"}}","suiteSourceFile":"core/spec/models/spree/order/risk_assessment_spec.rb"},{"name":"is considered risky can be approved by a user","suite":"Spree::Order at ./spec/models/spree/order/risk_assessment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order/risk_assessment_spec.rb"},{"name":"ensure shipments will be updated destroys current shipments","suite":"Spree::Order at ./spec/models/spree/order/shipments_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order/shipments_spec.rb"},{"name":"ensure shipments will be updated puts order back in address state","suite":"Spree::Order at ./spec/models/spree/order/shipments_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/order/shipments_spec.rb"},{"name":"ensure shipments will be updated resets shipment_total","suite":"Spree::Order at ./spec/models/spree/order/shipments_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/models/spree/order/shipments_spec.rb"},{"name":"ensure shipments will be updated except when order is completed, that's OrderInventory job doesn't touch anything","suite":"Spree::Order at ./spec/models/spree/order/shipments_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/order/shipments_spec.rb"},{"name":"#next! when current state is confirm when payment processing succeeds finalizes order when transitioning to complete state","suite":"Spree::Order at ./spec/models/spree/order/state_machine_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order/state_machine_spec.rb"},{"name":"#next! when current state is confirm when payment processing succeeds when credit card processing fails does not complete the order","suite":"Spree::Order at ./spec/models/spree/order/state_machine_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order/state_machine_spec.rb"},{"name":"#next! when current state is confirm when payment processing fails cannot transition to complete","suite":"Spree::Order at ./spec/models/spree/order/state_machine_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order/state_machine_spec.rb"},{"name":"#next! when current state is delivery adjusts tax rates when transitioning to delivery","suite":"Spree::Order at ./spec/models/spree/order/state_machine_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order/state_machine_spec.rb"},{"name":"#next! when current state is delivery adjusts tax rates twice if there are any shipments","suite":"Spree::Order at ./spec/models/spree/order/state_machine_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2\"}}","suiteSourceFile":"core/spec/models/spree/order/state_machine_spec.rb"},{"name":"#can_cancel? should be true if shipment_state is pending","suite":"Spree::Order at ./spec/models/spree/order/state_machine_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order/state_machine_spec.rb"},{"name":"#can_cancel? should be true if shipment_state is backorder","suite":"Spree::Order at ./spec/models/spree/order/state_machine_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","suiteSourceFile":"core/spec/models/spree/order/state_machine_spec.rb"},{"name":"#can_cancel? should be true if shipment_state is ready","suite":"Spree::Order at ./spec/models/spree/order/state_machine_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3\"}}","suiteSourceFile":"core/spec/models/spree/order/state_machine_spec.rb"},{"name":"#can_cancel? should be false if shipment_state is shipped","suite":"Spree::Order at ./spec/models/spree/order/state_machine_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:4\"}}","suiteSourceFile":"core/spec/models/spree/order/state_machine_spec.rb"},{"name":"#cancel resets payment state without shipped items sets payment state to 'void'","suite":"Spree::Order at ./spec/models/spree/order/state_machine_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order/state_machine_spec.rb"},{"name":"#cancel resets payment state with shipped items does not alter the payment state","suite":"Spree::Order at ./spec/models/spree/order/state_machine_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order/state_machine_spec.rb"},{"name":"#cancel resets payment state with payments automatically refunds all payments","suite":"Spree::Order at ./spec/models/spree/order/state_machine_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/order/state_machine_spec.rb"},{"name":"#add_store_credit_payments there is no store credit does not create a store credit payment","suite":"Order at ./spec/models/spree/order/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order/store_credit_spec.rb"},{"name":"#add_store_credit_payments there is enough store credit to pay for the entire order creates a store credit payment for the full amount","suite":"Order at ./spec/models/spree/order/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order/store_credit_spec.rb"},{"name":"#add_store_credit_payments the available store credit is not enough to pay for the entire order creates a store credit payment for the available amount","suite":"Order at ./spec/models/spree/order/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/order/store_credit_spec.rb"},{"name":"#add_store_credit_payments there are multiple store credits they have different credit type priorities uses the primary store credit type over the secondary","suite":"Order at ./spec/models/spree/order/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order/store_credit_spec.rb"},{"name":"#remove_store_credit_payments when order is not complete example at ./spec/models/spree/order/store_credit_spec.rb:136","suite":"Order at ./spec/models/spree/order/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order/store_credit_spec.rb"},{"name":"#remove_store_credit_payments when order is not complete example at ./spec/models/spree/order/store_credit_spec.rb:137","suite":"Order at ./spec/models/spree/order/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:2\"}}","suiteSourceFile":"core/spec/models/spree/order/store_credit_spec.rb"},{"name":"#remove_store_credit_payments when order is complete example at ./spec/models/spree/order/store_credit_spec.rb:149","suite":"Order at ./spec/models/spree/order/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order/store_credit_spec.rb"},{"name":"#covered_by_store_credit order doesn't have an associated user example at ./spec/models/spree/order/store_credit_spec.rb:159","suite":"Order at ./spec/models/spree/order/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order/store_credit_spec.rb"},{"name":"#covered_by_store_credit order has an associated user user has enough store credit to pay for the order example at ./spec/models/spree/order/store_credit_spec.rb:173","suite":"Order at ./spec/models/spree/order/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order/store_credit_spec.rb"},{"name":"#covered_by_store_credit order has an associated user user does not have enough store credit to pay for the order example at ./spec/models/spree/order/store_credit_spec.rb:182","suite":"Order at ./spec/models/spree/order/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order/store_credit_spec.rb"},{"name":"#covered_by_store_credit order has an associated user order total is zero example at ./spec/models/spree/order/store_credit_spec.rb:187","suite":"Order at ./spec/models/spree/order/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:3:1\"}}","suiteSourceFile":"core/spec/models/spree/order/store_credit_spec.rb"},{"name":"#total_available_store_credit order does not have an associated user returns 0","suite":"Order at ./spec/models/spree/order/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order/store_credit_spec.rb"},{"name":"#total_available_store_credit order has an associated user returns the user's available store credit","suite":"Order at ./spec/models/spree/order/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order/store_credit_spec.rb"},{"name":"#total_available_store_credit order has an associated user when store is provided and has store credits associated returns the user's available store credit","suite":"Order at ./spec/models/spree/order/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order/store_credit_spec.rb"},{"name":"#total_available_store_credit order has an associated user when store is provided and has no store credits associated returns the user's available store credit","suite":"Order at ./spec/models/spree/order/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order/store_credit_spec.rb"},{"name":"#available_store_credits order does not have an associated user example at ./spec/models/spree/order/store_credit_spec.rb:253","suite":"Order at ./spec/models/spree/order/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order/store_credit_spec.rb"},{"name":"#available_store_credits order has an associated user returns the user available store credits","suite":"Order at ./spec/models/spree/order/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order/store_credit_spec.rb"},{"name":"#could_use_store_credit? order does not have an associated user example at ./spec/models/spree/order/store_credit_spec.rb:276","suite":"Order at ./spec/models/spree/order/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order/store_credit_spec.rb"},{"name":"#could_use_store_credit? order has an associated user without store credit example at ./spec/models/spree/order/store_credit_spec.rb:285","suite":"Order at ./spec/models/spree/order/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order/store_credit_spec.rb"},{"name":"#could_use_store_credit? order has an associated user with store credit example at ./spec/models/spree/order/store_credit_spec.rb:295","suite":"Order at ./spec/models/spree/order/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order/store_credit_spec.rb"},{"name":"#could_use_store_credit? order has an associated user without active Store Credit Payment example at ./spec/models/spree/order/store_credit_spec.rb:306","suite":"Order at ./spec/models/spree/order/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2:3:1\"}}","suiteSourceFile":"core/spec/models/spree/order/store_credit_spec.rb"},{"name":"#could_use_store_credit? order has an associated user without Store Credit Payment example at ./spec/models/spree/order/store_credit_spec.rb:318","suite":"Order at ./spec/models/spree/order/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2:4:1\"}}","suiteSourceFile":"core/spec/models/spree/order/store_credit_spec.rb"},{"name":"#order_total_after_store_credit order's user has store credits deducts the applicable store credit","suite":"Order at ./spec/models/spree/order/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order/store_credit_spec.rb"},{"name":"#order_total_after_store_credit order's user does not have any store credits returns the order total","suite":"Order at ./spec/models/spree/order/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order/store_credit_spec.rb"},{"name":"#total_applicable_store_credit order is in the confirm state with valid payments returns the sum of the payment amounts","suite":"Order at ./spec/models/spree/order/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order/store_credit_spec.rb"},{"name":"#total_applicable_store_credit order is in the confirm state without valid payments returns 0","suite":"Order at ./spec/models/spree/order/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order/store_credit_spec.rb"},{"name":"#total_applicable_store_credit order is completed with valid payments returns the sum of the payment amounts","suite":"Order at ./spec/models/spree/order/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order/store_credit_spec.rb"},{"name":"#total_applicable_store_credit order is completed without valid payments returns 0","suite":"Order at ./spec/models/spree/order/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order/store_credit_spec.rb"},{"name":"#total_applicable_store_credit order is in any state other than confirm or complete the associated user has store credits the store credit is more than the order total returns the order total","suite":"Order at ./spec/models/spree/order/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:3:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order/store_credit_spec.rb"},{"name":"#total_applicable_store_credit order is in any state other than confirm or complete the associated user has store credits the store credit is less than the order total returns the store credit amount","suite":"Order at ./spec/models/spree/order/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:3:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order/store_credit_spec.rb"},{"name":"#total_applicable_store_credit order is in any state other than confirm or complete the associated user does not have store credits returns 0","suite":"Order at ./spec/models/spree/order/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:3:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order/store_credit_spec.rb"},{"name":"#total_applicable_store_credit order is in any state other than confirm or complete the order does not have an associated user returns 0","suite":"Order at ./spec/models/spree/order/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:3:3:1\"}}","suiteSourceFile":"core/spec/models/spree/order/store_credit_spec.rb"},{"name":"#total_applied_store_credit with valid payments returns the sum of the payment amounts","suite":"Order at ./spec/models/spree/order/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order/store_credit_spec.rb"},{"name":"#total_applied_store_credit with valid payments when payments are loaded returns the sum of the payment amounts","suite":"Order at ./spec/models/spree/order/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order/store_credit_spec.rb"},{"name":"#total_applied_store_credit without valid payments returns 0","suite":"Order at ./spec/models/spree/order/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order/store_credit_spec.rb"},{"name":"#using_store_credit? order has store credit payment example at ./spec/models/spree/order/store_credit_spec.rb:457","suite":"Order at ./spec/models/spree/order/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order/store_credit_spec.rb"},{"name":"#using_store_credit? order has no store credit payments example at ./spec/models/spree/order/store_credit_spec.rb:463","suite":"Order at ./spec/models/spree/order/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order/store_credit_spec.rb"},{"name":"#display_total_applicable_store_credit returns a money instance","suite":"Order at ./spec/models/spree/order/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1\"}}","suiteSourceFile":"core/spec/models/spree/order/store_credit_spec.rb"},{"name":"#display_total_applicable_store_credit returns a negative amount","suite":"Order at ./spec/models/spree/order/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2\"}}","suiteSourceFile":"core/spec/models/spree/order/store_credit_spec.rb"},{"name":"#display_total_applied_store_credit returns a money instance","suite":"Order at ./spec/models/spree/order/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:1\"}}","suiteSourceFile":"core/spec/models/spree/order/store_credit_spec.rb"},{"name":"#display_total_applied_store_credit returns a negative amount","suite":"Order at ./spec/models/spree/order/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:2\"}}","suiteSourceFile":"core/spec/models/spree/order/store_credit_spec.rb"},{"name":"#display_order_total_after_store_credit returns a money instance","suite":"Order at ./spec/models/spree/order/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:1\"}}","suiteSourceFile":"core/spec/models/spree/order/store_credit_spec.rb"},{"name":"#display_order_total_after_store_credit returns the order_total_after_store_credit amount","suite":"Order at ./spec/models/spree/order/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:2\"}}","suiteSourceFile":"core/spec/models/spree/order/store_credit_spec.rb"},{"name":"#display_total_available_store_credit returns a money instance","suite":"Order at ./spec/models/spree/order/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:1\"}}","suiteSourceFile":"core/spec/models/spree/order/store_credit_spec.rb"},{"name":"#display_total_available_store_credit returns the total_available_store_credit amount","suite":"Order at ./spec/models/spree/order/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:2\"}}","suiteSourceFile":"core/spec/models/spree/order/store_credit_spec.rb"},{"name":"#display_store_credit_remaining_after_capture returns a money instance","suite":"Order at ./spec/models/spree/order/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:1\"}}","suiteSourceFile":"core/spec/models/spree/order/store_credit_spec.rb"},{"name":"#display_store_credit_remaining_after_capture returns all of the user's available store credit minus what's applied to the order amount","suite":"Order at ./spec/models/spree/order/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:2\"}}","suiteSourceFile":"core/spec/models/spree/order/store_credit_spec.rb"},{"name":"#tax_zone when no zones exist returns nil","suite":"Spree::Order at ./spec/models/spree/order/tax_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order/tax_spec.rb"},{"name":"#tax_zone when tax_using_ship_address: true calculates using ship_address","suite":"Spree::Order at ./spec/models/spree/order/tax_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order/tax_spec.rb"},{"name":"#tax_zone when tax_using_ship_address: false calculates using bill_address","suite":"Spree::Order at ./spec/models/spree/order/tax_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/order/tax_spec.rb"},{"name":"#tax_zone when there is a default tax zone when there is a matching zone returns the matching zone","suite":"Spree::Order at ./spec/models/spree/order/tax_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order/tax_spec.rb"},{"name":"#tax_zone when there is a default tax zone when there is no matching zone returns the default tax zone","suite":"Spree::Order at ./spec/models/spree/order/tax_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order/tax_spec.rb"},{"name":"#tax_zone when no default tax zone when there is a matching zone returns the matching zone","suite":"Spree::Order at ./spec/models/spree/order/tax_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order/tax_spec.rb"},{"name":"#tax_zone when no default tax zone when there is no matching zone returns nil","suite":"Spree::Order at ./spec/models/spree/order/tax_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order/tax_spec.rb"},{"name":"adds item to cart and activates promo item quantity changes recalculates order adjustments","suite":"Spree::Order at ./spec/models/spree/order/totals_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order/totals_spec.rb"},{"name":"#update_with_updater! when there are update hooks calls each of the update hooks","suite":"Spree::Order at ./spec/models/spree/order/updating_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order/updating_spec.rb"},{"name":"validations does not return two error messages when email is blank","suite":"Spree::Order at ./spec/models/spree/order/validations_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order/validations_spec.rb"},{"name":"#add adds line item if one does not exist","suite":"Spree::OrderContents at ./spec/models/spree/order_contents_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","suiteSourceFile":"core/spec/models/spree/order_contents_spec.rb"},{"name":"#add updates line item if one exists","suite":"Spree::OrderContents at ./spec/models/spree/order_contents_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","suiteSourceFile":"core/spec/models/spree/order_contents_spec.rb"},{"name":"#add updates order totals","suite":"Spree::OrderContents at ./spec/models/spree/order_contents_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","suiteSourceFile":"core/spec/models/spree/order_contents_spec.rb"},{"name":"#add given quantity is not explicitly provided adds one line item","suite":"Spree::OrderContents at ./spec/models/spree/order_contents_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order_contents_spec.rb"},{"name":"#add given a shipment ensure shipment calls update_amounts instead of order calling ensure_updated_shipments","suite":"Spree::OrderContents at ./spec/models/spree/order_contents_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order_contents_spec.rb"},{"name":"#add not given a shipment ensures updated shipments","suite":"Spree::OrderContents at ./spec/models/spree/order_contents_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/order_contents_spec.rb"},{"name":"#add when store_credits payment example at ./spec/models/spree/order_contents_spec.rb:65","suite":"Spree::OrderContents at ./spec/models/spree/order_contents_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7:1\"}}","suiteSourceFile":"core/spec/models/spree/order_contents_spec.rb"},{"name":"#add running promotions one active order promotion creates valid discount on order","suite":"Spree::OrderContents at ./spec/models/spree/order_contents_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order_contents_spec.rb"},{"name":"#add running promotions one active order promotion example at ./spec/models/spree/order_contents_spec.rb:75","suite":"Spree::OrderContents at ./spec/models/spree/order_contents_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8:1:2\"}}","suiteSourceFile":"core/spec/models/spree/order_contents_spec.rb"},{"name":"#add running promotions one active line item promotion creates valid discount on order","suite":"Spree::OrderContents at ./spec/models/spree/order_contents_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order_contents_spec.rb"},{"name":"#add running promotions one active line item promotion example at ./spec/models/spree/order_contents_spec.rb:75","suite":"Spree::OrderContents at ./spec/models/spree/order_contents_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8:2:2\"}}","suiteSourceFile":"core/spec/models/spree/order_contents_spec.rb"},{"name":"#remove reduces line_item quantity if quantity is less the line_item quantity","suite":"Spree::OrderContents at ./spec/models/spree/order_contents_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:5\"}}","suiteSourceFile":"core/spec/models/spree/order_contents_spec.rb"},{"name":"#remove removes line_item if quantity matches line_item quantity","suite":"Spree::OrderContents at ./spec/models/spree/order_contents_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:7\"}}","suiteSourceFile":"core/spec/models/spree/order_contents_spec.rb"},{"name":"#remove updates order totals","suite":"Spree::OrderContents at ./spec/models/spree/order_contents_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:8\"}}","suiteSourceFile":"core/spec/models/spree/order_contents_spec.rb"},{"name":"#remove given an invalid variant raises an exception","suite":"Spree::OrderContents at ./spec/models/spree/order_contents_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order_contents_spec.rb"},{"name":"#remove given quantity is not explicitly provided removes one line item","suite":"Spree::OrderContents at ./spec/models/spree/order_contents_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order_contents_spec.rb"},{"name":"#remove given a shipment ensure shipment calls update_amounts instead of order calling ensure_updated_shipments","suite":"Spree::OrderContents at ./spec/models/spree/order_contents_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:1\"}}","suiteSourceFile":"core/spec/models/spree/order_contents_spec.rb"},{"name":"#remove not given a shipment ensures updated shipments","suite":"Spree::OrderContents at ./spec/models/spree/order_contents_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:4:1\"}}","suiteSourceFile":"core/spec/models/spree/order_contents_spec.rb"},{"name":"#remove when store_credits payment example at ./spec/models/spree/order_contents_spec.rb:184","suite":"Spree::OrderContents at ./spec/models/spree/order_contents_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:6:1\"}}","suiteSourceFile":"core/spec/models/spree/order_contents_spec.rb"},{"name":"#remove_line_item removes line_item","suite":"Spree::OrderContents at ./spec/models/spree/order_contents_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4\"}}","suiteSourceFile":"core/spec/models/spree/order_contents_spec.rb"},{"name":"#remove_line_item updates order totals","suite":"Spree::OrderContents at ./spec/models/spree/order_contents_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:5\"}}","suiteSourceFile":"core/spec/models/spree/order_contents_spec.rb"},{"name":"#remove_line_item given a shipment ensure shipment calls update_amounts instead of order calling ensure_updated_shipments","suite":"Spree::OrderContents at ./spec/models/spree/order_contents_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order_contents_spec.rb"},{"name":"#remove_line_item not given a shipment ensures updated shipments","suite":"Spree::OrderContents at ./spec/models/spree/order_contents_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order_contents_spec.rb"},{"name":"#remove_line_item when store_credits payment example at ./spec/models/spree/order_contents_spec.rb:238","suite":"Spree::OrderContents at ./spec/models/spree/order_contents_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3:1\"}}","suiteSourceFile":"core/spec/models/spree/order_contents_spec.rb"},{"name":"update cart changes item quantity","suite":"Spree::OrderContents at ./spec/models/spree/order_contents_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/order_contents_spec.rb"},{"name":"update cart updates order totals","suite":"Spree::OrderContents at ./spec/models/spree/order_contents_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2\"}}","suiteSourceFile":"core/spec/models/spree/order_contents_spec.rb"},{"name":"update cart ensures updated shipments","suite":"Spree::OrderContents at ./spec/models/spree/order_contents_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:5\"}}","suiteSourceFile":"core/spec/models/spree/order_contents_spec.rb"},{"name":"update cart when store_credits payment example at ./spec/models/spree/order_contents_spec.rb:287","suite":"Spree::OrderContents at ./spec/models/spree/order_contents_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3:1\"}}","suiteSourceFile":"core/spec/models/spree/order_contents_spec.rb"},{"name":"update cart submits item quantity 0 removes item from order","suite":"Spree::OrderContents at ./spec/models/spree/order_contents_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:4:1\"}}","suiteSourceFile":"core/spec/models/spree/order_contents_spec.rb"},{"name":"update cart submits item quantity 0 doesnt try to update unexistent items","suite":"Spree::OrderContents at ./spec/models/spree/order_contents_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:4:2\"}}","suiteSourceFile":"core/spec/models/spree/order_contents_spec.rb"},{"name":"update cart submits item quantity 0 does not filter if there is only one line item","suite":"Spree::OrderContents at ./spec/models/spree/order_contents_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:4:3\"}}","suiteSourceFile":"core/spec/models/spree/order_contents_spec.rb"},{"name":"completed order updates order payment state","suite":"Spree::OrderContents at ./spec/models/spree/order_contents_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","suiteSourceFile":"core/spec/models/spree/order_contents_spec.rb"},{"name":"when order is missing inventory units creates the proper number of inventory units","suite":"Spree::OrderInventory at ./spec/models/spree/order_inventory_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order_inventory_spec.rb"},{"name":"#add_to_shipment creates stock_movement","suite":"Spree::OrderInventory at ./spec/models/spree/order_inventory_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:5\"}}","suiteSourceFile":"core/spec/models/spree/order_inventory_spec.rb"},{"name":"#add_to_shipment order is not completed doesn't unstock items","suite":"Spree::OrderInventory at ./spec/models/spree/order_inventory_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order_inventory_spec.rb"},{"name":"#add_to_shipment inventory units state sets inventory_units state as per stock location availability","suite":"Spree::OrderInventory at ./spec/models/spree/order_inventory_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order_inventory_spec.rb"},{"name":"#add_to_shipment store doesnt track inventory creates only on hand inventory units","suite":"Spree::OrderInventory at ./spec/models/spree/order_inventory_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:1\"}}","suiteSourceFile":"core/spec/models/spree/order_inventory_spec.rb"},{"name":"#add_to_shipment variant doesnt track inventory creates only on hand inventory units","suite":"Spree::OrderInventory at ./spec/models/spree/order_inventory_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:4:1\"}}","suiteSourceFile":"core/spec/models/spree/order_inventory_spec.rb"},{"name":"#determine_target_shipment selects first non-shipped shipment that already contains given variant","suite":"Spree::OrderInventory at ./spec/models/spree/order_inventory_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/order_inventory_spec.rb"},{"name":"#determine_target_shipment when no shipments already contain this varint selects first non-shipped shipment that leaves from same stock_location","suite":"Spree::OrderInventory at ./spec/models/spree/order_inventory_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order_inventory_spec.rb"},{"name":"when order has too many inventory units is a messed up order","suite":"Spree::OrderInventory at ./spec/models/spree/order_inventory_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/order_inventory_spec.rb"},{"name":"when order has too many inventory units decreases the number of inventory units","suite":"Spree::OrderInventory at ./spec/models/spree/order_inventory_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2\"}}","suiteSourceFile":"core/spec/models/spree/order_inventory_spec.rb"},{"name":"when order has too many inventory units #remove_from_shipment destroys backordered units first","suite":"Spree::OrderInventory at ./spec/models/spree/order_inventory_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3:2\"}}","suiteSourceFile":"core/spec/models/spree/order_inventory_spec.rb"},{"name":"when order has too many inventory units #remove_from_shipment destroys unshipped units first","suite":"Spree::OrderInventory at ./spec/models/spree/order_inventory_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3:3\"}}","suiteSourceFile":"core/spec/models/spree/order_inventory_spec.rb"},{"name":"when order has too many inventory units #remove_from_shipment only attempts to destroy as many units as are eligible, and return amount destroyed","suite":"Spree::OrderInventory at ./spec/models/spree/order_inventory_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3:4\"}}","suiteSourceFile":"core/spec/models/spree/order_inventory_spec.rb"},{"name":"when order has too many inventory units #remove_from_shipment destroys self if not inventory units remain","suite":"Spree::OrderInventory at ./spec/models/spree/order_inventory_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3:5\"}}","suiteSourceFile":"core/spec/models/spree/order_inventory_spec.rb"},{"name":"when order has too many inventory units #remove_from_shipment order is not completed doesn't restock items","suite":"Spree::OrderInventory at ./spec/models/spree/order_inventory_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order_inventory_spec.rb"},{"name":"when order has too many inventory units #remove_from_shipment inventory unit line item and variant points to different products completed order removes only units that match both line item and variant","suite":"Spree::OrderInventory at ./spec/models/spree/order_inventory_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3:6:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order_inventory_spec.rb"},{"name":"when order has too many inventory units #remove_from_shipment backordered items are removed doesn't create on_hand items from backordered items","suite":"Spree::OrderInventory at ./spec/models/spree/order_inventory_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3:7:1\"}}","suiteSourceFile":"core/spec/models/spree/order_inventory_spec.rb"},{"name":"destroys the other order","suite":"Spree::OrderMerger at ./spec/models/spree/order_merger_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","suiteSourceFile":"core/spec/models/spree/order_merger_spec.rb"},{"name":"persist the merge","suite":"Spree::OrderMerger at ./spec/models/spree/order_merger_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3\"}}","suiteSourceFile":"core/spec/models/spree/order_merger_spec.rb"},{"name":"when `discard_merged` is false keeps the other order","suite":"Spree::OrderMerger at ./spec/models/spree/order_merger_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order_merger_spec.rb"},{"name":"when `discard_merged` is false does not change the other order","suite":"Spree::OrderMerger at ./spec/models/spree/order_merger_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","suiteSourceFile":"core/spec/models/spree/order_merger_spec.rb"},{"name":"user is provided assigns user to new order","suite":"Spree::OrderMerger at ./spec/models/spree/order_merger_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/order_merger_spec.rb"},{"name":"merging together two orders with line items for the same variant example at ./spec/models/spree/order_merger_spec.rb:48","suite":"Spree::OrderMerger at ./spec/models/spree/order_merger_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","suiteSourceFile":"core/spec/models/spree/order_merger_spec.rb"},{"name":"merging using extension-specific line_item_comparison_hooks 2 equal line items example at ./spec/models/spree/order_merger_spec.rb:75","suite":"Spree::OrderMerger at ./spec/models/spree/order_merger_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order_merger_spec.rb"},{"name":"merging using extension-specific line_item_comparison_hooks 2 different line items example at ./spec/models/spree/order_merger_spec.rb:94","suite":"Spree::OrderMerger at ./spec/models/spree/order_merger_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order_merger_spec.rb"},{"name":"merging together two orders with different line items example at ./spec/models/spree/order_merger_spec.rb:117","suite":"Spree::OrderMerger at ./spec/models/spree/order_merger_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","suiteSourceFile":"core/spec/models/spree/order_merger_spec.rb"},{"name":"merging together orders with invalid line items creates errors with invalid line items","suite":"Spree::OrderMerger at ./spec/models/spree/order_merger_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1\"}}","suiteSourceFile":"core/spec/models/spree/order_merger_spec.rb"},{"name":"merging an order with addresses assigned to an other complete order destroys the other order","suite":"Spree::OrderMerger at ./spec/models/spree/order_merger_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1\"}}","suiteSourceFile":"core/spec/models/spree/order_merger_spec.rb"},{"name":"merging an order with a gift card merges the gift card","suite":"Spree::OrderMerger at ./spec/models/spree/order_merger_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1\"}}","suiteSourceFile":"core/spec/models/spree/order_merger_spec.rb"},{"name":"#name returns the same value as Promotion name","suite":"Spree::OrderPromotion at ./spec/models/spree/order_promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order_promotion_spec.rb"},{"name":"#description returns the same value as Promotion description","suite":"Spree::OrderPromotion at ./spec/models/spree/order_promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order_promotion_spec.rb"},{"name":"#amount equals sum of adjustments created by promotion","suite":"Spree::OrderPromotion at ./spec/models/spree/order_promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/order_promotion_spec.rb"},{"name":"#display_amount returns Spree::Money instance with amount value and proper currency","suite":"Spree::OrderPromotion at ./spec/models/spree/order_promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/order_promotion_spec.rb"},{"name":"#display_amount different currency return same currency as order","suite":"Spree::OrderPromotion at ./spec/models/spree/order_promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order_promotion_spec.rb"},{"name":"behaves like lifecycle events lifecycle events order.created publishes created event when record is created","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"behaves like lifecycle events lifecycle events order.updated publishes updated event when record is updated","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"behaves like lifecycle events lifecycle events order.deleted publishes deleted event when record is deleted","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:4","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:5","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:7","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:8","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:4\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:10","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:5\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:11","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:6\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"behaves like metadata reads data as symbolized keys","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:7\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"behaves like metadata reads data as not symbolized keys","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:8\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"behaves like metadata can query records by metadata properties","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:10\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"Scopes .complete example at ./spec/models/spree/order_spec.rb:27","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"Scopes .complete example at ./spec/models/spree/order_spec.rb:28","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:2\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"Scopes .incomplete example at ./spec/models/spree/order_spec.rb:32","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"Scopes .incomplete example at ./spec/models/spree/order_spec.rb:33","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:2\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"Scopes .not_canceled example at ./spec/models/spree/order_spec.rb:37","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"Scopes .multi_search returns orders based on an email","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"Scopes .multi_search returns orders based on the first name","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4:2\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"Scopes .multi_search returns orders based on the last name","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4:3\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"Scopes .multi_search returns orders based on the full name","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4:4\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"Callbacks #clone_shipping_address clones the shipping address when use_shipping is true","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"Callbacks #clone_shipping_address does not clone the shipping address when use_shipping is false","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:2\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#full_name for an order with user example at ./spec/models/spree/order_spec.rb:106","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#full_name for an order with user without name example at ./spec/models/spree/order_spec.rb:111","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#full_name for a guest order example at ./spec/models/spree/order_spec.rb:118","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#full_name for a guest order with billing address example at ./spec/models/spree/order_spec.rb:123","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#update_with_updater! expects to update order with order updater","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#allow_cancel? when all shipments are canceled or ready returns true","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#cancel marks the payments as void","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#cancel with incomplete payments marks the incomplete payments as void","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#cancel with incomplete payments voids transactions for incomplete payments","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2:2\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#after_cancel when gift card is present handles additional actions","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#after_cancel when no gift card handles additional actions","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#after_cancel events publishes order.canceled event","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:3:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#after_resume publishes order.resumed event","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#canceled_by cancels the order","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#canceled_by saves canceler_id","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#canceled_by has canceler","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:3\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#canceled_by when canceled_at is not given saves canceled_at to Time.current","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:4:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#canceled_by when canceled_at is given saves canceled_at to given time","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:5:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#canceled_by events publishes order.canceled event","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:6:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#create assigns an order number","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#create creates a randomized 35 character token","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:2\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"creates shipments cost update and persist totals","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#finalize! sets completed_at","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#finalize! sells inventory units","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:2\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#finalize! decreases the stock for each variant in the shipment","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:3\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#finalize! changes the shipment state to ready if order is paid","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:4\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#finalize! does not sell inventory units if track_inventory_levels is false","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:5\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#finalize! freezes all adjustments","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:6\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#finalize! order is considered risky changes state to risky","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:7:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#finalize! order is considered risky and order is approved leaves order in complete state","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:7:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#finalize! events publishes order.completed event","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:8:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"insufficient_stock_lines returns line_item that has insufficient stock on hand","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#ensure_line_item_variants_are_not_discontinued when variant is destroyed restarts checkout flow","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#ensure_line_item_variants_are_not_discontinued when variant is destroyed has error message","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:1:2\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#ensure_line_item_variants_are_not_discontinued when variant is destroyed is false","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:1:3\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#ensure_line_item_variants_are_not_discontinued when no variants are destroyed does not restart checkout","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#ensure_line_item_variants_are_not_discontinued when no variants are destroyed is true","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:2:2\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#ensure_line_items_are_in_stock restarts checkout flow","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:17:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#ensure_line_items_are_in_stock has error message","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:17:2\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#ensure_line_items_are_in_stock is false","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:17:3\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"empty! completed order raises an exception","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"empty! incomplete order clears out line items, adjustments and update totals","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#display_outstanding_balance returns the value as a spree money","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#display_item_total returns the value as a spree money","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:20:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#display_adjustment_total returns the value as a spree money","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:21:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#display_promo_total returns the value as a spree money","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:22:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#display_total returns the value as a spree money","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:23:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#currency when object currency is ABC returns the currency from the object","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:24:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#confirmation_required? is required if the state is currently 'confirm'","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:25:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#confirmation_required? Spree::Config[:always_include_confirm_step] == true returns true if payments empty","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:25:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#confirmation_required? Spree::Config[:always_include_confirm_step] == false returns false if payments empty and Spree::Config[:always_include_confirm_step] == false","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:25:3:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#confirmation_required? Spree::Config[:always_include_confirm_step] == false does not bomb out when an order has an unpersisted payment","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:25:3:2\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#confirmation_required? when the payment does not require confirmation example at ./spec/models/spree/order_spec.rb:618","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:25:4:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#confirmation_required? when at least one payment method requires confirmation example at ./spec/models/spree/order_spec.rb:627","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:25:5:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"add_update_hook calls hook during update","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:26:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"add_update_hook calls hook during finalize","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:26:2\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#tax_address when tax_using_ship_address is true returns ship_address","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:27:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#tax_address when tax_using_ship_address is not true returns bill_address","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:27:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#restart_checkout_flow updates the state column to the first checkout_steps value","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:28:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#restart_checkout_flow without line items updates the state column to cart","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:28:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#restart_checkout_flow events publishes order.updated event","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:28:3:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#state_changed logs state changes","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#state_changed does not do anything if state does not change","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:2\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#collect_frontend_payment_methods includes frontend payment methods","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:30:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#collect_frontend_payment_methods includes 'both' payment methods","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:30:2\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#collect_frontend_payment_methods does not include backend payment method","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:30:3\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#collect_frontend_payment_methods does not include inactive payment methods","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:30:4\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#collect_frontend_payment_methods does not include a payment method that is not suitable for this order","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:30:5\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#collect_frontend_payment_methods does not include a payment method from different stores","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:30:6\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#apply_free_shipping_promotions calls out to the FreeShipping promotion handler","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:31:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#products gets the quantity of a given variant","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:32:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#products can find a line item matching a given variant","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:32:2\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#products match line item with options matches line item when options match","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:32:3:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#products match line item with options does not match line item without options","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:32:3:2\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#associate_user! when email is set when email should be overridden behaves like #associate_user! associates a user to an order","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:33:1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#associate_user! when email is set when email should be overridden behaves like #associate_user! does not persist the order","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:33:1:1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#associate_user! when email is set when email should not be overridden behaves like #associate_user! associates a user to an order","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:33:1:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#associate_user! when email is set when email should not be overridden behaves like #associate_user! does not persist the order","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:33:1:2:1:2\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#associate_user! when created_by is set behaves like #associate_user! associates a user to an order","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:33:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#associate_user! when created_by is set behaves like #associate_user! does not persist the order","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:33:2:1:2\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#associate_user! when bill_address is set behaves like #associate_user! associates a user to an order","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:33:3:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#associate_user! when bill_address is set behaves like #associate_user! does not persist the order","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:33:3:1:2\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#associate_user! when ship_address is set behaves like #associate_user! associates a user to an order","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:33:4:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#associate_user! when ship_address is set behaves like #associate_user! does not persist the order","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:33:4:1:2\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#associate_user! when the user is not persisted does not persist the user","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:33:5:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#associate_user! when the user is not persisted behaves like #associate_user! associates a user to an order","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:33:5:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#associate_user! when the user is not persisted behaves like #associate_user! does not persist the order","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:33:5:2:2\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#associate_user! when the order is persisted associates a user to a persisted order","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:33:6:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#associate_user! when the order is persisted does not persist other changes to the order","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:33:6:2\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#associate_user! when the order is persisted does not change any other orders","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:33:6:3\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#associate_user! when the order is persisted is not affected by scoping","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:33:6:4\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#associate_user! when the order is persisted behaves like #associate_user! associates a user to an order","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:33:6:5:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#associate_user! events publishes order.updated event","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:33:7:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#disassociate_user! disassociates a user from an order","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:34:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#approved_by sets approver_id","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:35:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#approved_by sets approved_at","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:35:2\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#approved_by calls approve!","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:35:3\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#approved_by events publishes order.approved event","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:35:4:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#considered_risky! sets considered_risky to true","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:36:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#considered_risky! events publishes order.updated event","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:36:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#approve! sets considered_risky to false","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:37:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#approve! events publishes order.approved event","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:37:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#ensure_updated_shipments when order has shipments and is not completed destroys all shipments","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:38:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#ensure_updated_shipments when order has shipments and is not completed resets shipment_total to 0","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:38:1:2\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#ensure_updated_shipments when order has shipments and is not completed restarts checkout flow","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:38:1:3\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#ensure_updated_shipments when order has shipments and is not completed events publishes order.updated event","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:38:1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#ensure_updated_shipments when order is completed does not destroy shipments","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:38:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#can_ship? is true for order in the 'complete' state","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:39:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#can_ship? is true for order in the 'resumed' state","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:39:2\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#can_ship? is true for an order in the 'awaiting return' state","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:39:3\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#can_ship? is true for an order in the 'returned' state","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:39:4\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#can_ship? is false if the order is neither in the 'complete' nor 'resumed' state","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:39:5\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#can_be_deleted? when order is completed behaves like cannot be destroyed example at ./spec/models/spree/order_spec.rb:1140","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:40:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#can_be_deleted? when order has finalized payments behaves like cannot be destroyed example at ./spec/models/spree/order_spec.rb:1140","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:40:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#can_be_deleted? when order is not completed and does not have finalized payments can be destroyed","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:40:3:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#uneditable? returns true when order is completed","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:41:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#uneditable? returns true when order is canceled","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:41:2\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#uneditable? returns true when order is returned","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:41:3\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#uneditable? returns false when order is during checkout","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:41:4\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#completed? indicates if order is completed","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:42:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#allow_checkout? is true if there are line_items in the order","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:43:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#allow_checkout? is false if there are no line_items in the order","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:43:2\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#amount returns the correct sum of items","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:44:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#backordered? is backordered if one of the shipments is backordered","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:45:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#can_cancel? is false for completed order in the canceled state","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:46:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#can_cancel? is true for completed order with no shipment","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:46:2\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#tax_total adds included tax and additional tax","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:47:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"locking can lock","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:48:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#pre_tax_item_amount sums all of the line items' pre tax amounts","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:49:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#display_pre_tax_item_amount returns the value as a spree money","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:50:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#pre_tax_total sums all of the line items' and shipments pre tax amounts","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:51:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#display_pre_tax_total returns the value as a spree money","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:52:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#analytics_subtotal returns the subtotal used for analytics integrations","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:53:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#quantity sums the quantity of all line items","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:54:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#has_non_reimbursement_related_refunds? no refunds exist example at ./spec/models/spree/order_spec.rb:1348","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:55:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#has_non_reimbursement_related_refunds? a non-reimbursement related refund exists example at ./spec/models/spree/order_spec.rb:1355","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:55:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#has_non_reimbursement_related_refunds? an old-style refund exists example at ./spec/models/spree/order_spec.rb:1369","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:55:3:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#has_non_reimbursement_related_refunds? a reimbursement related refund exists example at ./spec/models/spree/order_spec.rb:1377","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:55:4:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#create_proposed_shipments assigns the coordinator returned shipments to its shipments","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:56:2\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#create_proposed_shipments has unassociated inventory units when shipped does not delete inventory_unit","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:56:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#create_proposed_shipments has unassociated inventory units when returned does not delete inventory_unit","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:56:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#create_proposed_shipments has unassociated inventory units when on_hand deletes inventory_unit","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:56:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#create_proposed_shipments has unassociated inventory units when backordered deletes inventory_unit","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:56:1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#all_inventory_units_returned? all inventory units are returned is true","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:57:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#all_inventory_units_returned? some inventory units are returned is false","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:57:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#all_inventory_units_returned? no inventory units are returned is false","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:57:3:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#fully_discounted? the order had no inventory-related cost example at ./spec/models/spree/order_spec.rb:1493","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:58:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#fully_discounted? the order had inventory-related cost example at ./spec/models/spree/order_spec.rb:1507","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:58:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#promo_code without promo code returns nil","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:59:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#promo_code with promo code with single coupon code returns the promotion code","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:59:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#promo_code with promo code with coupon code batches returns the promotion code","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:59:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#promo_code with promo code with coupon code batches returns the same promotion code after line item removal","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:59:2:2:2\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"order transit to returned state from resumed state when all inventory_units returned example at ./spec/models/spree/order_spec.rb:1568","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:60:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"order transit to returned state from resumed state when some inventory_units returned example at ./spec/models/spree/order_spec.rb:1577","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:60:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#credit_card_nil_payment when zero amount credit-card payment expect not to build a new payment","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:61:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#credit_card_nil_payment when valid-amount(>0) creditcard payment expect not to build a new payment","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:61:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#collect_backend_payment_methods example at ./spec/models/spree/order_spec.rb:1608","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:62:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#collect_backend_payment_methods example at ./spec/models/spree/order_spec.rb:1609","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:62:2\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#collect_backend_payment_methods example at ./spec/models/spree/order_spec.rb:1610","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:62:3\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#create_shipment_tax_charge! when order has shipments example at ./spec/models/spree/order_spec.rb:1625","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:63:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#create_shipment_tax_charge! when order has shipments example at ./spec/models/spree/order_spec.rb:1626","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:63:1:2\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#create_shipment_tax_charge! when order has shipments example at ./spec/models/spree/order_spec.rb:1627","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:63:1:3\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#create_shipment_tax_charge! when order has no shipments example at ./spec/models/spree/order_spec.rb:1635","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:63:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#shipping_eq_billing_address with only bill address example at ./spec/models/spree/order_spec.rb:1643","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:64:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#shipping_eq_billing_address blank addresses example at ./spec/models/spree/order_spec.rb:1652","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:64:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#shipping_eq_billing_address no addresses example at ./spec/models/spree/order_spec.rb:1661","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:64:3:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#destroying order will trigger ship and bill addresses destroy example at ./spec/models/spree/order_spec.rb:1668","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:65:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#valid_promotions without promotions expect to return an empty array","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:66:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#valid_promotions with promotions expect return valid order promotions","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:66:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#cart_promo_total without promotions returns 0","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:67:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#cart_promo_total with promotions free shipping includes free shipping prromo","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:67:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#cart_promo_total with promotions free shipping returns 0","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:67:2:1:2\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#cart_promo_total with promotions line item discount includes line item promo","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:67:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#cart_promo_total with promotions line item discount reeturns -100.0","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:67:2:2:2\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#cart_promo_total with promotions order discount includes order promo","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:67:2:3:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#cart_promo_total with promotions order discount reeturns -10.0","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:67:2:3:2\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#cart_promo_total with promotions multiple promotions includes all promotions","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:67:2:4:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#cart_promo_total with promotions multiple promotions returns -110.00","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:67:2:4:2\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#has_free_shipping? when promotion is applied example at ./spec/models/spree/order_spec.rb:1823","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:68:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#has_free_shipping? when promotion is applied when free shipping promotion has item total rule when order total is in defined range example at ./spec/models/spree/order_spec.rb:1835","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:68:1:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#has_free_shipping? when promotion is applied when free shipping promotion has item total rule when order total is not in defined range example at ./spec/models/spree/order_spec.rb:1841","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:68:1:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#has_free_shipping? when promotion is not applied example at ./spec/models/spree/order_spec.rb:1847","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:68:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#uppercase_number example at ./spec/models/spree/order_spec.rb:1854","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:69:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"bill_address_id= when assigned address exist when assigned address belongs to user assigns address to order as bill address","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:70:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"bill_address_id= when assigned address exist when assigned address belongs to user does not set address as user default bill address","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:70:1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"bill_address_id= when assigned address does not belong to user sets order bill address to nil","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:70:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"bill_address_id= with guest user when assigning the same existing address does nothing","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:70:3:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"bill_address_id= with guest user when assigning a different existing address sets order bill address to nil","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:70:3:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#bill_address_attributes= when user has default bill address changes user default bill address","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:71:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#bill_address_attributes= when user has no default address assigns a new default address","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:71:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#bill_address_attributes= when user does not have any addresses changes user default bill addresss","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:71:3:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#bill_address_attributes= when user has address but without default bill address changes user default bill addresss","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:71:4:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"ship_address_id= when assigned address exist when assigned address belongs to user assigns address to order as ship address","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:72:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"ship_address_id= when assigned address exist when assigned address belongs to user does not set address as user default ship address","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:72:1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"ship_address_id= when assigned address does not belong to user sets order ship address to nil","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:72:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"ship_address_id= with guest user when assigning the same existing address does nothing","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:72:3:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"ship_address_id= with guest user when assigning a different existing address sets order ship address to nil","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:72:3:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#ship_address_attributes= when user has default ship address changes user default ship addresss","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:73:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#ship_address_attributes= when user has no default address assigns a new default address","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:73:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#ship_address_attributes= when user does not have any addresses changes user default ship address","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:73:3:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#ship_address_attributes= when user has address but without default ship address changes user default ship address","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:73:4:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#paid? when all order valid payments are completed when the amount of the valid payments < the order total example at ./spec/models/spree/order_spec.rb:2086","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:74:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#paid? when all order valid payments are completed when the amount of the valid payments == the order total example at ./spec/models/spree/order_spec.rb:2092","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:74:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#paid? when all order valid payments are completed when the amount of the valid payments > the order total example at ./spec/models/spree/order_spec.rb:2098","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:74:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#paid? when not all order payments are completed one is void when the amount of the valid payments < the order total example at ./spec/models/spree/order_spec.rb:2112","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:74:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#paid? when not all order payments are completed one is void when the amount of the valid payments == the order total example at ./spec/models/spree/order_spec.rb:2118","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:74:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#paid? when not all order payments are completed one is void when the amount of the valid payments > the order total example at ./spec/models/spree/order_spec.rb:2124","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:74:2:3:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#paid? when not all order payments are completed one is failed when the amount of the valid payments < the order total example at ./spec/models/spree/order_spec.rb:2140","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:74:3:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#paid? when not all order payments are completed one is failed when the amount of the valid payments == the order total example at ./spec/models/spree/order_spec.rb:2146","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:74:3:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#paid? when not all order payments are completed one is failed when the amount of the valid payments > the order total example at ./spec/models/spree/order_spec.rb:2152","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:74:3:3:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#paid? when not all order payments are completed one is invalid when the amount of the valid payments < the order total example at ./spec/models/spree/order_spec.rb:2168","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:74:4:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#paid? when not all order payments are completed one is invalid when the amount of the valid payments == the order total example at ./spec/models/spree/order_spec.rb:2174","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:74:4:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#paid? when not all order payments are completed one is invalid when the amount of the valid payments > the order total example at ./spec/models/spree/order_spec.rb:2180","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:74:4:3:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#fully_shipped? when all order shipments were shipped example at ./spec/models/spree/order_spec.rb:2209","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:75:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#fully_shipped? when not all order shipments were shipped example at ./spec/models/spree/order_spec.rb:2213","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:75:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#total_weight example at ./spec/models/spree/order_spec.rb:2230","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:76:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#partially_refunded? when orders has refunds when sum of refunds is less than max amount which could be refunded returns true","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:77:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#partially_refunded? when orders has refunds when sum of refunds is equal to max amount which could be refunded returns false","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:77:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#partially_refunded? when orders has refunds when sum of refunds is greater than max amount which could be refunded returns false","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:77:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#partially_refunded? when orders has refunds when payment is void returns false","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:77:1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#partially_refunded? when orders has refunds when payment is failed returns false","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:77:1:5:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#partially_refunded? when order does not have refunds returns false","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:77:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#order_refunded? when orders has refunds when sum of refunds is less than max amount which could be refunded returns false","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:78:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#order_refunded? when orders has refunds when sum of refunds is equal to max amount which could be refunded returns true","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:78:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#order_refunded? when orders has refunds when payment is void returns true","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:78:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#order_refunded? when order does not have refunds returns false","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:78:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#payment_method returns the payment method","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:79:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#payment_source returns the payment source","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:80:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#backordered_variants returns the backordered variants","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:81:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#line_items_without_shipping_rates when order has no shipments returns an empty array","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:82:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#line_items_without_shipping_rates when order has shipments with no shipping rates returns the line items without shipping rates","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:82:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#line_items_without_shipping_rates when order has shipments with shipping rates returns an empty array","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:82:3:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#ensure_available_shipping_rates when order has no shipments returns false and adds an error to the order","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:83:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#ensure_available_shipping_rates when order has shipments with no shipping rates returns false and adds an error to the order","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:83:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#ensure_available_shipping_rates when order has shipments with no shipping rates deletes all the shipments","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:83:2:2\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#ensure_available_shipping_rates when order has shipments with shipping rates returns nil and does not add an error to the order","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:83:3:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#to_csv when order has no line items returns no csv lines","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:84:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"#to_csv when order has line items returns the csv lines","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:84:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"quick checkout #quick_checkout? returns false if the order has no shipping address","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:85:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"quick checkout #quick_checkout? returns false if the order has a shipping address but it is not a quick checkout address","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:85:1:2\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"quick checkout #quick_checkout? returns true if the order has a quick checkout shipping address","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:85:1:3\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"quick checkout #quick_checkout_available? returns true if the order is fully digital","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:85:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"quick checkout #quick_checkout_available? returns true if the order has no digital products at all","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:85:2:2\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"quick checkout #quick_checkout_available? returns false if the order has physical products and some digital products","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:85:2:3\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"quick checkout #quick_checkout_available? returns false if order has many shipments","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:85:2:4\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"quick checkout #quick_checkout_available? returns false if order does not require payment","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:85:2:5\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"quick checkout #quick_checkout_require_address? returns true if the order is not digital and delivery is required","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:85:3:1\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"quick checkout #quick_checkout_require_address? returns false if the order is digital","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:85:3:2\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"quick checkout #quick_checkout_require_address? returns false if the order does not require delivery","suite":"Spree::Order at ./spec/models/spree/order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:85:3:3\"}}","suiteSourceFile":"core/spec/models/spree/order_spec.rb"},{"name":"state change","suite":"Spree::OrderUpdater at ./spec/models/spree/order_updater_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5\"}}","suiteSourceFile":"core/spec/models/spree/order_updater_spec.rb"},{"name":"order totals updates payment totals","suite":"Spree::OrderUpdater at ./spec/models/spree/order_updater_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order_updater_spec.rb"},{"name":"order totals update item total","suite":"Spree::OrderUpdater at ./spec/models/spree/order_updater_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/order_updater_spec.rb"},{"name":"order totals update shipment total","suite":"Spree::OrderUpdater at ./spec/models/spree/order_updater_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/models/spree/order_updater_spec.rb"},{"name":"order totals update order adjustments","suite":"Spree::OrderUpdater at ./spec/models/spree/order_updater_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","suiteSourceFile":"core/spec/models/spree/order_updater_spec.rb"},{"name":"order totals with order promotion followed by line item addition updates promotion total","suite":"Spree::OrderUpdater at ./spec/models/spree/order_updater_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/order_updater_spec.rb"},{"name":"#update_with_updater! updates item count","suite":"Spree::OrderUpdater at ./spec/models/spree/order_updater_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order_updater_spec.rb"},{"name":"updating shipment state is backordered","suite":"Spree::OrderUpdater at ./spec/models/spree/order_updater_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/order_updater_spec.rb"},{"name":"updating shipment state is nil","suite":"Spree::OrderUpdater at ./spec/models/spree/order_updater_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","suiteSourceFile":"core/spec/models/spree/order_updater_spec.rb"},{"name":"updating shipment state is shipped","suite":"Spree::OrderUpdater at ./spec/models/spree/order_updater_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3\"}}","suiteSourceFile":"core/spec/models/spree/order_updater_spec.rb"},{"name":"updating shipment state is ready","suite":"Spree::OrderUpdater at ./spec/models/spree/order_updater_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4\"}}","suiteSourceFile":"core/spec/models/spree/order_updater_spec.rb"},{"name":"updating shipment state is pending","suite":"Spree::OrderUpdater at ./spec/models/spree/order_updater_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:5\"}}","suiteSourceFile":"core/spec/models/spree/order_updater_spec.rb"},{"name":"updating shipment state is partial","suite":"Spree::OrderUpdater at ./spec/models/spree/order_updater_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:6\"}}","suiteSourceFile":"core/spec/models/spree/order_updater_spec.rb"},{"name":"updating payment state is failed if no valid payments","suite":"Spree::OrderUpdater at ./spec/models/spree/order_updater_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/order_updater_spec.rb"},{"name":"updating payment state payment total is greater than order total is credit_owed","suite":"Spree::OrderUpdater at ./spec/models/spree/order_updater_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order_updater_spec.rb"},{"name":"updating payment state order total is greater than payment total is balance_due","suite":"Spree::OrderUpdater at ./spec/models/spree/order_updater_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3:1\"}}","suiteSourceFile":"core/spec/models/spree/order_updater_spec.rb"},{"name":"updating payment state order total equals payment total is paid","suite":"Spree::OrderUpdater at ./spec/models/spree/order_updater_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:4:1\"}}","suiteSourceFile":"core/spec/models/spree/order_updater_spec.rb"},{"name":"updating payment state order is canceled and is still unpaid is void","suite":"Spree::OrderUpdater at ./spec/models/spree/order_updater_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:5:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order_updater_spec.rb"},{"name":"updating payment state order is canceled and is paid is credit_owed","suite":"Spree::OrderUpdater at ./spec/models/spree/order_updater_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:5:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order_updater_spec.rb"},{"name":"updating payment state order is canceled and payment is refunded is void","suite":"Spree::OrderUpdater at ./spec/models/spree/order_updater_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:5:3:1\"}}","suiteSourceFile":"core/spec/models/spree/order_updater_spec.rb"},{"name":"completed order #update updates payment state","suite":"Spree::OrderUpdater at ./spec/models/spree/order_updater_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1:1\"}}","suiteSourceFile":"core/spec/models/spree/order_updater_spec.rb"},{"name":"completed order #update updates shipment state","suite":"Spree::OrderUpdater at ./spec/models/spree/order_updater_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1:2\"}}","suiteSourceFile":"core/spec/models/spree/order_updater_spec.rb"},{"name":"completed order #update updates shipments total again after updating shipments","suite":"Spree::OrderUpdater at ./spec/models/spree/order_updater_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1:3\"}}","suiteSourceFile":"core/spec/models/spree/order_updater_spec.rb"},{"name":"completed order #update_shipments updates each shipment","suite":"Spree::OrderUpdater at ./spec/models/spree/order_updater_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2:1\"}}","suiteSourceFile":"core/spec/models/spree/order_updater_spec.rb"},{"name":"completed order #update_shipments refreshes shipment rates","suite":"Spree::OrderUpdater at ./spec/models/spree/order_updater_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2:2\"}}","suiteSourceFile":"core/spec/models/spree/order_updater_spec.rb"},{"name":"completed order #update_shipments updates the shipment amount","suite":"Spree::OrderUpdater at ./spec/models/spree/order_updater_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2:3\"}}","suiteSourceFile":"core/spec/models/spree/order_updater_spec.rb"},{"name":"completed order #update_shipments refresh rates keeps the original shipping method","suite":"Spree::OrderUpdater at ./spec/models/spree/order_updater_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2:4:1\"}}","suiteSourceFile":"core/spec/models/spree/order_updater_spec.rb"},{"name":"incomplete order doesnt update payment state","suite":"Spree::OrderUpdater at ./spec/models/spree/order_updater_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","suiteSourceFile":"core/spec/models/spree/order_updater_spec.rb"},{"name":"incomplete order doesnt update shipment state","suite":"Spree::OrderUpdater at ./spec/models/spree/order_updater_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2\"}}","suiteSourceFile":"core/spec/models/spree/order_updater_spec.rb"},{"name":"incomplete order doesnt update each shipment","suite":"Spree::OrderUpdater at ./spec/models/spree/order_updater_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:3\"}}","suiteSourceFile":"core/spec/models/spree/order_updater_spec.rb"},{"name":"incomplete order #update_shipments resets shipping method to frontend-available","suite":"Spree::OrderUpdater at ./spec/models/spree/order_updater_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:4:1\"}}","suiteSourceFile":"core/spec/models/spree/order_updater_spec.rb"},{"name":"payment.paid event publishes payment.paid when payment state changes to completed","suite":"Spree::Payment::CustomEvents at ./spec/models/spree/payment/custom_events_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/payment/custom_events_spec.rb"},{"name":"payment.paid event does not publish payment.paid when state changes to something other than completed","suite":"Spree::Payment::CustomEvents at ./spec/models/spree/payment/custom_events_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/payment/custom_events_spec.rb"},{"name":"payment.paid event does not publish when events are disabled","suite":"Spree::Payment::CustomEvents at ./spec/models/spree/payment/custom_events_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/models/spree/payment/custom_events_spec.rb"},{"name":"order.paid event publishes order.paid when payment completes and order is fully paid","suite":"Spree::Payment::CustomEvents at ./spec/models/spree/payment/custom_events_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/payment/custom_events_spec.rb"},{"name":"order.paid event does not publish order.paid when order still has outstanding balance","suite":"Spree::Payment::CustomEvents at ./spec/models/spree/payment/custom_events_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","suiteSourceFile":"core/spec/models/spree/payment/custom_events_spec.rb"},{"name":"#order example at ./spec/models/spree/payment/gateway_options_spec.rb:50","suite":"Spree::Payment::GatewayOptions at ./spec/models/spree/payment/gateway_options_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/payment/gateway_options_spec.rb"},{"name":"#payment example at ./spec/models/spree/payment/gateway_options_spec.rb:56","suite":"Spree::Payment::GatewayOptions at ./spec/models/spree/payment/gateway_options_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/payment/gateway_options_spec.rb"},{"name":"#payment_id example at ./spec/models/spree/payment/gateway_options_spec.rb:62","suite":"Spree::Payment::GatewayOptions at ./spec/models/spree/payment/gateway_options_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/payment/gateway_options_spec.rb"},{"name":"#email example at ./spec/models/spree/payment/gateway_options_spec.rb:68","suite":"Spree::Payment::GatewayOptions at ./spec/models/spree/payment/gateway_options_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/payment/gateway_options_spec.rb"},{"name":"#customer example at ./spec/models/spree/payment/gateway_options_spec.rb:74","suite":"Spree::Payment::GatewayOptions at ./spec/models/spree/payment/gateway_options_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","suiteSourceFile":"core/spec/models/spree/payment/gateway_options_spec.rb"},{"name":"#customer_id example at ./spec/models/spree/payment/gateway_options_spec.rb:80","suite":"Spree::Payment::GatewayOptions at ./spec/models/spree/payment/gateway_options_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","suiteSourceFile":"core/spec/models/spree/payment/gateway_options_spec.rb"},{"name":"#ip example at ./spec/models/spree/payment/gateway_options_spec.rb:86","suite":"Spree::Payment::GatewayOptions at ./spec/models/spree/payment/gateway_options_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","suiteSourceFile":"core/spec/models/spree/payment/gateway_options_spec.rb"},{"name":"#order_id example at ./spec/models/spree/payment/gateway_options_spec.rb:92","suite":"Spree::Payment::GatewayOptions at ./spec/models/spree/payment/gateway_options_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1\"}}","suiteSourceFile":"core/spec/models/spree/payment/gateway_options_spec.rb"},{"name":"#shipping example at ./spec/models/spree/payment/gateway_options_spec.rb:98","suite":"Spree::Payment::GatewayOptions at ./spec/models/spree/payment/gateway_options_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1\"}}","suiteSourceFile":"core/spec/models/spree/payment/gateway_options_spec.rb"},{"name":"#tax example at ./spec/models/spree/payment/gateway_options_spec.rb:104","suite":"Spree::Payment::GatewayOptions at ./spec/models/spree/payment/gateway_options_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1\"}}","suiteSourceFile":"core/spec/models/spree/payment/gateway_options_spec.rb"},{"name":"#subtotal example at ./spec/models/spree/payment/gateway_options_spec.rb:110","suite":"Spree::Payment::GatewayOptions at ./spec/models/spree/payment/gateway_options_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1\"}}","suiteSourceFile":"core/spec/models/spree/payment/gateway_options_spec.rb"},{"name":"#discount example at ./spec/models/spree/payment/gateway_options_spec.rb:116","suite":"Spree::Payment::GatewayOptions at ./spec/models/spree/payment/gateway_options_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:1\"}}","suiteSourceFile":"core/spec/models/spree/payment/gateway_options_spec.rb"},{"name":"#currency example at ./spec/models/spree/payment/gateway_options_spec.rb:122","suite":"Spree::Payment::GatewayOptions at ./spec/models/spree/payment/gateway_options_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:1\"}}","suiteSourceFile":"core/spec/models/spree/payment/gateway_options_spec.rb"},{"name":"#billing_address example at ./spec/models/spree/payment/gateway_options_spec.rb:128","suite":"Spree::Payment::GatewayOptions at ./spec/models/spree/payment/gateway_options_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:1\"}}","suiteSourceFile":"core/spec/models/spree/payment/gateway_options_spec.rb"},{"name":"#shipping_address example at ./spec/models/spree/payment/gateway_options_spec.rb:134","suite":"Spree::Payment::GatewayOptions at ./spec/models/spree/payment/gateway_options_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:1\"}}","suiteSourceFile":"core/spec/models/spree/payment/gateway_options_spec.rb"},{"name":"#to_hash example at ./spec/models/spree/payment/gateway_options_spec.rb:158","suite":"Spree::Payment::GatewayOptions at ./spec/models/spree/payment/gateway_options_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:1\"}}","suiteSourceFile":"core/spec/models/spree/payment/gateway_options_spec.rb"},{"name":"#cancel! a store credit attempts to cancels the payment","suite":"Payment at ./spec/models/spree/payment/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/payment/store_credit_spec.rb"},{"name":"#cancel! a store credit cancels successfully voids the payment","suite":"Payment at ./spec/models/spree/payment/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/payment/store_credit_spec.rb"},{"name":"#cancel! a store credit does not cancel successfully does not change the payment state","suite":"Payment at ./spec/models/spree/payment/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/payment/store_credit_spec.rb"},{"name":"#authorize without an invalid store credit declines an unknown store credit","suite":"Spree::PaymentMethod::StoreCredit at ./spec/models/spree/payment_method/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_method/store_credit_spec.rb"},{"name":"#authorize with insuffient funds declines a store credit","suite":"Spree::PaymentMethod::StoreCredit at ./spec/models/spree/payment_method/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_method/store_credit_spec.rb"},{"name":"#authorize when the currency does not match the order currency declines the credit","suite":"Spree::PaymentMethod::StoreCredit at ./spec/models/spree/payment_method/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_method/store_credit_spec.rb"},{"name":"#authorize with a valid request authorizes a valid store credit","suite":"Spree::PaymentMethod::StoreCredit at ./spec/models/spree/payment_method/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_method/store_credit_spec.rb"},{"name":"#authorize with a valid request with an originator passes the originator","suite":"Spree::PaymentMethod::StoreCredit at ./spec/models/spree/payment_method/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:2:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_method/store_credit_spec.rb"},{"name":"#capture with an invalid auth code declines an unknown store credit","suite":"Spree::PaymentMethod::StoreCredit at ./spec/models/spree/payment_method/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_method/store_credit_spec.rb"},{"name":"#capture when unable to authorize the amount declines a store credit","suite":"Spree::PaymentMethod::StoreCredit at ./spec/models/spree/payment_method/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_method/store_credit_spec.rb"},{"name":"#capture when the currency does not match the order currency declines the credit","suite":"Spree::PaymentMethod::StoreCredit at ./spec/models/spree/payment_method/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_method/store_credit_spec.rb"},{"name":"#capture with a valid request captures the store credit","suite":"Spree::PaymentMethod::StoreCredit at ./spec/models/spree/payment_method/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:4:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_method/store_credit_spec.rb"},{"name":"#capture with a valid request with an originator passes the originator","suite":"Spree::PaymentMethod::StoreCredit at ./spec/models/spree/payment_method/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:4:2:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_method/store_credit_spec.rb"},{"name":"#void voids a valid store credit void request","suite":"Spree::PaymentMethod::StoreCredit at ./spec/models/spree/payment_method/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3\"}}","suiteSourceFile":"core/spec/models/spree/payment_method/store_credit_spec.rb"},{"name":"#void with an invalid auth code declines an unknown store credit","suite":"Spree::PaymentMethod::StoreCredit at ./spec/models/spree/payment_method/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_method/store_credit_spec.rb"},{"name":"#void when the store credit is not voided successfully returns an error response","suite":"Spree::PaymentMethod::StoreCredit at ./spec/models/spree/payment_method/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_method/store_credit_spec.rb"},{"name":"#void with an originator passes the originator","suite":"Spree::PaymentMethod::StoreCredit at ./spec/models/spree/payment_method/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_method/store_credit_spec.rb"},{"name":"#purchase declines a purchase if it can't find a pending credit for the correct amount","suite":"Spree::PaymentMethod::StoreCredit at ./spec/models/spree/payment_method/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_method/store_credit_spec.rb"},{"name":"#purchase captures a purchase if it can find a pending credit for the correct amount","suite":"Spree::PaymentMethod::StoreCredit at ./spec/models/spree/payment_method/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2\"}}","suiteSourceFile":"core/spec/models/spree/payment_method/store_credit_spec.rb"},{"name":"#credit with an invalid auth code declines an unknown store credit","suite":"Spree::PaymentMethod::StoreCredit at ./spec/models/spree/payment_method/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_method/store_credit_spec.rb"},{"name":"#credit when the store credit isn't credited successfully returns an error response","suite":"Spree::PaymentMethod::StoreCredit at ./spec/models/spree/payment_method/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_method/store_credit_spec.rb"},{"name":"#credit with a valid credit request credits a valid store credit credit request","suite":"Spree::PaymentMethod::StoreCredit at ./spec/models/spree/payment_method/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_method/store_credit_spec.rb"},{"name":"#credit with an originator passes the originator","suite":"Spree::PaymentMethod::StoreCredit at ./spec/models/spree/payment_method/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:4:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_method/store_credit_spec.rb"},{"name":"#cancel store credit event found creates a store credit for the same amount that was captured","suite":"Spree::PaymentMethod::StoreCredit at ./spec/models/spree/payment_method/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_method/store_credit_spec.rb"},{"name":"#cancel store credit event found returns a valid store credit cancel request","suite":"Spree::PaymentMethod::StoreCredit at ./spec/models/spree/payment_method/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1:2\"}}","suiteSourceFile":"core/spec/models/spree/payment_method/store_credit_spec.rb"},{"name":"#cancel store credit event not found returns an error response","suite":"Spree::PaymentMethod::StoreCredit at ./spec/models/spree/payment_method/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_method/store_credit_spec.rb"},{"name":"#available_for_order? when user have store credits example at ./spec/models/spree/payment_method/store_credit_spec.rb:302","suite":"Spree::PaymentMethod::StoreCredit at ./spec/models/spree/payment_method/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_method/store_credit_spec.rb"},{"name":"#available_for_order? when user don't store credits example at ./spec/models/spree/payment_method/store_credit_spec.rb:309","suite":"Spree::PaymentMethod::StoreCredit at ./spec/models/spree/payment_method/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_method/store_credit_spec.rb"},{"name":"#available_for_order? when order has a gift card example at ./spec/models/spree/payment_method/store_credit_spec.rb:316","suite":"Spree::PaymentMethod::StoreCredit at ./spec/models/spree/payment_method/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:3:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_method/store_credit_spec.rb"},{"name":"#source_required? example at ./spec/models/spree/payment_method/store_credit_spec.rb:323","suite":"Spree::PaymentMethod::StoreCredit at ./spec/models/spree/payment_method/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_method/store_credit_spec.rb"},{"name":"#payment_source_class example at ./spec/models/spree/payment_method/store_credit_spec.rb:329","suite":"Spree::PaymentMethod::StoreCredit at ./spec/models/spree/payment_method/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_method/store_credit_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:4","suite":"Spree::PaymentMethod at ./spec/models/spree/payment_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_method_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:5","suite":"Spree::PaymentMethod at ./spec/models/spree/payment_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/payment_method_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:7","suite":"Spree::PaymentMethod at ./spec/models/spree/payment_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/models/spree/payment_method_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:8","suite":"Spree::PaymentMethod at ./spec/models/spree/payment_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","suiteSourceFile":"core/spec/models/spree/payment_method_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:10","suite":"Spree::PaymentMethod at ./spec/models/spree/payment_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","suiteSourceFile":"core/spec/models/spree/payment_method_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:11","suite":"Spree::PaymentMethod at ./spec/models/spree/payment_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","suiteSourceFile":"core/spec/models/spree/payment_method_spec.rb"},{"name":"behaves like metadata reads data as symbolized keys","suite":"Spree::PaymentMethod at ./spec/models/spree/payment_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7\"}}","suiteSourceFile":"core/spec/models/spree/payment_method_spec.rb"},{"name":"behaves like metadata reads data as not symbolized keys","suite":"Spree::PaymentMethod at ./spec/models/spree/payment_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8\"}}","suiteSourceFile":"core/spec/models/spree/payment_method_spec.rb"},{"name":"behaves like metadata can query records by metadata properties","suite":"Spree::PaymentMethod at ./spec/models/spree/payment_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:10\"}}","suiteSourceFile":"core/spec/models/spree/payment_method_spec.rb"},{"name":"visibility scopes has 5 total methods","suite":"Spree::PaymentMethod at ./spec/models/spree/payment_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_method_spec.rb"},{"name":"visibility scopes #available returns all methods available to front-end/back-end","suite":"Spree::PaymentMethod at ./spec/models/spree/payment_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_method_spec.rb"},{"name":"visibility scopes #available_on_front_end returns all methods available to front-end","suite":"Spree::PaymentMethod at ./spec/models/spree/payment_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_method_spec.rb"},{"name":"visibility scopes #available_on_back_end returns all methods available to back-end","suite":"Spree::PaymentMethod at ./spec/models/spree/payment_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:4:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_method_spec.rb"},{"name":"visibility scopes #for_store returns all methods available to front-end/back-end for a store","suite":"Spree::PaymentMethod at ./spec/models/spree/payment_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:5:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_method_spec.rb"},{"name":"#auto_capture? when auto_capture is nil and when Spree::Config[:auto_capture] is false is false","suite":"Spree::PaymentMethod at ./spec/models/spree/payment_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_method_spec.rb"},{"name":"#auto_capture? when auto_capture is nil and when Spree::Config[:auto_capture] is true is true","suite":"Spree::PaymentMethod at ./spec/models/spree/payment_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_method_spec.rb"},{"name":"#auto_capture? when auto_capture is not nil and is true is true","suite":"Spree::PaymentMethod at ./spec/models/spree/payment_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_method_spec.rb"},{"name":"#auto_capture? when auto_capture is not nil and is false is true","suite":"Spree::PaymentMethod at ./spec/models/spree/payment_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_method_spec.rb"},{"name":"#available_for_order? when the order is not covered by store credit example at ./spec/models/spree/payment_method_spec.rb:136","suite":"Spree::PaymentMethod at ./spec/models/spree/payment_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_method_spec.rb"},{"name":"#available_for_order? when the order is partially covered by store credit example at ./spec/models/spree/payment_method_spec.rb:142","suite":"Spree::PaymentMethod at ./spec/models/spree/payment_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_method_spec.rb"},{"name":"#available_for_order? when the order is fully covered by store credit example at ./spec/models/spree/payment_method_spec.rb:148","suite":"Spree::PaymentMethod at ./spec/models/spree/payment_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_method_spec.rb"},{"name":"#available_for_store? returns true when passed a nil value","suite":"Spree::PaymentMethod at ./spec/models/spree/payment_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_method_spec.rb"},{"name":"#available_for_store? returns false if currenct store id is not included","suite":"Spree::PaymentMethod at ./spec/models/spree/payment_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2\"}}","suiteSourceFile":"core/spec/models/spree/payment_method_spec.rb"},{"name":"#available_for_store? returns true if currenct store id is included","suite":"Spree::PaymentMethod at ./spec/models/spree/payment_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3\"}}","suiteSourceFile":"core/spec/models/spree/payment_method_spec.rb"},{"name":"#source_required? example at ./spec/models/spree/payment_method_spec.rb:175","suite":"Spree::PaymentMethod at ./spec/models/spree/payment_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_method_spec.rb"},{"name":"#payment_source_class example at ./spec/models/spree/payment_method_spec.rb:181","suite":"Spree::PaymentMethod at ./spec/models/spree/payment_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_method_spec.rb"},{"name":"#payment_icon_name example at ./spec/models/spree/payment_method_spec.rb:185","suite":"Spree::PaymentMethod at ./spec/models/spree/payment_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_method_spec.rb"},{"name":"when payment method is destroyed destroys the payment method","suite":"Spree::PaymentMethod at ./spec/models/spree/payment_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_method_spec.rb"},{"name":"#gateway_customer when user is present returns the gateway customer for the user","suite":"Spree::PaymentSource at ./spec/models/spree/payment_source_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_source_spec.rb"},{"name":"#gateway_customer when user is not present returns nil","suite":"Spree::PaymentSource at ./spec/models/spree/payment_source_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_source_spec.rb"},{"name":"behaves like lifecycle events lifecycle events payment.created publishes created event when record is created","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"behaves like lifecycle events lifecycle events payment.updated publishes updated event when record is updated","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"behaves like lifecycle events lifecycle events payment.deleted publishes deleted event when record is deleted","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:4","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:5","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:7","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:8","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:4\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:10","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:5\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:11","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:6\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"behaves like metadata reads data as symbolized keys","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:7\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"behaves like metadata reads data as not symbolized keys","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:8\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"behaves like metadata can query records by metadata properties","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:10\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"Constants example at ./spec/models/spree/payment_spec.rb:55","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"Scopes .valid example at ./spec/models/spree/payment_spec.rb:78","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"Scopes .valid example at ./spec/models/spree/payment_spec.rb:79","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:2\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"Scopes .valid example at ./spec/models/spree/payment_spec.rb:80","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:3\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"Scopes .valid example at ./spec/models/spree/payment_spec.rb:81","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:4\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"after_initialize :set_amount when associated with an order sets the amount to the order total minus the payment total","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"after_initialize :set_amount when associated with an order when the amount is already set does not set the amount","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"after_initialize :set_amount when not associated with an order does not set the amount","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":".risky does not return successful responses","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"#captured_amount calculates based on capture events with 0 capture events","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"#captured_amount calculates based on capture events with some capture events","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1:2\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"#uncaptured_amount calculates based on capture events with 0 capture events","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"#uncaptured_amount calculates based on capture events with some capture events","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1:2\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"Validations returns useful error messages when source is invalid","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:3\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"Validations when payment source is not required do not validate source presence","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"Validations with payment source required validate source presence","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:2:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"Validations with payment source required when skip_source_requirement is set to true does not validate source presence","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"Validations amount validation with an associated order when the amount is greater than the max amount is invalid","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:4:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"Validations amount validation with an associated order when the amount is less than the max amount example at ./spec/models/spree/payment_spec.rb:211","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:4:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"Callbacks #update_order when destroying completed payment updates the order","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"Callbacks #update_order when voiding a payment updates the order","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"Callbacks #create_payment_profile when payment method supports profiles when source is a credit card creates a payment profile","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:2:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"Callbacks #create_payment_profile when payment method supports profiles when source is not a credit card creates a payment profile","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:2:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"failure transitions to failed from pending state","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"failure transitions to failed from processing state","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"invalidate transitions from checkout to invalid","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"processing #process! purchases if with auto_capture","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:1:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"processing #process! authorizes without auto_capture","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:1:2\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"processing #process! makes the state 'processing'","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:1:3\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"processing #process! invalidates if payment method doesnt support source","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:1:4\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"processing #process! allows payments with a gateway_customer_profile_id","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:1:5\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"processing #process! allows payments with a gateway_payment_profile_id","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:1:6\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"processing #authorize! calls authorize on the gateway with the payment amount","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:2:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"processing #authorize! calls authorize on the gateway with the currency code","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:2:2\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"processing #authorize! logs the response","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:2:3\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"processing #authorize! if successful stores the response_code, avs_response and cvv_response fields","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:2:4:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"processing #authorize! if successful makes payment pending","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:2:4:2\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"processing #authorize! if unsuccessful when response is returned from gateway marks payment as failed","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:2:5:1:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"processing #authorize! if unsuccessful when there is an error connecting to the gateway raises ActiveMerchant::ConnectionError and marks payment as failed","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:2:5:2:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"processing #purchase! calls purchase on the gateway with the payment amount","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:3:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"processing #purchase! logs the response","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:3:2\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"processing #purchase! if successful stores the response_code and avs_response","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:3:3:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"processing #purchase! if successful makes payment complete","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:3:3:2\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"processing #purchase! if successful logs a capture event","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:3:3:3\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"processing #purchase! if successful sets the uncaptured amount to 0","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:3:3:4\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"processing #purchase! if unsuccessful when response is returned from gateway makes payment failed","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:3:4:1:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"processing #purchase! if unsuccessful when response is returned from gateway does not log a capture event","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:3:4:1:2\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"processing #purchase! if unsuccessful when there is an error connecting to the gateway raises ActiveMerchant::ConnectionError and marks payment as failed","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:3:4:2:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"processing #confirm! for automatically captured payments makes the payment complete","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:4:1:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"processing #confirm! for automatically captured payments logs a capture event","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:4:1:2\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"processing #confirm! for automatically captured payments when payment is already completed keeps the payment completed","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:4:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"processing #confirm! for automatically captured payments when payment is already completed does not log a duplicated capture event","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:4:1:3:2\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"processing #confirm! for manually captured payments makes the payment pending","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:4:2:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"processing #confirm! for manually captured payments when payment is already pending keeps the payment pending","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:4:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"processing #capture! when payment is pending if successful for entire amount makes payment complete","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:5:1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"processing #capture! when payment is pending if successful for entire amount logs capture events","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:5:1:1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"processing #capture! when payment is pending if successful for partial amount makes payment complete & create pending payment for remaining amount","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:5:1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"processing #capture! when payment is pending if successful for partial amount logs capture events","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:5:1:1:2:2\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"processing #capture! when payment is pending if unsuccessful when response is returned from gateway does not make payment complete","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:5:1:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"processing #capture! when payment is pending if unsuccessful when there is an error connecting to the gateway raises ActiveMerchant::ConnectionError and marks payment as failed","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:5:1:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"processing #capture! when payment is completed does nothing","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:5:2:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"processing #void_transaction! logs the response","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:6:3\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"processing #void_transaction! when profiles are supported calls payment_gateway.void with the payment's response_code","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:6:1:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"processing #void_transaction! when profiles are not supported calls payment_gateway.void with the payment's response_code","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:6:2:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"processing #void_transaction! if successful updates the response_code with the authorization from the gateway","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:6:4:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"processing #void_transaction! if unsuccessful when response is returned from gateway does not void the payment","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:6:5:1:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"processing #void_transaction! if unsuccessful when there is an error connecting to the gateway raises ActiveMerchant::ConnectionError and marks payment as failed","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:6:5:2:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"processing #void_transaction! if payment is already voided does not void the payment","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:6:6:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"processing #void_transaction! if response_code is blank voids the payment without calling the gateway","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:6:7:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"when already processing returns nil without trying to process the source","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"with source required raises an error if no source is specified example at ./spec/models/spree/payment_spec.rb:727","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:1:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"with source optional raises no error if source is not specified example at ./spec/models/spree/payment_spec.rb:740","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:1:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"#credit_allowed is the difference between offsets total and payment amount","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:17:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"#can_credit? is true if credit_allowed > 0","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"#can_credit? is false if credit_allowed is 0","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:2\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"#save captured payments update order payment total","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:1:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"#save not completed payments doesn't update order payment total","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:2:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"#save not completed payments requires a payment method","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:2:2\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"#save when the payment was completed but now void updates order payment total","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:3:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"#save completed orders updates payment_state and shipments","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:4:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"#save when profiles are supported when there is an error connecting to the gateway calls gateway_error","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:5:1:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"#save when profiles are supported with multiple payment attempts does not try to create profiles on old failed payment attempts","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:5:2:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"#save when profiles are supported when successfully connecting to the gateway creates a payment profile","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:5:3:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"#save when profiles are not supported does not create a payment profile","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:6:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"#build_source builds the payment's source","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:20:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"#build_source assigns user and gateway to payment source","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:20:2\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"#build_source errors when payment source not valid","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:20:3\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"#build_source does not build a new source when duplicating the model with source_attributes set","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:20:4\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"#build_source existing card assigns the existing card","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:20:5:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"#currency returns the order currency","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:21:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"#display_amount returns a Spree::Money for this amount","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:22:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"#gateway_options contains an IP","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:23:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"#gateway_options contains the email address from a persisted order","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:23:2\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"#amount= when the amount is a string amount is a decimal #amount","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:24:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"#amount= when the amount is a string amount is an integer #amount","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:24:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"#amount= when the amount is a string amount contains a dollar sign #amount","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:24:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"#amount= when the amount is a string amount contains a comma #amount","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:24:1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"#amount= when the amount is a string amount contains a negative sign #amount","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:24:1:5:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"#amount= when the amount is a string amount is invalid #amount","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:24:1:6:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"#amount= when the amount is a string amount is an empty string #amount","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:24:1:7:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"#amount= when the amount is a number #amount","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:24:2:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"#amount= when the locale uses a coma as a decimal separator amount is a decimal #amount","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:24:3:1:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"#amount= when the locale uses a coma as a decimal separator amount contains a $ sign #amount","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:24:3:2:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"#amount= when the locale uses a coma as a decimal separator amount is a number #amount","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:24:3:3:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"#amount= when the locale uses a coma as a decimal separator amount contains a negative sign #amount","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:24:3:4:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"#amount= when the locale uses a coma as a decimal separator amount uses a dot as a decimal separator #amount","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:24:3:5:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"is_avs_risky? returns false if avs_response included in NON_RISKY_AVS_CODES","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:25:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"is_avs_risky? returns false if avs_response.blank?","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:25:2\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"is_avs_risky? returns true if avs_response in RISKY_AVS_CODES","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:25:3\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"is_cvv_risky? returns false if cvv_response_code == 'M'","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:26:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"is_cvv_risky? returns false if cvv_response_code == nil","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:26:2\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"is_cvv_risky? returns false if cvv_response_message == ''","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:26:3\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"is_cvv_risky? returns true if cvv_response_code == [A-Z], omitting D","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:26:4\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"#editable? when the state is 'checkout' example at ./spec/models/spree/payment_spec.rb:1164","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:27:1:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"#editable? when the state is 'pending' example at ./spec/models/spree/payment_spec.rb:1170","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:27:2:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"#editable? when the state is 'processing' example at ./spec/models/spree/payment_spec.rb:1177","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:27:3:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"#editable? when the state is 'completed' example at ./spec/models/spree/payment_spec.rb:1177","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:27:4:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"#editable? when the state is 'failed' example at ./spec/models/spree/payment_spec.rb:1177","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:27:5:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"#editable? when the state is 'void' example at ./spec/models/spree/payment_spec.rb:1177","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:27:6:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"#editable? when the state is 'invalid' example at ./spec/models/spree/payment_spec.rb:1177","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:27:7:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"state changes are logged to the database","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:28:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"#source with source required enabled example at ./spec/models/spree/payment_spec.rb:1207","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:1:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"#source with source required enabled example at ./spec/models/spree/payment_spec.rb:1208","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:1:2\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"#source with source required enabled when credit card is removed example at ./spec/models/spree/payment_spec.rb:1216","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"#source with source required enabled when credit card is removed example at ./spec/models/spree/payment_spec.rb:1217","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:1:3:2\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"#source with source required disabled example at ./spec/models/spree/payment_spec.rb:1224","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:2:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"#display_source_name for source with display_name returns the display name of the source class","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:30:1:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"#display_source_name for source without display_name returns the display name of the source class","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:30:2:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"#gateway_dashboard_payment_url returns nil","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:31:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"#gateway_dashboard_payment_url when implemented returns the url","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:31:2:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"#add_gateway_processing_error adds a gateway processing error","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:32:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"#add_gateway_processing_error when the metafield already exists adds a gateway processing error","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:32:2:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"#has_invalid_state? when the state is invalid example at ./spec/models/spree/payment_spec.rb:1306","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:33:1:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"#has_invalid_state? when the state is valid example at ./spec/models/spree/payment_spec.rb:1312","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:33:2:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"#gateway_processing_error_messages returns the gateway processing error messages","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:34:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"events completed state transition publishes payment.completed event","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:35:1:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"events voided state transition publishes payment.voided event","suite":"Spree::Payment at ./spec/models/spree/payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:35:2:1\"}}","suiteSourceFile":"core/spec/models/spree/payment_spec.rb"},{"name":"role-based permissions user with single role applies the permission sets for the role","suite":"Permission Sets Integration with Ability at ./spec/models/spree/permission_sets/ability_integration_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/ability_integration_spec.rb"},{"name":"role-based permissions user with multiple roles combines permission sets from all roles","suite":"Permission Sets Integration with Ability at ./spec/models/spree/permission_sets/ability_integration_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/ability_integration_spec.rb"},{"name":"role-based permissions user with unconfigured role falls back to legacy behavior","suite":"Permission Sets Integration with Ability at ./spec/models/spree/permission_sets/ability_integration_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/ability_integration_spec.rb"},{"name":"default role applies default permissions to non-persisted users","suite":"Permission Sets Integration with Ability at ./spec/models/spree/permission_sets/ability_integration_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/ability_integration_spec.rb"},{"name":"admin role applies super user permissions to admin users","suite":"Permission Sets Integration with Ability at ./spec/models/spree/permission_sets/ability_integration_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/ability_integration_spec.rb"},{"name":"permission configuration API allows configuring permissions like Solidus","suite":"Permission Sets Integration with Ability at ./spec/models/spree/permission_sets/ability_integration_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/ability_integration_spec.rb"},{"name":"permission configuration API allows clearing permissions from a role","suite":"Permission Sets Integration with Ability at ./spec/models/spree/permission_sets/ability_integration_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/ability_integration_spec.rb"},{"name":"#initialize stores the ability","suite":"Spree::PermissionSets::Base at ./spec/models/spree/permission_sets/base_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/base_spec.rb"},{"name":"#activate! raises NotImplementedError","suite":"Spree::PermissionSets::Base at ./spec/models/spree/permission_sets/base_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/base_spec.rb"},{"name":"delegation methods #can delegates to ability","suite":"Spree::PermissionSets::Base at ./spec/models/spree/permission_sets/base_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/base_spec.rb"},{"name":"delegation methods #cannot delegates to ability","suite":"Spree::PermissionSets::Base at ./spec/models/spree/permission_sets/base_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/base_spec.rb"},{"name":"delegation methods #can? delegates to ability","suite":"Spree::PermissionSets::Base at ./spec/models/spree/permission_sets/base_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3:1\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/base_spec.rb"},{"name":"delegation methods #user returns the user from the ability","suite":"Spree::PermissionSets::Base at ./spec/models/spree/permission_sets/base_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4:1\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/base_spec.rb"},{"name":"delegation methods #store returns the store from the ability","suite":"Spree::PermissionSets::Base at ./spec/models/spree/permission_sets/base_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:5:1\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/base_spec.rb"},{"name":"#activate! catalog read access grants read access to Country","suite":"Spree::PermissionSets::DefaultCustomer at ./spec/models/spree/permission_sets/default_customer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/default_customer_spec.rb"},{"name":"#activate! catalog read access grants read access to Product","suite":"Spree::PermissionSets::DefaultCustomer at ./spec/models/spree/permission_sets/default_customer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/default_customer_spec.rb"},{"name":"#activate! catalog read access grants read access to Variant","suite":"Spree::PermissionSets::DefaultCustomer at ./spec/models/spree/permission_sets/default_customer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/default_customer_spec.rb"},{"name":"#activate! catalog read access grants read access to Taxon","suite":"Spree::PermissionSets::DefaultCustomer at ./spec/models/spree/permission_sets/default_customer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:4\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/default_customer_spec.rb"},{"name":"#activate! catalog read access grants read access to Store","suite":"Spree::PermissionSets::DefaultCustomer at ./spec/models/spree/permission_sets/default_customer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:5\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/default_customer_spec.rb"},{"name":"#activate! order permissions allows creating orders","suite":"Spree::PermissionSets::DefaultCustomer at ./spec/models/spree/permission_sets/default_customer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/default_customer_spec.rb"},{"name":"#activate! order permissions with user order allows viewing own order","suite":"Spree::PermissionSets::DefaultCustomer at ./spec/models/spree/permission_sets/default_customer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/default_customer_spec.rb"},{"name":"#activate! order permissions with user order allows updating own incomplete order","suite":"Spree::PermissionSets::DefaultCustomer at ./spec/models/spree/permission_sets/default_customer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:2\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/default_customer_spec.rb"},{"name":"#activate! order permissions with user order prevents updating own completed order","suite":"Spree::PermissionSets::DefaultCustomer at ./spec/models/spree/permission_sets/default_customer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:3\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/default_customer_spec.rb"},{"name":"#activate! order permissions with token allows viewing order with correct token","suite":"Spree::PermissionSets::DefaultCustomer at ./spec/models/spree/permission_sets/default_customer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:3:1\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/default_customer_spec.rb"},{"name":"#activate! order permissions with token allows updating incomplete order with correct token","suite":"Spree::PermissionSets::DefaultCustomer at ./spec/models/spree/permission_sets/default_customer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:3:2\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/default_customer_spec.rb"},{"name":"#activate! order permissions with token prevents viewing order with incorrect token","suite":"Spree::PermissionSets::DefaultCustomer at ./spec/models/spree/permission_sets/default_customer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:3:3\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/default_customer_spec.rb"},{"name":"#activate! user account permissions allows viewing own user","suite":"Spree::PermissionSets::DefaultCustomer at ./spec/models/spree/permission_sets/default_customer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/default_customer_spec.rb"},{"name":"#activate! user account permissions allows updating own user","suite":"Spree::PermissionSets::DefaultCustomer at ./spec/models/spree/permission_sets/default_customer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:2\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/default_customer_spec.rb"},{"name":"#activate! user account permissions allows destroying own user","suite":"Spree::PermissionSets::DefaultCustomer at ./spec/models/spree/permission_sets/default_customer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:3\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/default_customer_spec.rb"},{"name":"#activate! user account permissions prevents viewing other user","suite":"Spree::PermissionSets::DefaultCustomer at ./spec/models/spree/permission_sets/default_customer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:4\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/default_customer_spec.rb"},{"name":"#activate! user account permissions allows creating new user","suite":"Spree::PermissionSets::DefaultCustomer at ./spec/models/spree/permission_sets/default_customer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:5\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/default_customer_spec.rb"},{"name":"#activate! with non-persisted user allows viewing self","suite":"Spree::PermissionSets::DefaultCustomer at ./spec/models/spree/permission_sets/default_customer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/default_customer_spec.rb"},{"name":"#activate! with non-persisted user allows updating self","suite":"Spree::PermissionSets::DefaultCustomer at ./spec/models/spree/permission_sets/default_customer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:2\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/default_customer_spec.rb"},{"name":"#activate! address permissions allows managing own address","suite":"Spree::PermissionSets::DefaultCustomer at ./spec/models/spree/permission_sets/default_customer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5:1\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/default_customer_spec.rb"},{"name":"#activate! address permissions prevents managing other user address","suite":"Spree::PermissionSets::DefaultCustomer at ./spec/models/spree/permission_sets/default_customer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5:2\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/default_customer_spec.rb"},{"name":"#activate! address permissions with guest user (non-persisted) prevents guest user from managing addresses with nil user_id (IDOR protection)","suite":"Spree::PermissionSets::DefaultCustomer at ./spec/models/spree/permission_sets/default_customer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5:3:1\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/default_customer_spec.rb"},{"name":"#activate! address permissions with guest user (non-persisted) prevents guest user from editing other guest addresses (IDOR protection)","suite":"Spree::PermissionSets::DefaultCustomer at ./spec/models/spree/permission_sets/default_customer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5:3:2\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/default_customer_spec.rb"},{"name":"#activate! address permissions with guest user (non-persisted) prevents guest user from updating other guest addresses (IDOR protection)","suite":"Spree::PermissionSets::DefaultCustomer at ./spec/models/spree/permission_sets/default_customer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5:3:3\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/default_customer_spec.rb"},{"name":"#activate! address permissions with guest user (non-persisted) prevents guest user from reading other guest addresses (IDOR protection)","suite":"Spree::PermissionSets::DefaultCustomer at ./spec/models/spree/permission_sets/default_customer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5:3:4\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/default_customer_spec.rb"},{"name":"#activate! credit card permissions allows reading own credit card","suite":"Spree::PermissionSets::DefaultCustomer at ./spec/models/spree/permission_sets/default_customer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6:1\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/default_customer_spec.rb"},{"name":"#activate! credit card permissions allows destroying own credit card","suite":"Spree::PermissionSets::DefaultCustomer at ./spec/models/spree/permission_sets/default_customer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6:2\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/default_customer_spec.rb"},{"name":"#activate! credit card permissions prevents reading other user credit card","suite":"Spree::PermissionSets::DefaultCustomer at ./spec/models/spree/permission_sets/default_customer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6:3\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/default_customer_spec.rb"},{"name":"#activate! wishlist permissions allows managing own wishlist","suite":"Spree::PermissionSets::DefaultCustomer at ./spec/models/spree/permission_sets/default_customer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7:1\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/default_customer_spec.rb"},{"name":"#activate! wishlist permissions allows viewing public wishlist","suite":"Spree::PermissionSets::DefaultCustomer at ./spec/models/spree/permission_sets/default_customer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7:2\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/default_customer_spec.rb"},{"name":"#activate! wishlist permissions prevents viewing private wishlist","suite":"Spree::PermissionSets::DefaultCustomer at ./spec/models/spree/permission_sets/default_customer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7:3\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/default_customer_spec.rb"},{"name":"#activate! admin permissions does not grant admin access","suite":"Spree::PermissionSets::DefaultCustomer at ./spec/models/spree/permission_sets/default_customer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8:1\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/default_customer_spec.rb"},{"name":"#activate! admin permissions does not grant manage access to Product","suite":"Spree::PermissionSets::DefaultCustomer at ./spec/models/spree/permission_sets/default_customer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8:2\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/default_customer_spec.rb"},{"name":"#activate! grants manage access to Order","suite":"Spree::PermissionSets::OrderManagement at ./spec/models/spree/permission_sets/order_management_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/order_management_spec.rb"},{"name":"#activate! grants manage access to Payment","suite":"Spree::PermissionSets::OrderManagement at ./spec/models/spree/permission_sets/order_management_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/order_management_spec.rb"},{"name":"#activate! grants manage access to Shipment","suite":"Spree::PermissionSets::OrderManagement at ./spec/models/spree/permission_sets/order_management_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/order_management_spec.rb"},{"name":"#activate! grants manage access to Adjustment","suite":"Spree::PermissionSets::OrderManagement at ./spec/models/spree/permission_sets/order_management_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/order_management_spec.rb"},{"name":"#activate! grants manage access to LineItem","suite":"Spree::PermissionSets::OrderManagement at ./spec/models/spree/permission_sets/order_management_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/order_management_spec.rb"},{"name":"#activate! grants manage access to ReturnAuthorization","suite":"Spree::PermissionSets::OrderManagement at ./spec/models/spree/permission_sets/order_management_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/order_management_spec.rb"},{"name":"#activate! grants manage access to CustomerReturn","suite":"Spree::PermissionSets::OrderManagement at ./spec/models/spree/permission_sets/order_management_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/order_management_spec.rb"},{"name":"#activate! grants manage access to Reimbursement","suite":"Spree::PermissionSets::OrderManagement at ./spec/models/spree/permission_sets/order_management_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/order_management_spec.rb"},{"name":"#activate! grants manage access to Refund","suite":"Spree::PermissionSets::OrderManagement at ./spec/models/spree/permission_sets/order_management_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:9\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/order_management_spec.rb"},{"name":"#activate! does not grant manage access to Product","suite":"Spree::PermissionSets::OrderManagement at ./spec/models/spree/permission_sets/order_management_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:10\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/order_management_spec.rb"},{"name":"#activate! order restrictions allows canceling orders that allow cancellation","suite":"Spree::PermissionSets::OrderManagement at ./spec/models/spree/permission_sets/order_management_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:11:1\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/order_management_spec.rb"},{"name":"#activate! order restrictions prevents canceling orders that do not allow cancellation","suite":"Spree::PermissionSets::OrderManagement at ./spec/models/spree/permission_sets/order_management_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:11:2\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/order_management_spec.rb"},{"name":"#activate! order restrictions allows destroying orders that can be deleted","suite":"Spree::PermissionSets::OrderManagement at ./spec/models/spree/permission_sets/order_management_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:11:3\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/order_management_spec.rb"},{"name":"#activate! order restrictions prevents destroying orders that cannot be deleted","suite":"Spree::PermissionSets::OrderManagement at ./spec/models/spree/permission_sets/order_management_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:11:4\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/order_management_spec.rb"},{"name":"#activate! grants manage access to Product","suite":"Spree::PermissionSets::ProductManagement at ./spec/models/spree/permission_sets/product_management_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/product_management_spec.rb"},{"name":"#activate! grants manage access to Variant","suite":"Spree::PermissionSets::ProductManagement at ./spec/models/spree/permission_sets/product_management_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/product_management_spec.rb"},{"name":"#activate! grants manage access to OptionType","suite":"Spree::PermissionSets::ProductManagement at ./spec/models/spree/permission_sets/product_management_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/product_management_spec.rb"},{"name":"#activate! grants manage access to OptionValue","suite":"Spree::PermissionSets::ProductManagement at ./spec/models/spree/permission_sets/product_management_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/product_management_spec.rb"},{"name":"#activate! grants manage access to Property","suite":"Spree::PermissionSets::ProductManagement at ./spec/models/spree/permission_sets/product_management_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/product_management_spec.rb"},{"name":"#activate! grants manage access to ProductProperty","suite":"Spree::PermissionSets::ProductManagement at ./spec/models/spree/permission_sets/product_management_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/product_management_spec.rb"},{"name":"#activate! grants manage access to Taxon","suite":"Spree::PermissionSets::ProductManagement at ./spec/models/spree/permission_sets/product_management_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/product_management_spec.rb"},{"name":"#activate! grants manage access to Taxonomy","suite":"Spree::PermissionSets::ProductManagement at ./spec/models/spree/permission_sets/product_management_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/product_management_spec.rb"},{"name":"#activate! grants manage access to Classification","suite":"Spree::PermissionSets::ProductManagement at ./spec/models/spree/permission_sets/product_management_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:9\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/product_management_spec.rb"},{"name":"#activate! grants manage access to Price","suite":"Spree::PermissionSets::ProductManagement at ./spec/models/spree/permission_sets/product_management_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:10\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/product_management_spec.rb"},{"name":"#activate! does not grant manage access to Order","suite":"Spree::PermissionSets::ProductManagement at ./spec/models/spree/permission_sets/product_management_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:11\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/product_management_spec.rb"},{"name":"#activate! does not grant manage access to User","suite":"Spree::PermissionSets::ProductManagement at ./spec/models/spree/permission_sets/product_management_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:12\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/product_management_spec.rb"},{"name":"#activate! grants manage access to all resources","suite":"Spree::PermissionSets::SuperUser at ./spec/models/spree/permission_sets/super_user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/super_user_spec.rb"},{"name":"#activate! grants manage access to Order","suite":"Spree::PermissionSets::SuperUser at ./spec/models/spree/permission_sets/super_user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/super_user_spec.rb"},{"name":"#activate! grants manage access to Product","suite":"Spree::PermissionSets::SuperUser at ./spec/models/spree/permission_sets/super_user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/super_user_spec.rb"},{"name":"#activate! order restrictions allows canceling orders that allow cancellation","suite":"Spree::PermissionSets::SuperUser at ./spec/models/spree/permission_sets/super_user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/super_user_spec.rb"},{"name":"#activate! order restrictions prevents canceling orders that do not allow cancellation","suite":"Spree::PermissionSets::SuperUser at ./spec/models/spree/permission_sets/super_user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:2\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/super_user_spec.rb"},{"name":"#activate! order restrictions allows destroying orders that can be deleted","suite":"Spree::PermissionSets::SuperUser at ./spec/models/spree/permission_sets/super_user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:3\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/super_user_spec.rb"},{"name":"#activate! order restrictions prevents destroying orders that cannot be deleted","suite":"Spree::PermissionSets::SuperUser at ./spec/models/spree/permission_sets/super_user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:4\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/super_user_spec.rb"},{"name":"#activate! immutable types allows editing mutable refund reasons","suite":"Spree::PermissionSets::SuperUser at ./spec/models/spree/permission_sets/super_user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5:1\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/super_user_spec.rb"},{"name":"#activate! immutable types prevents editing immutable refund reasons","suite":"Spree::PermissionSets::SuperUser at ./spec/models/spree/permission_sets/super_user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5:2\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/super_user_spec.rb"},{"name":"#activate! admin role protection prevents updating the admin role","suite":"Spree::PermissionSets::SuperUser at ./spec/models/spree/permission_sets/super_user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6:1\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/super_user_spec.rb"},{"name":"#activate! admin role protection prevents destroying the admin role","suite":"Spree::PermissionSets::SuperUser at ./spec/models/spree/permission_sets/super_user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6:2\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/super_user_spec.rb"},{"name":"#activate! admin role protection allows updating other roles","suite":"Spree::PermissionSets::SuperUser at ./spec/models/spree/permission_sets/super_user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6:3\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/super_user_spec.rb"},{"name":"#activate! admin role protection allows destroying other roles","suite":"Spree::PermissionSets::SuperUser at ./spec/models/spree/permission_sets/super_user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6:4\"}}","suiteSourceFile":"core/spec/models/spree/permission_sets/super_user_spec.rb"},{"name":"Validations slug uniqueness allows same slug for different stores","suite":"Spree::Policy at ./spec/models/spree/policy_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/policy_spec.rb"},{"name":"Validations owner presence is invalid without an owner","suite":"Spree::Policy at ./spec/models/spree/policy_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/policy_spec.rb"},{"name":"friendly_id generates friendly URLs from slug","suite":"Spree::Policy at ./spec/models/spree/policy_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/policy_spec.rb"},{"name":"friendly_id maintains slug history","suite":"Spree::Policy at ./spec/models/spree/policy_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","suiteSourceFile":"core/spec/models/spree/policy_spec.rb"},{"name":"friendly_id when the policy is destroyed fully destroys the slug","suite":"Spree::Policy at ./spec/models/spree/policy_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:1\"}}","suiteSourceFile":"core/spec/models/spree/policy_spec.rb"},{"name":"Translations has translatable name field","suite":"Spree::Policy at ./spec/models/spree/policy_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/policy_spec.rb"},{"name":"Translations supports translations for name","suite":"Spree::Policy at ./spec/models/spree/policy_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","suiteSourceFile":"core/spec/models/spree/policy_spec.rb"},{"name":"Translations when always_use_translations is enabled allows creating policies with translations","suite":"Spree::Policy at ./spec/models/spree/policy_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3:1\"}}","suiteSourceFile":"core/spec/models/spree/policy_spec.rb"},{"name":"Scopes .for_store returns policies for specific store","suite":"Spree::Policy at ./spec/models/spree/policy_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1\"}}","suiteSourceFile":"core/spec/models/spree/policy_spec.rb"},{"name":"Scopes .for_store for policies with a different owner type returns policies for the store and the user policy","suite":"Spree::Policy at ./spec/models/spree/policy_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/policy_spec.rb"},{"name":"Scopes .with_matching_name finds policy by exact name match (case insensitive)","suite":"Spree::Policy at ./spec/models/spree/policy_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1\"}}","suiteSourceFile":"core/spec/models/spree/policy_spec.rb"},{"name":"Scopes .with_matching_name does not find policy with partial match","suite":"Spree::Policy at ./spec/models/spree/policy_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:2\"}}","suiteSourceFile":"core/spec/models/spree/policy_spec.rb"},{"name":"Scopes .with_matching_name strips whitespace from search term","suite":"Spree::Policy at ./spec/models/spree/policy_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:3\"}}","suiteSourceFile":"core/spec/models/spree/policy_spec.rb"},{"name":"Scopes .with_matching_name returns empty when no match found","suite":"Spree::Policy at ./spec/models/spree/policy_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:4\"}}","suiteSourceFile":"core/spec/models/spree/policy_spec.rb"},{"name":"behaves like lifecycle events lifecycle events post_category.created publishes created event when record is created","suite":"Spree::PostCategory at ./spec/models/spree/post_category_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/post_category_spec.rb"},{"name":"behaves like lifecycle events lifecycle events post_category.updated publishes updated event when record is updated","suite":"Spree::PostCategory at ./spec/models/spree/post_category_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/post_category_spec.rb"},{"name":"behaves like lifecycle events lifecycle events post_category.deleted publishes deleted event when record is deleted","suite":"Spree::PostCategory at ./spec/models/spree/post_category_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/post_category_spec.rb"},{"name":"Associations posts has many posts","suite":"Spree::PostCategory at ./spec/models/spree/post_category_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/post_category_spec.rb"},{"name":"Associations posts nullifies posts when destroyed","suite":"Spree::PostCategory at ./spec/models/spree/post_category_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:2\"}}","suiteSourceFile":"core/spec/models/spree/post_category_spec.rb"},{"name":"FriendlyId #should_generate_new_friendly_id? returns true when slug is blank","suite":"Spree::PostCategory at ./spec/models/spree/post_category_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","suiteSourceFile":"core/spec/models/spree/post_category_spec.rb"},{"name":"FriendlyId #should_generate_new_friendly_id? returns true when title has changed","suite":"Spree::PostCategory at ./spec/models/spree/post_category_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:2\"}}","suiteSourceFile":"core/spec/models/spree/post_category_spec.rb"},{"name":"FriendlyId #should_generate_new_friendly_id? returns false when slug is present and title unchanged","suite":"Spree::PostCategory at ./spec/models/spree/post_category_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:3\"}}","suiteSourceFile":"core/spec/models/spree/post_category_spec.rb"},{"name":"FriendlyId #slug_candidates returns correct slug candidates","suite":"Spree::PostCategory at ./spec/models/spree/post_category_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","suiteSourceFile":"core/spec/models/spree/post_category_spec.rb"},{"name":"behaves like lifecycle events lifecycle events post.created publishes created event when record is created","suite":"Spree::Post at ./spec/models/spree/post_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/post_spec.rb"},{"name":"behaves like lifecycle events lifecycle events post.updated publishes updated event when record is updated","suite":"Spree::Post at ./spec/models/spree/post_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/post_spec.rb"},{"name":"behaves like lifecycle events lifecycle events post.deleted publishes deleted event when record is deleted","suite":"Spree::Post at ./spec/models/spree/post_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/post_spec.rb"},{"name":"Validations image validates content type","suite":"Spree::Post at ./spec/models/spree/post_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/post_spec.rb"},{"name":"Validations slug validates uniqueness","suite":"Spree::Post at ./spec/models/spree/post_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/post_spec.rb"},{"name":"#author_name returns the author name","suite":"Spree::Post at ./spec/models/spree/post_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/post_spec.rb"},{"name":"#author_name when author is deleted returns the author name","suite":"Spree::Post at ./spec/models/spree/post_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","suiteSourceFile":"core/spec/models/spree/post_spec.rb"},{"name":"requires a key","suite":"Spree::Preference at ./spec/models/spree/preference_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","suiteSourceFile":"core/spec/models/spree/preference_spec.rb"},{"name":"type conversion for values :boolean","suite":"Spree::Preference at ./spec/models/spree/preference_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/preference_spec.rb"},{"name":"type conversion for values false :boolean","suite":"Spree::Preference at ./spec/models/spree/preference_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","suiteSourceFile":"core/spec/models/spree/preference_spec.rb"},{"name":"type conversion for values :integer","suite":"Spree::Preference at ./spec/models/spree/preference_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3\"}}","suiteSourceFile":"core/spec/models/spree/preference_spec.rb"},{"name":"type conversion for values :decimal","suite":"Spree::Preference at ./spec/models/spree/preference_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:4\"}}","suiteSourceFile":"core/spec/models/spree/preference_spec.rb"},{"name":"type conversion for values :string","suite":"Spree::Preference at ./spec/models/spree/preference_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:5\"}}","suiteSourceFile":"core/spec/models/spree/preference_spec.rb"},{"name":"type conversion for values :text","suite":"Spree::Preference at ./spec/models/spree/preference_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:6\"}}","suiteSourceFile":"core/spec/models/spree/preference_spec.rb"},{"name":"type conversion for values :password","suite":"Spree::Preference at ./spec/models/spree/preference_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:7\"}}","suiteSourceFile":"core/spec/models/spree/preference_spec.rb"},{"name":"type conversion for values :any","suite":"Spree::Preference at ./spec/models/spree/preference_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:8\"}}","suiteSourceFile":"core/spec/models/spree/preference_spec.rb"},{"name":"has named methods to access preferences","suite":"Spree::Preferences::Configuration at ./spec/models/spree/preferences/configuration_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","suiteSourceFile":"core/spec/models/spree/preferences/configuration_spec.rb"},{"name":"uses [ ] to access preferences","suite":"Spree::Preferences::Configuration at ./spec/models/spree/preferences/configuration_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2\"}}","suiteSourceFile":"core/spec/models/spree/preferences/configuration_spec.rb"},{"name":"uses set/get to access preferences","suite":"Spree::Preferences::Configuration at ./spec/models/spree/preferences/configuration_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3\"}}","suiteSourceFile":"core/spec/models/spree/preferences/configuration_spec.rb"},{"name":"preference definitions parent should not see child definitions","suite":"Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/preferences/preferable_spec.rb"},{"name":"preference definitions child should have parent and own definitions","suite":"Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/preferences/preferable_spec.rb"},{"name":"preference definitions instances have defaults","suite":"Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/models/spree/preferences/preferable_spec.rb"},{"name":"preference definitions can be asked if it has a preference definition","suite":"Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","suiteSourceFile":"core/spec/models/spree/preferences/preferable_spec.rb"},{"name":"preference definitions can be asked and raises","suite":"Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","suiteSourceFile":"core/spec/models/spree/preferences/preferable_spec.rb"},{"name":"preference definitions has a type","suite":"Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","suiteSourceFile":"core/spec/models/spree/preferences/preferable_spec.rb"},{"name":"preference definitions has a default","suite":"Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7\"}}","suiteSourceFile":"core/spec/models/spree/preferences/preferable_spec.rb"},{"name":"preference definitions can have a deprecation message","suite":"Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8\"}}","suiteSourceFile":"core/spec/models/spree/preferences/preferable_spec.rb"},{"name":"preference definitions raises if not defined","suite":"Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:9\"}}","suiteSourceFile":"core/spec/models/spree/preferences/preferable_spec.rb"},{"name":"preference access handles ghost methods for preferences","suite":"Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/preferences/preferable_spec.rb"},{"name":"preference access parent and child instances have their own prefs","suite":"Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","suiteSourceFile":"core/spec/models/spree/preferences/preferable_spec.rb"},{"name":"preference access raises when preference not defined","suite":"Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3\"}}","suiteSourceFile":"core/spec/models/spree/preferences/preferable_spec.rb"},{"name":"preference access builds a hash of preferences","suite":"Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:4\"}}","suiteSourceFile":"core/spec/models/spree/preferences/preferable_spec.rb"},{"name":"preference access builds a hash of preference defaults","suite":"Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:5\"}}","suiteSourceFile":"core/spec/models/spree/preferences/preferable_spec.rb"},{"name":"preference access builds a array of deprecated preferences","suite":"Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:6\"}}","suiteSourceFile":"core/spec/models/spree/preferences/preferable_spec.rb"},{"name":"preference access converts integer preferences to integer values with strings","suite":"Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:7:1\"}}","suiteSourceFile":"core/spec/models/spree/preferences/preferable_spec.rb"},{"name":"preference access converts nullable integer preferences stores nil when set to empty string","suite":"Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:8:1\"}}","suiteSourceFile":"core/spec/models/spree/preferences/preferable_spec.rb"},{"name":"preference access converts nullable integer preferences stores nil when set to nil","suite":"Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:8:2\"}}","suiteSourceFile":"core/spec/models/spree/preferences/preferable_spec.rb"},{"name":"preference access converts nullable integer preferences converts string to integer when present","suite":"Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:8:3\"}}","suiteSourceFile":"core/spec/models/spree/preferences/preferable_spec.rb"},{"name":"preference access converts nullable integer preferences preserves integer values","suite":"Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:8:4\"}}","suiteSourceFile":"core/spec/models/spree/preferences/preferable_spec.rb"},{"name":"preference access converts decimal preferences to BigDecimal values returns a BigDecimal","suite":"Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:9:1\"}}","suiteSourceFile":"core/spec/models/spree/preferences/preferable_spec.rb"},{"name":"preference access converts decimal preferences to BigDecimal values with strings","suite":"Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:9:2\"}}","suiteSourceFile":"core/spec/models/spree/preferences/preferable_spec.rb"},{"name":"preference access converts nullable decimal preferences stores nil when set to empty string","suite":"Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:10:1\"}}","suiteSourceFile":"core/spec/models/spree/preferences/preferable_spec.rb"},{"name":"preference access converts nullable decimal preferences stores nil when set to nil","suite":"Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:10:2\"}}","suiteSourceFile":"core/spec/models/spree/preferences/preferable_spec.rb"},{"name":"preference access converts nullable decimal preferences converts string to BigDecimal when present","suite":"Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:10:3\"}}","suiteSourceFile":"core/spec/models/spree/preferences/preferable_spec.rb"},{"name":"preference access converts nullable decimal preferences preserves decimal values","suite":"Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:10:4\"}}","suiteSourceFile":"core/spec/models/spree/preferences/preferable_spec.rb"},{"name":"preference access converts boolean preferences to boolean values with strings","suite":"Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:11:1\"}}","suiteSourceFile":"core/spec/models/spree/preferences/preferable_spec.rb"},{"name":"preference access converts boolean preferences to boolean values with integers","suite":"Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:11:2\"}}","suiteSourceFile":"core/spec/models/spree/preferences/preferable_spec.rb"},{"name":"preference access converts boolean preferences to boolean values with an empty string","suite":"Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:11:3\"}}","suiteSourceFile":"core/spec/models/spree/preferences/preferable_spec.rb"},{"name":"preference access converts boolean preferences to boolean values with an empty hash","suite":"Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:11:4\"}}","suiteSourceFile":"core/spec/models/spree/preferences/preferable_spec.rb"},{"name":"preference access converts array preferences to array values with arrays","suite":"Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:12:1\"}}","suiteSourceFile":"core/spec/models/spree/preferences/preferable_spec.rb"},{"name":"preference access converts array preferences to array values with string","suite":"Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:12:2\"}}","suiteSourceFile":"core/spec/models/spree/preferences/preferable_spec.rb"},{"name":"preference access converts array preferences to array values with hash","suite":"Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:12:3\"}}","suiteSourceFile":"core/spec/models/spree/preferences/preferable_spec.rb"},{"name":"preference access converts hash preferences to hash values with hash","suite":"Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:13:1\"}}","suiteSourceFile":"core/spec/models/spree/preferences/preferable_spec.rb"},{"name":"preference access converts hash preferences to hash values with hash and keys are integers","suite":"Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:13:2\"}}","suiteSourceFile":"core/spec/models/spree/preferences/preferable_spec.rb"},{"name":"preference access converts hash preferences to hash values with string","suite":"Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:13:3\"}}","suiteSourceFile":"core/spec/models/spree/preferences/preferable_spec.rb"},{"name":"preference access converts hash preferences to hash values with boolean","suite":"Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:13:4\"}}","suiteSourceFile":"core/spec/models/spree/preferences/preferable_spec.rb"},{"name":"preference access converts hash preferences to hash values with simple array","suite":"Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:13:5\"}}","suiteSourceFile":"core/spec/models/spree/preferences/preferable_spec.rb"},{"name":"preference access converts hash preferences to hash values with a nested array","suite":"Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:13:6\"}}","suiteSourceFile":"core/spec/models/spree/preferences/preferable_spec.rb"},{"name":"preference access converts hash preferences to hash values with single array","suite":"Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:13:7\"}}","suiteSourceFile":"core/spec/models/spree/preferences/preferable_spec.rb"},{"name":"preference access converts any preferences to any values with array","suite":"Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:14:1\"}}","suiteSourceFile":"core/spec/models/spree/preferences/preferable_spec.rb"},{"name":"preference access converts any preferences to any values with hash","suite":"Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:14:2\"}}","suiteSourceFile":"core/spec/models/spree/preferences/preferable_spec.rb"},{"name":"persisted preferables clear preferences","suite":"Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","suiteSourceFile":"core/spec/models/spree/preferences/preferable_spec.rb"},{"name":"persisted preferables clear preferences when record is deleted","suite":"Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3\"}}","suiteSourceFile":"core/spec/models/spree/preferences/preferable_spec.rb"},{"name":"persisted preferables pending preferences for new activerecord objects saves preferences after record is saved","suite":"Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","suiteSourceFile":"core/spec/models/spree/preferences/preferable_spec.rb"},{"name":"persisted preferables pending preferences for new activerecord objects saves preferences for serialized object","suite":"Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:2\"}}","suiteSourceFile":"core/spec/models/spree/preferences/preferable_spec.rb"},{"name":"persisted preferables preference change tracking methods tracks changes to preferences","suite":"Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4:1\"}}","suiteSourceFile":"core/spec/models/spree/preferences/preferable_spec.rb"},{"name":"persisted preferables preference change tracking methods tracks previous changes after save","suite":"Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4:2\"}}","suiteSourceFile":"core/spec/models/spree/preferences/preferable_spec.rb"},{"name":"persisted preferables preference change tracking methods reports no changes when preference is set to same value","suite":"Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4:3\"}}","suiteSourceFile":"core/spec/models/spree/preferences/preferable_spec.rb"},{"name":"persisted preferables preference change tracking methods tracks changes to array preferences","suite":"Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4:4\"}}","suiteSourceFile":"core/spec/models/spree/preferences/preferable_spec.rb"},{"name":"#get returns default value if present","suite":"Spree::Preferences::RuntimeConfiguration at ./spec/models/spree/preferences/runtime_configuration_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/preferences/runtime_configuration_spec.rb"},{"name":"#get returns nil if not present","suite":"Spree::Preferences::RuntimeConfiguration at ./spec/models/spree/preferences/runtime_configuration_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/preferences/runtime_configuration_spec.rb"},{"name":"#get returns value via an attribute accessor","suite":"Spree::Preferences::RuntimeConfiguration at ./spec/models/spree/preferences/runtime_configuration_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/models/spree/preferences/runtime_configuration_spec.rb"},{"name":"#get returns value via a hash accessor","suite":"Spree::Preferences::RuntimeConfiguration at ./spec/models/spree/preferences/runtime_configuration_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","suiteSourceFile":"core/spec/models/spree/preferences/runtime_configuration_spec.rb"},{"name":"#set overrides the default value","suite":"Spree::Preferences::RuntimeConfiguration at ./spec/models/spree/preferences/runtime_configuration_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/preferences/runtime_configuration_spec.rb"},{"name":"#set sets value if not set previously","suite":"Spree::Preferences::RuntimeConfiguration at ./spec/models/spree/preferences/runtime_configuration_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","suiteSourceFile":"core/spec/models/spree/preferences/runtime_configuration_spec.rb"},{"name":"#set sets the value via an attribute accessor","suite":"Spree::Preferences::RuntimeConfiguration at ./spec/models/spree/preferences/runtime_configuration_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3\"}}","suiteSourceFile":"core/spec/models/spree/preferences/runtime_configuration_spec.rb"},{"name":"#set sets value via a hash accessor","suite":"Spree::Preferences::RuntimeConfiguration at ./spec/models/spree/preferences/runtime_configuration_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:4\"}}","suiteSourceFile":"core/spec/models/spree/preferences/runtime_configuration_spec.rb"},{"name":"#store example at ./spec/models/spree/preferences/scoped_store_spec.rb:14","suite":"Spree::Preferences::ScopedStore at ./spec/models/spree/preferences/scoped_store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/preferences/scoped_store_spec.rb"},{"name":"stubbed store with a prefix can fetch","suite":"Spree::Preferences::ScopedStore at ./spec/models/spree/preferences/scoped_store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/preferences/scoped_store_spec.rb"},{"name":"stubbed store with a prefix can assign","suite":"Spree::Preferences::ScopedStore at ./spec/models/spree/preferences/scoped_store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:2\"}}","suiteSourceFile":"core/spec/models/spree/preferences/scoped_store_spec.rb"},{"name":"stubbed store with a prefix can delete","suite":"Spree::Preferences::ScopedStore at ./spec/models/spree/preferences/scoped_store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:3\"}}","suiteSourceFile":"core/spec/models/spree/preferences/scoped_store_spec.rb"},{"name":"stubbed store with a prefix and suffix can fetch","suite":"Spree::Preferences::ScopedStore at ./spec/models/spree/preferences/scoped_store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/preferences/scoped_store_spec.rb"},{"name":"stubbed store with a prefix and suffix can assign","suite":"Spree::Preferences::ScopedStore at ./spec/models/spree/preferences/scoped_store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:4:2\"}}","suiteSourceFile":"core/spec/models/spree/preferences/scoped_store_spec.rb"},{"name":"stubbed store with a prefix and suffix can delete","suite":"Spree::Preferences::ScopedStore at ./spec/models/spree/preferences/scoped_store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:4:3\"}}","suiteSourceFile":"core/spec/models/spree/preferences/scoped_store_spec.rb"},{"name":"sets and gets a key","suite":"Spree::Preferences::Store at ./spec/models/spree/preferences/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","suiteSourceFile":"core/spec/models/spree/preferences/store_spec.rb"},{"name":"can set and get false values when cache return nil","suite":"Spree::Preferences::Store at ./spec/models/spree/preferences/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2\"}}","suiteSourceFile":"core/spec/models/spree/preferences/store_spec.rb"},{"name":"returns nil when key can't be found and fallback value is not supplied","suite":"Spree::Preferences::Store at ./spec/models/spree/preferences/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6\"}}","suiteSourceFile":"core/spec/models/spree/preferences/store_spec.rb"},{"name":"Validations date range validation validates starts_at is before ends_at","suite":"Spree::PriceList at ./spec/models/spree/price_list_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/price_list_spec.rb"},{"name":"state_machine has initial status of draft","suite":"Spree::PriceList at ./spec/models/spree/price_list_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/price_list_spec.rb"},{"name":"state_machine #activate transitions to active","suite":"Spree::PriceList at ./spec/models/spree/price_list_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/price_list_spec.rb"},{"name":"state_machine #deactivate transitions to inactive","suite":"Spree::PriceList at ./spec/models/spree/price_list_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:1\"}}","suiteSourceFile":"core/spec/models/spree/price_list_spec.rb"},{"name":"state_machine #schedule transitions to scheduled","suite":"Spree::PriceList at ./spec/models/spree/price_list_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:4:1\"}}","suiteSourceFile":"core/spec/models/spree/price_list_spec.rb"},{"name":"scopes .with_status(:active) returns only active price lists","suite":"Spree::PriceList at ./spec/models/spree/price_list_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","suiteSourceFile":"core/spec/models/spree/price_list_spec.rb"},{"name":"scopes .with_status(:inactive) returns only inactive price lists","suite":"Spree::PriceList at ./spec/models/spree/price_list_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","suiteSourceFile":"core/spec/models/spree/price_list_spec.rb"},{"name":"scopes .with_status(:scheduled) returns only scheduled price lists","suite":"Spree::PriceList at ./spec/models/spree/price_list_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3:1\"}}","suiteSourceFile":"core/spec/models/spree/price_list_spec.rb"},{"name":"scopes .by_position returns price lists ordered by position ascending","suite":"Spree::PriceList at ./spec/models/spree/price_list_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4:1\"}}","suiteSourceFile":"core/spec/models/spree/price_list_spec.rb"},{"name":"scopes .for_store returns only price lists for the specified store","suite":"Spree::PriceList at ./spec/models/spree/price_list_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:5:1\"}}","suiteSourceFile":"core/spec/models/spree/price_list_spec.rb"},{"name":"scopes .current returns only price lists within date range","suite":"Spree::PriceList at ./spec/models/spree/price_list_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:6:1\"}}","suiteSourceFile":"core/spec/models/spree/price_list_spec.rb"},{"name":"scopes .current accepts a timezone parameter","suite":"Spree::PriceList at ./spec/models/spree/price_list_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:6:2\"}}","suiteSourceFile":"core/spec/models/spree/price_list_spec.rb"},{"name":"#applicable? when price list is inactive returns false","suite":"Spree::PriceList at ./spec/models/spree/price_list_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1\"}}","suiteSourceFile":"core/spec/models/spree/price_list_spec.rb"},{"name":"#applicable? when price list is outside date range returns false","suite":"Spree::PriceList at ./spec/models/spree/price_list_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1\"}}","suiteSourceFile":"core/spec/models/spree/price_list_spec.rb"},{"name":"#applicable? with rules and match_policy = all returns false if any rule fails","suite":"Spree::PriceList at ./spec/models/spree/price_list_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3:1\"}}","suiteSourceFile":"core/spec/models/spree/price_list_spec.rb"},{"name":"#applicable? with rules and match_policy = any returns true if any rule passes","suite":"Spree::PriceList at ./spec/models/spree/price_list_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:4:1\"}}","suiteSourceFile":"core/spec/models/spree/price_list_spec.rb"},{"name":"#active? returns true when status is active","suite":"Spree::PriceList at ./spec/models/spree/price_list_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","suiteSourceFile":"core/spec/models/spree/price_list_spec.rb"},{"name":"#active? returns false when status is not active","suite":"Spree::PriceList at ./spec/models/spree/price_list_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2\"}}","suiteSourceFile":"core/spec/models/spree/price_list_spec.rb"},{"name":"#add_products creates prices for all variants of the given products","suite":"Spree::PriceList at ./spec/models/spree/price_list_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","suiteSourceFile":"core/spec/models/spree/price_list_spec.rb"},{"name":"#add_products creates prices for all supported currencies","suite":"Spree::PriceList at ./spec/models/spree/price_list_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2\"}}","suiteSourceFile":"core/spec/models/spree/price_list_spec.rb"},{"name":"#add_products creates prices with nil amount","suite":"Spree::PriceList at ./spec/models/spree/price_list_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:3\"}}","suiteSourceFile":"core/spec/models/spree/price_list_spec.rb"},{"name":"#add_products does not create duplicate prices for existing variants","suite":"Spree::PriceList at ./spec/models/spree/price_list_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:4\"}}","suiteSourceFile":"core/spec/models/spree/price_list_spec.rb"},{"name":"#add_products enqueues a job to touch affected variants","suite":"Spree::PriceList at ./spec/models/spree/price_list_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:5\"}}","suiteSourceFile":"core/spec/models/spree/price_list_spec.rb"},{"name":"#add_products touches the price list to bust cache","suite":"Spree::PriceList at ./spec/models/spree/price_list_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:6\"}}","suiteSourceFile":"core/spec/models/spree/price_list_spec.rb"},{"name":"#add_products handles empty product_ids","suite":"Spree::PriceList at ./spec/models/spree/price_list_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:7\"}}","suiteSourceFile":"core/spec/models/spree/price_list_spec.rb"},{"name":"#add_products handles nil product_ids","suite":"Spree::PriceList at ./spec/models/spree/price_list_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:8\"}}","suiteSourceFile":"core/spec/models/spree/price_list_spec.rb"},{"name":"#add_products with products having multiple variants creates prices for all eligible variants","suite":"Spree::PriceList at ./spec/models/spree/price_list_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:9:1\"}}","suiteSourceFile":"core/spec/models/spree/price_list_spec.rb"},{"name":"#add_products with non-existent product IDs handles gracefully without error","suite":"Spree::PriceList at ./spec/models/spree/price_list_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:10:1\"}}","suiteSourceFile":"core/spec/models/spree/price_list_spec.rb"},{"name":"#add_products with non-existent product IDs creates prices only for existing products","suite":"Spree::PriceList at ./spec/models/spree/price_list_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:10:2\"}}","suiteSourceFile":"core/spec/models/spree/price_list_spec.rb"},{"name":"#add_products when price already has amount set does not overwrite existing price with amount","suite":"Spree::PriceList at ./spec/models/spree/price_list_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:11:1\"}}","suiteSourceFile":"core/spec/models/spree/price_list_spec.rb"},{"name":"#add_products when price already has amount set only creates prices for missing currencies","suite":"Spree::PriceList at ./spec/models/spree/price_list_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:11:2\"}}","suiteSourceFile":"core/spec/models/spree/price_list_spec.rb"},{"name":"#add_products with deleted variants only creates prices for non-deleted variants","suite":"Spree::PriceList at ./spec/models/spree/price_list_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:12:1\"}}","suiteSourceFile":"core/spec/models/spree/price_list_spec.rb"},{"name":"#remove_products removes all prices for the given products","suite":"Spree::PriceList at ./spec/models/spree/price_list_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","suiteSourceFile":"core/spec/models/spree/price_list_spec.rb"},{"name":"#remove_products removes prices for all currencies","suite":"Spree::PriceList at ./spec/models/spree/price_list_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2\"}}","suiteSourceFile":"core/spec/models/spree/price_list_spec.rb"},{"name":"#remove_products does not remove prices for other products","suite":"Spree::PriceList at ./spec/models/spree/price_list_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:3\"}}","suiteSourceFile":"core/spec/models/spree/price_list_spec.rb"},{"name":"#remove_products handles empty product_ids","suite":"Spree::PriceList at ./spec/models/spree/price_list_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:4\"}}","suiteSourceFile":"core/spec/models/spree/price_list_spec.rb"},{"name":"#remove_products handles nil product_ids","suite":"Spree::PriceList at ./spec/models/spree/price_list_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:5\"}}","suiteSourceFile":"core/spec/models/spree/price_list_spec.rb"},{"name":"#remove_products removes prices for multiple products at once","suite":"Spree::PriceList at ./spec/models/spree/price_list_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:6\"}}","suiteSourceFile":"core/spec/models/spree/price_list_spec.rb"},{"name":"#remove_products enqueues a job to touch affected variants","suite":"Spree::PriceList at ./spec/models/spree/price_list_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:7\"}}","suiteSourceFile":"core/spec/models/spree/price_list_spec.rb"},{"name":"#remove_products touches the price list to bust cache","suite":"Spree::PriceList at ./spec/models/spree/price_list_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:8\"}}","suiteSourceFile":"core/spec/models/spree/price_list_spec.rb"},{"name":"#remove_products when re-adding a previously removed product allows re-adding a product with empty prices","suite":"Spree::PriceList at ./spec/models/spree/price_list_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:9:1\"}}","suiteSourceFile":"core/spec/models/spree/price_list_spec.rb"},{"name":"#remove_products when re-adding a previously removed product allows re-adding a product that had prices with amounts set","suite":"Spree::PriceList at ./spec/models/spree/price_list_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:9:2\"}}","suiteSourceFile":"core/spec/models/spree/price_list_spec.rb"},{"name":"#bulk_update_prices updates prices in bulk using upsert_all","suite":"Spree::PriceList at ./spec/models/spree/price_list_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1\"}}","suiteSourceFile":"core/spec/models/spree/price_list_spec.rb"},{"name":"#bulk_update_prices clears compare_at_amount when it equals amount","suite":"Spree::PriceList at ./spec/models/spree/price_list_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2\"}}","suiteSourceFile":"core/spec/models/spree/price_list_spec.rb"},{"name":"#bulk_update_prices clears amount when user removes existing value","suite":"Spree::PriceList at ./spec/models/spree/price_list_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:3\"}}","suiteSourceFile":"core/spec/models/spree/price_list_spec.rb"},{"name":"#bulk_update_prices skips prices where nothing changed","suite":"Spree::PriceList at ./spec/models/spree/price_list_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:4\"}}","suiteSourceFile":"core/spec/models/spree/price_list_spec.rb"},{"name":"#bulk_update_prices updates when only compare_at_amount changed","suite":"Spree::PriceList at ./spec/models/spree/price_list_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:5\"}}","suiteSourceFile":"core/spec/models/spree/price_list_spec.rb"},{"name":"#bulk_update_prices enqueues a job to touch affected variants","suite":"Spree::PriceList at ./spec/models/spree/price_list_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:6\"}}","suiteSourceFile":"core/spec/models/spree/price_list_spec.rb"},{"name":"#bulk_update_prices returns true for empty attributes","suite":"Spree::PriceList at ./spec/models/spree/price_list_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:7\"}}","suiteSourceFile":"core/spec/models/spree/price_list_spec.rb"},{"name":"#bulk_update_prices skips entries without id","suite":"Spree::PriceList at ./spec/models/spree/price_list_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:8\"}}","suiteSourceFile":"core/spec/models/spree/price_list_spec.rb"},{"name":"#applicable? when customer_group_ids preference is empty returns true when user is present","suite":"Spree::PriceRules::CustomerGroupRule at ./spec/models/spree/price_rules/customer_group_rule_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/price_rules/customer_group_rule_spec.rb"},{"name":"#applicable? when customer_group_ids preference is empty returns false when user is not present","suite":"Spree::PriceRules::CustomerGroupRule at ./spec/models/spree/price_rules/customer_group_rule_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/price_rules/customer_group_rule_spec.rb"},{"name":"#applicable? when customer_group_ids preference is set returns true when context user is in the customer group","suite":"Spree::PriceRules::CustomerGroupRule at ./spec/models/spree/price_rules/customer_group_rule_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/price_rules/customer_group_rule_spec.rb"},{"name":"#applicable? when customer_group_ids preference is set returns false when context user is not in the customer group","suite":"Spree::PriceRules::CustomerGroupRule at ./spec/models/spree/price_rules/customer_group_rule_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2\"}}","suiteSourceFile":"core/spec/models/spree/price_rules/customer_group_rule_spec.rb"},{"name":"#applicable? when customer_group_ids preference is set returns false when context has no user","suite":"Spree::PriceRules::CustomerGroupRule at ./spec/models/spree/price_rules/customer_group_rule_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:3\"}}","suiteSourceFile":"core/spec/models/spree/price_rules/customer_group_rule_spec.rb"},{"name":"#applicable? when customer_group_ids preference contains strings returns true when context user is in the customer group","suite":"Spree::PriceRules::CustomerGroupRule at ./spec/models/spree/price_rules/customer_group_rule_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/price_rules/customer_group_rule_spec.rb"},{"name":"#applicable? with multiple customer groups configured returns true when context user is in any of the customer groups","suite":"Spree::PriceRules::CustomerGroupRule at ./spec/models/spree/price_rules/customer_group_rule_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/price_rules/customer_group_rule_spec.rb"},{"name":"#applicable? with multiple customer groups configured returns false when context user is not in any of the customer groups","suite":"Spree::PriceRules::CustomerGroupRule at ./spec/models/spree/price_rules/customer_group_rule_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:2\"}}","suiteSourceFile":"core/spec/models/spree/price_rules/customer_group_rule_spec.rb"},{"name":".description returns the translated description","suite":"Spree::PriceRules::CustomerGroupRule at ./spec/models/spree/price_rules/customer_group_rule_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/price_rules/customer_group_rule_spec.rb"},{"name":"#applicable? when user_ids preference is empty returns true when user is present","suite":"Spree::PriceRules::UserRule at ./spec/models/spree/price_rules/user_rule_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/price_rules/user_rule_spec.rb"},{"name":"#applicable? when user_ids preference is set returns true when context user matches","suite":"Spree::PriceRules::UserRule at ./spec/models/spree/price_rules/user_rule_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/price_rules/user_rule_spec.rb"},{"name":"#applicable? when user_ids preference is set returns false when context user does not match","suite":"Spree::PriceRules::UserRule at ./spec/models/spree/price_rules/user_rule_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2\"}}","suiteSourceFile":"core/spec/models/spree/price_rules/user_rule_spec.rb"},{"name":"#applicable? when user_ids preference is set returns false when context has no user","suite":"Spree::PriceRules::UserRule at ./spec/models/spree/price_rules/user_rule_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:3\"}}","suiteSourceFile":"core/spec/models/spree/price_rules/user_rule_spec.rb"},{"name":"#applicable? when user_ids preference contains strings returns true when context user matches","suite":"Spree::PriceRules::UserRule at ./spec/models/spree/price_rules/user_rule_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/price_rules/user_rule_spec.rb"},{"name":"#applicable? when user_ids preference contains strings returns false when context user does not match","suite":"Spree::PriceRules::UserRule at ./spec/models/spree/price_rules/user_rule_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:2\"}}","suiteSourceFile":"core/spec/models/spree/price_rules/user_rule_spec.rb"},{"name":"max_quantity preference stores nil when set to empty string","suite":"Spree::PriceRules::VolumeRule at ./spec/models/spree/price_rules/volume_rule_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/price_rules/volume_rule_spec.rb"},{"name":"max_quantity preference preserves non-zero max_quantity","suite":"Spree::PriceRules::VolumeRule at ./spec/models/spree/price_rules/volume_rule_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/price_rules/volume_rule_spec.rb"},{"name":"max_quantity preference preserves nil max_quantity","suite":"Spree::PriceRules::VolumeRule at ./spec/models/spree/price_rules/volume_rule_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/models/spree/price_rules/volume_rule_spec.rb"},{"name":"#applicable? returns true when quantity meets minimum","suite":"Spree::PriceRules::VolumeRule at ./spec/models/spree/price_rules/volume_rule_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/price_rules/volume_rule_spec.rb"},{"name":"#applicable? returns false when quantity is below minimum","suite":"Spree::PriceRules::VolumeRule at ./spec/models/spree/price_rules/volume_rule_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","suiteSourceFile":"core/spec/models/spree/price_rules/volume_rule_spec.rb"},{"name":"#applicable? returns false when quantity is nil","suite":"Spree::PriceRules::VolumeRule at ./spec/models/spree/price_rules/volume_rule_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:4\"}}","suiteSourceFile":"core/spec/models/spree/price_rules/volume_rule_spec.rb"},{"name":"#applicable? with max_quantity set returns true when quantity is within range","suite":"Spree::PriceRules::VolumeRule at ./spec/models/spree/price_rules/volume_rule_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:1\"}}","suiteSourceFile":"core/spec/models/spree/price_rules/volume_rule_spec.rb"},{"name":"#applicable? with max_quantity set returns false when quantity exceeds maximum","suite":"Spree::PriceRules::VolumeRule at ./spec/models/spree/price_rules/volume_rule_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:2\"}}","suiteSourceFile":"core/spec/models/spree/price_rules/volume_rule_spec.rb"},{"name":"#applicable? when zone_ids preference is empty returns true for any zone","suite":"Spree::PriceRules::ZoneRule at ./spec/models/spree/price_rules/zone_rule_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/price_rules/zone_rule_spec.rb"},{"name":"#applicable? when zone_ids preference is set returns true when context zone matches","suite":"Spree::PriceRules::ZoneRule at ./spec/models/spree/price_rules/zone_rule_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/price_rules/zone_rule_spec.rb"},{"name":"#applicable? when zone_ids preference is set returns false when context zone does not match","suite":"Spree::PriceRules::ZoneRule at ./spec/models/spree/price_rules/zone_rule_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2\"}}","suiteSourceFile":"core/spec/models/spree/price_rules/zone_rule_spec.rb"},{"name":"#applicable? when zone_ids preference is set returns false when context has no zone","suite":"Spree::PriceRules::ZoneRule at ./spec/models/spree/price_rules/zone_rule_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:3\"}}","suiteSourceFile":"core/spec/models/spree/price_rules/zone_rule_spec.rb"},{"name":"#applicable? when zone_ids preference contains strings returns true when context zone matches","suite":"Spree::PriceRules::ZoneRule at ./spec/models/spree/price_rules/zone_rule_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/price_rules/zone_rule_spec.rb"},{"name":"#applicable? when zone_ids preference contains strings returns false when context zone does not match","suite":"Spree::PriceRules::ZoneRule at ./spec/models/spree/price_rules/zone_rule_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:2\"}}","suiteSourceFile":"core/spec/models/spree/price_rules/zone_rule_spec.rb"},{"name":"behaves like lifecycle events lifecycle events price.created publishes created event when record is created","suite":"Spree::Price at ./spec/models/spree/price_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/price_spec.rb"},{"name":"behaves like lifecycle events lifecycle events price.updated publishes updated event when record is updated","suite":"Spree::Price at ./spec/models/spree/price_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/price_spec.rb"},{"name":"behaves like lifecycle events lifecycle events price.deleted publishes deleted event when record is deleted","suite":"Spree::Price at ./spec/models/spree/price_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/price_spec.rb"},{"name":"Callbacks when compare_at_amount is equal to amount sets compare_at_amount to nil","suite":"Spree::Price at ./spec/models/spree/price_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/price_spec.rb"},{"name":"Callbacks after_commit :auto_match_taxons when price is discounted on create auto matches taxons","suite":"Spree::Price at ./spec/models/spree/price_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/price_spec.rb"},{"name":"Callbacks after_commit :auto_match_taxons when price is discounted on update and changed to not be discounted auto matches taxons","suite":"Spree::Price at ./spec/models/spree/price_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/price_spec.rb"},{"name":"Callbacks after_commit :auto_match_taxons when price is discounted on update and is still discounted does not touch shop product","suite":"Spree::Price at ./spec/models/spree/price_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/price_spec.rb"},{"name":"Callbacks after_commit :auto_match_taxons when price is not discounted on create auto matches taxons","suite":"Spree::Price at ./spec/models/spree/price_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/price_spec.rb"},{"name":"Callbacks after_commit :auto_match_taxons when price is not discounted on update and changed to be discounted auto matches taxons","suite":"Spree::Price at ./spec/models/spree/price_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:2:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/price_spec.rb"},{"name":"Callbacks after_commit :auto_match_taxons when price is not discounted on update and is still not discounted does not touch shop product","suite":"Spree::Price at ./spec/models/spree/price_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:2:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/price_spec.rb"},{"name":"#amount= is expected to equal to localized number","suite":"Spree::Price at ./spec/models/spree/price_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/price_spec.rb"},{"name":"#compare_at_amount= is expected to equal to localized number","suite":"Spree::Price at ./spec/models/spree/price_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/price_spec.rb"},{"name":"#compare_at_amount= with empty string being passed as value casts value to nil","suite":"Spree::Price at ./spec/models/spree/price_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1\"}}","suiteSourceFile":"core/spec/models/spree/price_spec.rb"},{"name":"#price when amount is changed is expected to equal to price","suite":"Spree::Price at ./spec/models/spree/price_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:1\"}}","suiteSourceFile":"core/spec/models/spree/price_spec.rb"},{"name":"#compare_at_price when amount is changed is expected to equal to price","suite":"Spree::Price at ./spec/models/spree/price_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1:1\"}}","suiteSourceFile":"core/spec/models/spree/price_spec.rb"},{"name":"validations when the amount is nil legacy behavior example at ./spec/models/spree/price_spec.rb:164","suite":"Spree::Price at ./spec/models/spree/price_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/price_spec.rb"},{"name":"validations when the amount is nil new behavior example at ./spec/models/spree/price_spec.rb:168","suite":"Spree::Price at ./spec/models/spree/price_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/price_spec.rb"},{"name":"validations when the amount is less than 0 has 1 error on amount","suite":"Spree::Price at ./spec/models/spree/price_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2:1\"}}","suiteSourceFile":"core/spec/models/spree/price_spec.rb"},{"name":"validations when the amount is less than 0 populates errors","suite":"Spree::Price at ./spec/models/spree/price_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2:2\"}}","suiteSourceFile":"core/spec/models/spree/price_spec.rb"},{"name":"validations when the amount is greater than maximum amount has 1 error on amount","suite":"Spree::Price at ./spec/models/spree/price_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:3:1\"}}","suiteSourceFile":"core/spec/models/spree/price_spec.rb"},{"name":"validations when the amount is greater than maximum amount populates errors","suite":"Spree::Price at ./spec/models/spree/price_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:3:2\"}}","suiteSourceFile":"core/spec/models/spree/price_spec.rb"},{"name":"validations when the amount is between 0 and the maximum amount example at ./spec/models/spree/price_spec.rb:199","suite":"Spree::Price at ./spec/models/spree/price_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:4:1\"}}","suiteSourceFile":"core/spec/models/spree/price_spec.rb"},{"name":"#price_including_vat_for(zone) when called with a non-default zone returns the correct price including another VAT to two digits","suite":"Spree::Price at ./spec/models/spree/price_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1:1\"}}","suiteSourceFile":"core/spec/models/spree/price_spec.rb"},{"name":"#price_including_vat_for(zone) when called from the default zone returns the correct price","suite":"Spree::Price at ./spec/models/spree/price_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2:1\"}}","suiteSourceFile":"core/spec/models/spree/price_spec.rb"},{"name":"#price_including_vat_for(zone) when no default zone is set returns the correct price","suite":"Spree::Price at ./spec/models/spree/price_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:3:1\"}}","suiteSourceFile":"core/spec/models/spree/price_spec.rb"},{"name":"#compare_at_price_including_vat_for(zone) when called with a non-default zone returns the correct price including another VAT to two digits","suite":"Spree::Price at ./spec/models/spree/price_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1:1\"}}","suiteSourceFile":"core/spec/models/spree/price_spec.rb"},{"name":"#compare_at_price_including_vat_for(zone) when called from the default zone returns the correct price","suite":"Spree::Price at ./spec/models/spree/price_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:2:1\"}}","suiteSourceFile":"core/spec/models/spree/price_spec.rb"},{"name":"#compare_at_price_including_vat_for(zone) when no default zone is set returns the correct price","suite":"Spree::Price at ./spec/models/spree/price_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:3:1\"}}","suiteSourceFile":"core/spec/models/spree/price_spec.rb"},{"name":"#display_price_including_vat_for(zone) calls #price_including_vat_for","suite":"Spree::Price at ./spec/models/spree/price_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1\"}}","suiteSourceFile":"core/spec/models/spree/price_spec.rb"},{"name":"#display_compare_at_price_including_vat_for(zone) calls #price_including_vat_for","suite":"Spree::Price at ./spec/models/spree/price_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1\"}}","suiteSourceFile":"core/spec/models/spree/price_spec.rb"},{"name":"#discounted? when compare at amount is higher example at ./spec/models/spree/price_spec.rb:329","suite":"Spree::Price at ./spec/models/spree/price_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:1:1\"}}","suiteSourceFile":"core/spec/models/spree/price_spec.rb"},{"name":"#discounted? when compare at amount is lower example at ./spec/models/spree/price_spec.rb:334","suite":"Spree::Price at ./spec/models/spree/price_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:2:1\"}}","suiteSourceFile":"core/spec/models/spree/price_spec.rb"},{"name":"#discounted? when compare at amount is the same example at ./spec/models/spree/price_spec.rb:339","suite":"Spree::Price at ./spec/models/spree/price_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:3:1\"}}","suiteSourceFile":"core/spec/models/spree/price_spec.rb"},{"name":"#discounted? when there is no compare at amount example at ./spec/models/spree/price_spec.rb:344","suite":"Spree::Price at ./spec/models/spree/price_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:4:1\"}}","suiteSourceFile":"core/spec/models/spree/price_spec.rb"},{"name":"normalizes :name strips leading and trailing whitespace","suite":"Spree::Product at ./spec/models/spree/product/normalizes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/product/normalizes_spec.rb"},{"name":"normalizes :name squishes multiple spaces","suite":"Spree::Product at ./spec/models/spree/product/normalizes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/product/normalizes_spec.rb"},{"name":"normalizes :name converts empty string to nil","suite":"Spree::Product at ./spec/models/spree/product/normalizes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/models/spree/product/normalizes_spec.rb"},{"name":"normalizes :name handles nil value","suite":"Spree::Product at ./spec/models/spree/product/normalizes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","suiteSourceFile":"core/spec/models/spree/product/normalizes_spec.rb"},{"name":"normalizes :name with always_use_translations enabled creates a product with translated name without NotNullViolation","suite":"Spree::Product at ./spec/models/spree/product/normalizes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5:1\"}}","suiteSourceFile":"core/spec/models/spree/product/normalizes_spec.rb"},{"name":"normalizes :name with always_use_translations enabled normalizes translated names across locales","suite":"Spree::Product at ./spec/models/spree/product/normalizes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5:2\"}}","suiteSourceFile":"core/spec/models/spree/product/normalizes_spec.rb"},{"name":"#available when discontinued example at ./spec/models/spree/product/scopes_spec.rb:11","suite":"Product scopes at ./spec/models/spree/product/scopes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/product/scopes_spec.rb"},{"name":"#available when not discontinued example at ./spec/models/spree/product/scopes_spec.rb:17","suite":"Product scopes at ./spec/models/spree/product/scopes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/product/scopes_spec.rb"},{"name":"#available when available example at ./spec/models/spree/product/scopes_spec.rb:23","suite":"Product scopes at ./spec/models/spree/product/scopes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/product/scopes_spec.rb"},{"name":"#available when not available example at ./spec/models/spree/product/scopes_spec.rb:29","suite":"Product scopes at ./spec/models/spree/product/scopes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/product/scopes_spec.rb"},{"name":"#available different currency example at ./spec/models/spree/product/scopes_spec.rb:36","suite":"Product scopes at ./spec/models/spree/product/scopes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5:1\"}}","suiteSourceFile":"core/spec/models/spree/product/scopes_spec.rb"},{"name":"#available different currency example at ./spec/models/spree/product/scopes_spec.rb:37","suite":"Product scopes at ./spec/models/spree/product/scopes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5:2\"}}","suiteSourceFile":"core/spec/models/spree/product/scopes_spec.rb"},{"name":".for_filters when giving a taxon example at ./spec/models/spree/product/scopes_spec.rb:55","suite":"Product scopes at ./spec/models/spree/product/scopes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/product/scopes_spec.rb"},{"name":".for_filters when giving a currency with no products example at ./spec/models/spree/product/scopes_spec.rb:59","suite":"Product scopes at ./spec/models/spree/product/scopes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/product/scopes_spec.rb"},{"name":"A product assigned to parent and child taxons calling Product.in_taxon returns products in child taxons","suite":"Product scopes at ./spec/models/spree/product/scopes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/product/scopes_spec.rb"},{"name":"A product assigned to parent and child taxons calling Product.in_taxon should not return duplicate records","suite":"Product scopes at ./spec/models/spree/product/scopes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","suiteSourceFile":"core/spec/models/spree/product/scopes_spec.rb"},{"name":"A product assigned to parent and child taxons orders products based on their ordering within the classifications by initial ordering","suite":"Product scopes at ./spec/models/spree/product/scopes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3:1\"}}","suiteSourceFile":"core/spec/models/spree/product/scopes_spec.rb"},{"name":"A product assigned to parent and child taxons orders products based on their ordering within the classifications after ordering changed","suite":"Product scopes at ./spec/models/spree/product/scopes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3:2\"}}","suiteSourceFile":"core/spec/models/spree/product/scopes_spec.rb"},{"name":"property scopes with_property finds by a property's name","suite":"Product scopes at ./spec/models/spree/product/scopes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1\"}}","suiteSourceFile":"core/spec/models/spree/product/scopes_spec.rb"},{"name":"property scopes with_property doesn't find any properties with an unknown name","suite":"Product scopes at ./spec/models/spree/product/scopes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:2\"}}","suiteSourceFile":"core/spec/models/spree/product/scopes_spec.rb"},{"name":"property scopes with_property finds by a property","suite":"Product scopes at ./spec/models/spree/product/scopes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:3\"}}","suiteSourceFile":"core/spec/models/spree/product/scopes_spec.rb"},{"name":"property scopes with_property finds by an id","suite":"Product scopes at ./spec/models/spree/product/scopes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:4\"}}","suiteSourceFile":"core/spec/models/spree/product/scopes_spec.rb"},{"name":"property scopes with_property cannot find a property with an unknown id","suite":"Product scopes at ./spec/models/spree/product/scopes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:5\"}}","suiteSourceFile":"core/spec/models/spree/product/scopes_spec.rb"},{"name":"property scopes with_property_value finds by a property's name","suite":"Product scopes at ./spec/models/spree/product/scopes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1\"}}","suiteSourceFile":"core/spec/models/spree/product/scopes_spec.rb"},{"name":"property scopes with_property_value cannot find by an unknown property's name","suite":"Product scopes at ./spec/models/spree/product/scopes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:2\"}}","suiteSourceFile":"core/spec/models/spree/product/scopes_spec.rb"},{"name":"property scopes with_property_value cannot find with a name by an incorrect value","suite":"Product scopes at ./spec/models/spree/product/scopes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:3\"}}","suiteSourceFile":"core/spec/models/spree/product/scopes_spec.rb"},{"name":"property scopes with_property_value finds by a property","suite":"Product scopes at ./spec/models/spree/product/scopes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:4\"}}","suiteSourceFile":"core/spec/models/spree/product/scopes_spec.rb"},{"name":"property scopes with_property_value cannot find with a property by an incorrect value","suite":"Product scopes at ./spec/models/spree/product/scopes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:5\"}}","suiteSourceFile":"core/spec/models/spree/product/scopes_spec.rb"},{"name":"property scopes with_property_value finds by an id with a value","suite":"Product scopes at ./spec/models/spree/product/scopes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:6\"}}","suiteSourceFile":"core/spec/models/spree/product/scopes_spec.rb"},{"name":"property scopes with_property_value cannot find with an invalid id","suite":"Product scopes at ./spec/models/spree/product/scopes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:7\"}}","suiteSourceFile":"core/spec/models/spree/product/scopes_spec.rb"},{"name":"property scopes with_property_value cannot find with an invalid value","suite":"Product scopes at ./spec/models/spree/product/scopes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:8\"}}","suiteSourceFile":"core/spec/models/spree/product/scopes_spec.rb"},{"name":"property scopes with_property_values finds by property values","suite":"Product scopes at ./spec/models/spree/product/scopes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3:1\"}}","suiteSourceFile":"core/spec/models/spree/product/scopes_spec.rb"},{"name":"property scopes with_property_values cannot find with an invalid property name","suite":"Product scopes at ./spec/models/spree/product/scopes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3:2\"}}","suiteSourceFile":"core/spec/models/spree/product/scopes_spec.rb"},{"name":"property scopes with_property_values cannot find with invalid property values","suite":"Product scopes at ./spec/models/spree/product/scopes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3:3\"}}","suiteSourceFile":"core/spec/models/spree/product/scopes_spec.rb"},{"name":"#add_simple_scopes define scope ascend_by_updated_at on class example at ./spec/models/spree/product/scopes_spec.rb:213","suite":"Product scopes at ./spec/models/spree/product/scopes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/product/scopes_spec.rb"},{"name":"#add_simple_scopes define scope ascend_by_updated_at on ActiveRecord::Relation example at ./spec/models/spree/product/scopes_spec.rb:217","suite":"Product scopes at ./spec/models/spree/product/scopes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/product/scopes_spec.rb"},{"name":"#add_simple_scopes define scope ascend_by_updated_at on ActiveRecord::Relation example at ./spec/models/spree/product/scopes_spec.rb:218","suite":"Product scopes at ./spec/models/spree/product/scopes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:1:2:2\"}}","suiteSourceFile":"core/spec/models/spree/product/scopes_spec.rb"},{"name":"#add_simple_scopes define scope descend_by_name on class example at ./spec/models/spree/product/scopes_spec.rb:224","suite":"Product scopes at ./spec/models/spree/product/scopes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/product/scopes_spec.rb"},{"name":"#add_simple_scopes define scope descend_by_name on ActiveRecord::Relation example at ./spec/models/spree/product/scopes_spec.rb:228","suite":"Product scopes at ./spec/models/spree/product/scopes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/product/scopes_spec.rb"},{"name":"#add_simple_scopes define scope descend_by_name on ActiveRecord::Relation example at ./spec/models/spree/product/scopes_spec.rb:229","suite":"Product scopes at ./spec/models/spree/product/scopes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:2:2:2\"}}","suiteSourceFile":"core/spec/models/spree/product/scopes_spec.rb"},{"name":"#search_by_name shows product whose name contains phrase","suite":"Product scopes at ./spec/models/spree/product/scopes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","suiteSourceFile":"core/spec/models/spree/product/scopes_spec.rb"},{"name":"#search_by_name shows multiple products whose names contain phrase","suite":"Product scopes at ./spec/models/spree/product/scopes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2\"}}","suiteSourceFile":"core/spec/models/spree/product/scopes_spec.rb"},{"name":"#search_by_name is case insensitive for search phrases","suite":"Product scopes at ./spec/models/spree/product/scopes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:3\"}}","suiteSourceFile":"core/spec/models/spree/product/scopes_spec.rb"},{"name":"#ascend_by_taxons_min_position orders products by ascending taxons minimum position","suite":"Product scopes at ./spec/models/spree/product/scopes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","suiteSourceFile":"core/spec/models/spree/product/scopes_spec.rb"},{"name":"#for_store returns products assigned to a store","suite":"Product scopes at ./spec/models/spree/product/scopes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1\"}}","suiteSourceFile":"core/spec/models/spree/product/scopes_spec.rb"},{"name":"#in_stock.in_stock_or_backorderable example at ./spec/models/spree/product/scopes_spec.rb:325","suite":"Product scopes at ./spec/models/spree/product/scopes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1\"}}","suiteSourceFile":"core/spec/models/spree/product/scopes_spec.rb"},{"name":".by_best_selling with completed orders orders products by units_sold_count in descending order by default","suite":"Product scopes at ./spec/models/spree/product/scopes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1:1\"}}","suiteSourceFile":"core/spec/models/spree/product/scopes_spec.rb"},{"name":".by_best_selling with completed orders orders products by units_sold_count in ascending order when specified","suite":"Product scopes at ./spec/models/spree/product/scopes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1:2\"}}","suiteSourceFile":"core/spec/models/spree/product/scopes_spec.rb"},{"name":".by_best_selling with incomplete orders only counts units from completed orders","suite":"Product scopes at ./spec/models/spree/product/scopes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:2:1\"}}","suiteSourceFile":"core/spec/models/spree/product/scopes_spec.rb"},{"name":".by_best_selling when products have same units_sold_count uses revenue as secondary sort criteria","suite":"Product scopes at ./spec/models/spree/product/scopes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:3:1\"}}","suiteSourceFile":"core/spec/models/spree/product/scopes_spec.rb"},{"name":".by_best_selling with varying quantities sums line item quantities for units_sold_count","suite":"Product scopes at ./spec/models/spree/product/scopes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:4:1\"}}","suiteSourceFile":"core/spec/models/spree/product/scopes_spec.rb"},{"name":".by_best_selling with multiple orders containing multiple line items ranks by total units sold across all orders","suite":"Product scopes at ./spec/models/spree/product/scopes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:5:1\"}}","suiteSourceFile":"core/spec/models/spree/product/scopes_spec.rb"},{"name":".by_best_selling with products having no orders includes products with no orders at the end","suite":"Product scopes at ./spec/models/spree/product/scopes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:6:1\"}}","suiteSourceFile":"core/spec/models/spree/product/scopes_spec.rb"},{"name":".by_best_selling with products having only pending orders (no completed_at) includes products with only pending orders with units_sold_count = 0","suite":"Product scopes at ./spec/models/spree/product/scopes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:7:1\"}}","suiteSourceFile":"core/spec/models/spree/product/scopes_spec.rb"},{"name":".by_best_selling with products having only pending orders (no completed_at) orders products correctly with pending orders included","suite":"Product scopes at ./spec/models/spree/product/scopes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:7:2\"}}","suiteSourceFile":"core/spec/models/spree/product/scopes_spec.rb"},{"name":"options scopes .with_option finds by a option type's name","suite":"Product scopes at ./spec/models/spree/product/scopes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1:1\"}}","suiteSourceFile":"core/spec/models/spree/product/scopes_spec.rb"},{"name":"options scopes .with_option doesn't find any option types with an unknown name","suite":"Product scopes at ./spec/models/spree/product/scopes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1:2\"}}","suiteSourceFile":"core/spec/models/spree/product/scopes_spec.rb"},{"name":"options scopes .with_option finds by a option type","suite":"Product scopes at ./spec/models/spree/product/scopes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1:3\"}}","suiteSourceFile":"core/spec/models/spree/product/scopes_spec.rb"},{"name":"options scopes .with_option finds by an id","suite":"Product scopes at ./spec/models/spree/product/scopes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1:4\"}}","suiteSourceFile":"core/spec/models/spree/product/scopes_spec.rb"},{"name":"options scopes .with_option cannot find an option type with an unknown id","suite":"Product scopes at ./spec/models/spree/product/scopes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1:5\"}}","suiteSourceFile":"core/spec/models/spree/product/scopes_spec.rb"},{"name":"options scopes .with_option_value finds by a option type's name","suite":"Product scopes at ./spec/models/spree/product/scopes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2:1\"}}","suiteSourceFile":"core/spec/models/spree/product/scopes_spec.rb"},{"name":"options scopes .with_option_value doesn't find any option types with an unknown name","suite":"Product scopes at ./spec/models/spree/product/scopes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2:2\"}}","suiteSourceFile":"core/spec/models/spree/product/scopes_spec.rb"},{"name":"options scopes .with_option_value finds by a option type","suite":"Product scopes at ./spec/models/spree/product/scopes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2:3\"}}","suiteSourceFile":"core/spec/models/spree/product/scopes_spec.rb"},{"name":"options scopes .with_option_value finds by an id","suite":"Product scopes at ./spec/models/spree/product/scopes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2:4\"}}","suiteSourceFile":"core/spec/models/spree/product/scopes_spec.rb"},{"name":"options scopes .with_option_value cannot find an option type with an unknown id","suite":"Product scopes at ./spec/models/spree/product/scopes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2:5\"}}","suiteSourceFile":"core/spec/models/spree/product/scopes_spec.rb"},{"name":"options scopes .with_option_value can return product ids","suite":"Product scopes at ./spec/models/spree/product/scopes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2:6\"}}","suiteSourceFile":"core/spec/models/spree/product/scopes_spec.rb"},{"name":"stores old slugs in FriendlyIds history","suite":"Spree::Product::Slugs at ./spec/models/spree/product/slugs_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4\"}}","suiteSourceFile":"core/spec/models/spree/product/slugs_spec.rb"},{"name":"validates slug uniqueness","suite":"Spree::Product::Slugs at ./spec/models/spree/product/slugs_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6\"}}","suiteSourceFile":"core/spec/models/spree/product/slugs_spec.rb"},{"name":"falls back to 'name-sku' for slug if regular name-based slug already in use","suite":"Spree::Product::Slugs at ./spec/models/spree/product/slugs_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7\"}}","suiteSourceFile":"core/spec/models/spree/product/slugs_spec.rb"},{"name":"with not normalized slug normalizes slug on update validation","suite":"Spree::Product::Slugs at ./spec/models/spree/product/slugs_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/product/slugs_spec.rb"},{"name":"with slug history updates slugs with deleted-{id} prefix to ensure uniqueness","suite":"Spree::Product::Slugs at ./spec/models/spree/product/slugs_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/product/slugs_spec.rb"},{"name":"with slug history soft deletes slug record","suite":"Spree::Product::Slugs at ./spec/models/spree/product/slugs_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","suiteSourceFile":"core/spec/models/spree/product/slugs_spec.rb"},{"name":"with slug history allows re-using the slug from history","suite":"Spree::Product::Slugs at ./spec/models/spree/product/slugs_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3\"}}","suiteSourceFile":"core/spec/models/spree/product/slugs_spec.rb"},{"name":"ability to retake a slug of deleted record with the same name can use original slug","suite":"Spree::Product::Slugs at ./spec/models/spree/product/slugs_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/product/slugs_spec.rb"},{"name":"ability to retake a slug of deleted record with the same name can delete the product again and then create a new product with the original slug","suite":"Spree::Product::Slugs at ./spec/models/spree/product/slugs_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","suiteSourceFile":"core/spec/models/spree/product/slugs_spec.rb"},{"name":"when product destroyed renames slug","suite":"Spree::Product::Slugs at ./spec/models/spree/product/slugs_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","suiteSourceFile":"core/spec/models/spree/product/slugs_spec.rb"},{"name":"when product destroyed when more than one translation exists renames slug for all translations","suite":"Spree::Product::Slugs at ./spec/models/spree/product/slugs_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1\"}}","suiteSourceFile":"core/spec/models/spree/product/slugs_spec.rb"},{"name":"when product destroyed when slug is already at or near max length truncates renamed slug to ensure it remains within length limit","suite":"Spree::Product::Slugs at ./spec/models/spree/product/slugs_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3:1\"}}","suiteSourceFile":"core/spec/models/spree/product/slugs_spec.rb"},{"name":"history when product is destroyed keeps the history","suite":"Spree::Product::Slugs at ./spec/models/spree/product/slugs_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1:1\"}}","suiteSourceFile":"core/spec/models/spree/product/slugs_spec.rb"},{"name":"history when product is restored updates the history","suite":"Spree::Product::Slugs at ./spec/models/spree/product/slugs_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2:1\"}}","suiteSourceFile":"core/spec/models/spree/product/slugs_spec.rb"},{"name":"history when product is restored regenerates the product slug","suite":"Spree::Product::Slugs at ./spec/models/spree/product/slugs_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2:2\"}}","suiteSourceFile":"core/spec/models/spree/product/slugs_spec.rb"},{"name":"#localized_slugs_for_store when there are slugs in locales not supported by the store returns only slugs in locales supported by the store","suite":"Spree::Product::Slugs at ./spec/models/spree/product/slugs_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1:1\"}}","suiteSourceFile":"core/spec/models/spree/product/slugs_spec.rb"},{"name":"#localized_slugs_for_store when one of the supported locales does not have a translation falls back to store's default locale","suite":"Spree::Product::Slugs at ./spec/models/spree/product/slugs_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:2:1\"}}","suiteSourceFile":"core/spec/models/spree/product/slugs_spec.rb"},{"name":"#localized_slugs_for_store the slugs are generated from name when slug field is empty saves slugs generated from name","suite":"Spree::Product::Slugs at ./spec/models/spree/product/slugs_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:3:1\"}}","suiteSourceFile":"core/spec/models/spree/product/slugs_spec.rb"},{"name":"#localized_slugs_for_store the slugs are generated from default locale name when name and slug for translation is empty saves slugs generated from fallback name","suite":"Spree::Product::Slugs at ./spec/models/spree/product/slugs_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:4:1\"}}","suiteSourceFile":"core/spec/models/spree/product/slugs_spec.rb"},{"name":"#localized_slugs_for_store the slugs are generated from invalid slug format saves slugs in valid format","suite":"Spree::Product::Slugs at ./spec/models/spree/product/slugs_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:5:1\"}}","suiteSourceFile":"core/spec/models/spree/product/slugs_spec.rb"},{"name":"translated slugs generating slugs when a translated product has no name and slug generates slug from the product name","suite":"Spree::Product::Slugs at ./spec/models/spree/product/slugs_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/product/slugs_spec.rb"},{"name":"translated slugs generating slugs when a translated product has no slug generates slug from the translated product name","suite":"Spree::Product::Slugs at ./spec/models/spree/product/slugs_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/product/slugs_spec.rb"},{"name":"translated slugs generating slugs when a translated product has a slug normalizes the existing slug","suite":"Spree::Product::Slugs at ./spec/models/spree/product/slugs_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/product/slugs_spec.rb"},{"name":"translated slugs ensuring slug uniqueness when the slug is unique in the same locale keeps the original slug","suite":"Spree::Product::Slugs at ./spec/models/spree/product/slugs_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/product/slugs_spec.rb"},{"name":"translated slugs ensuring slug uniqueness when the slug is not unique in the same locale appends a UUID to make it unique","suite":"Spree::Product::Slugs at ./spec/models/spree/product/slugs_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/product/slugs_spec.rb"},{"name":"translated slugs ensuring slug uniqueness when the slug is unique in a different locale allows the same slug in different locales","suite":"Spree::Product::Slugs at ./spec/models/spree/product/slugs_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:2:3:1\"}}","suiteSourceFile":"core/spec/models/spree/product/slugs_spec.rb"},{"name":"finds products filtered by brand does not attempt to call value method on Arel::Table","suite":"product filters at ./spec/models/spree/product_filter_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/product_filter_spec.rb"},{"name":"finds products filtered by brand can find products in the 'Nike' brand","suite":"product filters at ./spec/models/spree/product_filter_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/product_filter_spec.rb"},{"name":"#validations should not create duplicated property for product","suite":"Spree::ProductProperty at ./spec/models/spree/product_property_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/product_property_spec.rb"},{"name":"#validations value field validates presence","suite":"Spree::ProductProperty at ./spec/models/spree/product_property_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/product_property_spec.rb"},{"name":"translations translates product property fields","suite":"Spree::ProductProperty at ./spec/models/spree/product_property_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/product_property_spec.rb"},{"name":"touching updates product","suite":"Spree::ProductProperty at ./spec/models/spree/product_property_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/product_property_spec.rb"},{"name":"touching updates property","suite":"Spree::ProductProperty at ./spec/models/spree/product_property_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","suiteSourceFile":"core/spec/models/spree/product_property_spec.rb"},{"name":"ransackable_associations example at ./spec/models/spree/product_property_spec.rb:58","suite":"Spree::ProductProperty at ./spec/models/spree/product_property_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/product_property_spec.rb"},{"name":"setting param example at ./spec/models/spree/product_property_spec.rb:64","suite":"Spree::ProductProperty at ./spec/models/spree/product_property_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","suiteSourceFile":"core/spec/models/spree/product_property_spec.rb"},{"name":"setting value normalizes value by stripping whitespace","suite":"Spree::ProductProperty at ./spec/models/spree/product_property_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","suiteSourceFile":"core/spec/models/spree/product_property_spec.rb"},{"name":"initializes a master variant when building a product","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:4","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:5","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:7","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:8","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:10","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:11","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"behaves like metadata reads data as symbolized keys","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"behaves like metadata reads data as not symbolized keys","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"behaves like metadata can query records by metadata properties","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:10\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"behaves like lifecycle events lifecycle events product.created publishes created event when record is created","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"behaves like lifecycle events lifecycle events product.updated publishes updated event when record is updated","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"behaves like lifecycle events lifecycle events product.deleted publishes deleted event when record is deleted","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"after_initialize :assign_default_tax_category when product is new assigns default tax category","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"after_initialize :assign_default_tax_category when product is persisted does not assign default tax category","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"before_validation :ensure_default_shipping_category assigns the default shipping category","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"before_validation :ensure_default_shipping_category when product has a shipping category keeps the assigned shipping category","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"before_validation :ensure_default_shipping_category when product is persisted does not assign the default shipping category","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"product instance purchasable? with variants returns false if no variant is purchasable even if master is","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"product instance purchasable? with variants returns true if variant is purchasable","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"product instance purchasable? without variants returns false if master is not purchasable","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"product instance purchasable? without variants returns true if master is purchasable","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:2:2\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"product instance backorderable? with variants returns false if no variant is backorderable even if master is","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"product instance backorderable? with variants returns true if variant is backorderable","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1:2\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"product instance backorderable? without variants returns false if master is not backorderable","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"product instance backorderable? without variants returns true if master is backorderable","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:2:2\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"product instance in_stock? with variants returns false if no variant is in stock even if master is","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3:1:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"product instance in_stock? with variants returns true if variant is in stock","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3:1:2\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"product instance in_stock? without variants returns false if master is not in stock","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3:2:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"product instance in_stock? without variants returns true if master is in stock","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3:2:2\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"product instance #duplicate duplicates product","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:4:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"product instance #duplicate calls #duplicate_extra","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:4:3\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"product instance #duplicate when translations exist for another locale duplicates translations for all locales","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:4:2:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"product instance master variant when master variant changed saves the master","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:5:1:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"product instance master variant when master default price changed saves the master","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:5:2:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"product instance master variant when master default price changed saves the default price","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:5:2:2\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"product instance master variant when master variant and price haven't changed does not save the master","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:5:3:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"product instance product has no variants #destroy sets deleted_at value","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:6:1:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"product instance product has variants #destroy sets deleted_at value","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:7:1:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"product instance #price strips non-price characters","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:8:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"product instance #display_price shows the amount","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:9:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"product instance #display_price with currency set to JPY displays the currency in yen","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:9:2:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"product instance #available? is available if status is set to active","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:10:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"product instance #available? is not available if destroyed","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:10:2\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"product instance #available? is not available when available_on is in the future","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:10:3\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"product instance #can_supply? is true","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:11:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"product instance #can_supply? is false","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:11:2\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"product instance variants_and_option_values returns only variants with option values","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:12:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"product instance has stock movements doesnt raise ReadOnlyRecord error","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:13:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"product instance has stock items can retrieve stock items","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:14:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"product instance #discontinue_on_must_be_later_than_make_active_at make_active_at is a date earlier than discontinue_on is valid","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:15:1:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"product instance #discontinue_on_must_be_later_than_make_active_at make_active_at is a date earlier than discontinue_on is not valid example at ./spec/models/spree/product_spec.rb:321","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:15:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"product instance #discontinue_on_must_be_later_than_make_active_at make_active_at is a date earlier than discontinue_on is not valid example at ./spec/models/spree/product_spec.rb:322","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:15:2:1:2\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"product instance #discontinue_on_must_be_later_than_make_active_at make_active_at and discontinue_on are nil is valid","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:15:3:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"product instance hard deletion doesnt raise ActiveRecordError error","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:16:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"product instance history keeps translations when product is destroyed","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:17:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"product instance memoized data without action keeps data","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:18:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"product instance memoized data resets memoized data after save","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:18:2\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"product instance memoized data resets memoized data reload","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:18:3\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"product instance when using another locale translates product fields","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:19:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"properties properly assigns properties","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"properties does not create duplicate properties when set_property is called","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"properties does not overwrite properties' presentation names","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:4\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"properties optional property_presentation is not used example at ./spec/models/spree/product_spec.rb:456","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:3:1:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"properties optional property_presentation is used example at ./spec/models/spree/product_spec.rb:462","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:3:2:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"properties #possible_promotions lists the promotion as a possible promotion","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:5:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#create when prototype is supplied creates properties based on the prototype","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#create when prototype with option types is supplied creates option types based on the prototype","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#create when prototype with option types is supplied creates product option types based on the prototype","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2:2\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#create when prototype with option types is supplied creates variants from an option values hash with one option type","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2:3\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#create when prototype with option types is supplied stills create variants when option_values_hash is given but prototype id is nil","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2:4\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#create when prototype with option types is supplied creates variants from an option values hash with multiple option types","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2:5\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#create when track inventory is disabled creates a default stock item","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:3:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#images only looks for variant images","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#images is sorted by position","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"classifications and taxons is joined through classifications","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"classifications and taxons will delete all classifications","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:2\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#total_on_hand is infinite if track_inventory_levels is false","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#total_on_hand is infinite if variant is on demand","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:2\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#total_on_hand returns sum of stock items count_on_hand","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:3\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#total_on_hand returns sum of stock items count_on_hand when variants_including_master is not loaded","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:4\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#validate_master when duplicate SKUs entered example at ./spec/models/spree/product_spec.rb:653","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#discontinue! sets the discontinued","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#discontinue! sets the status to archived","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:2\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#discontinue! changes updated_at","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:3\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#discontinued? is false","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#discontinued? is true","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:2\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#brand_taxon fetches Brand Taxon","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#brand when brand association is not defined falls back to brand_taxon","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:1:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#brand when brand association is not defined returns brand name via brand_name method","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:1:2\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#brand when brand association is defined uses the brand association","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:2:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#category_taxon fetches Category Taxon","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:17:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#category when category association is not defined falls back to category_taxon","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:1:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#category when category association is defined checks for the category association","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:2:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#backordered? returns true when out of stock and backorderable","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#backordered? returns false when out of stock and not backorderable","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:2\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#backordered? returns false when there is available item in stock","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:3\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#ensure_not_in_complete_orders adds error on product destroy","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:20:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#default_variant track inventory levels product has variants in stock returns first non-master in stock variant","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:21:1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#default_variant track inventory levels product has variants backorderable returns first non-master backorderable variant","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:21:1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#default_variant track inventory levels product has variants product without variants in stock or backorerable returns first non-master variant","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:21:1:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#default_variant track inventory levels without tracking inventory levels returns first non-master variant","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:21:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#default_variant track inventory levels product without variants returns master variant","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:21:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#default_variant_id product has variants returns first non-master variant ID","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:22:1:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#default_variant_id product without variants returns master variant ID","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:22:2:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#default_image when master has images returns the master image","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:23:1:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#default_image when master has images with variants that also have images returns the master image (master takes priority)","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:23:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#default_image when master has no images but variant does returns the variant image","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:23:2:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#default_image when no variants have images returns nil","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:23:3:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#has_variant_images? when no variants have images returns false","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:24:1:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#has_variant_images? when master has images returns true","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:24:2:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#has_variant_images? when a variant has images returns true","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:24:3:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#has_variant_images? when variant_images are preloaded uses loaded association","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:24:4:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#has_variant_images? when variant_images are preloaded but empty returns false","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:24:5:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#has_images? when no variants have images returns false","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:25:1:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#has_images? when master has images but default_variant does not returns true (checks all variants)","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:25:2:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#has_images? when any variant has images returns true","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:25:3:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#image_count when no variants have images returns 0","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:26:1:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#image_count when master has images returns the master image count","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:26:2:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#image_count when master has images when variant also has images returns master image count (master takes priority)","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:26:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#image_count when only variant has images returns the variant image count","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:26:3:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#variant_for_images when no variants have images returns nil","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:27:1:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#variant_for_images when master has images returns master","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:27:2:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#variant_for_images when only default_variant has images returns default_variant","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:27:3:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#variant_for_images when only a non-default variant has images returns the variant with images","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:27:4:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#secondary_image when no variants have images returns nil","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:28:1:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#secondary_image when variant has only one image returns nil","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:28:2:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#secondary_image when variant has multiple images returns the second image","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:28:3:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#secondary_image when images are on a non-master variant returns the second image from that variant","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:28:4:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"image methods with eager loading returns correct images with storefront includes","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"image methods with eager loading when image is on non-default variant returns image from non-default variant","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:2:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#ensure_store_presence no store passed auto-assigns store","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:30:1:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#ensure_store_presence store passed does not auto-assign store","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:30:2:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#ensure_store_presence validation disabled preference set example at ./spec/models/spree/product_spec.rb:1177","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:30:3:1:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#taxons_for_store returns product taxons for specified store","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:31:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#any_variant_in_stock_or_backorderable? when only master variant is in stock or backorderable example at ./spec/models/spree/product_spec.rb:1204","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:32:1:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#any_variant_in_stock_or_backorderable? with more variants aside from the master variant with at least one non-master variant stock items count_on_hand > 0 example at ./spec/models/spree/product_spec.rb:1222","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:32:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#any_variant_in_stock_or_backorderable? with more variants aside from the master variant when all non-master variant stock items have count_on_hand <= 0 example at ./spec/models/spree/product_spec.rb:1228","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:32:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#any_variant_in_stock_or_backorderable? with more variants aside from the master variant when all non-master variant stock items have count_on_hand <= 0 when all non-master variant stock items have track_inventory = false example at ./spec/models/spree/product_spec.rb:1233","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:32:2:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#any_variant_in_stock_or_backorderable? with more variants aside from the master variant when all non-master variant stock items have count_on_hand <= 0 when all non-master variant stock items have track_inventory = true example at ./spec/models/spree/product_spec.rb:1237","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:32:2:2:3:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#any_variant_in_stock_or_backorderable? with more variants aside from the master variant when all non-master variant stock items have count_on_hand <= 0 when all non-master variant stock items have track_inventory = true when all non-master variant stock items have backorderable = true example at ./spec/models/spree/product_spec.rb:1242","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:32:2:2:3:2:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#any_variant_in_stock_or_backorderable? #digital? when product has a shipping method with DigitalDelivery calculator example at ./spec/models/spree/product_spec.rb:1255","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:32:3:1:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#any_variant_in_stock_or_backorderable? #digital? when product does not have a shipping method with DigitalDelivery calculator example at ./spec/models/spree/product_spec.rb:1261","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:32:3:2:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#to_csv when product has no variants returns an array with one line of CSV data","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:33:1:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#to_csv when product has variants returns an array with CSV data for each variant including the master variant","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:33:2:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#to_csv when store is not provided uses default store","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:33:3:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#to_csv when store is not provided falls back to first store if no default","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:33:3:2\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#on_sale? when at least one variant is on sale returns true","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:34:1:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#on_sale? when no variant is on sale returns false","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:34:2:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#first_or_default_variant without variants returns the default variant","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:35:1:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#first_or_default_variant with a variant in the given currency returns the available variant in the given currency","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:35:2:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#first_or_default_variant with all variants in different currencies returns the first variant","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:35:3:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#first_available_variant returns the first available variant","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:36:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#price_varies? when all variants have the same price in the given currency example at ./spec/models/spree/product_spec.rb:1447","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:37:1:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#price_varies? when variants have different prices in the given currency example at ./spec/models/spree/product_spec.rb:1456","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:37:2:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#any_variant_available? without variants when master variant is available example at ./spec/models/spree/product_spec.rb:1474","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:38:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#any_variant_available? without variants when master variant is not available example at ./spec/models/spree/product_spec.rb:1480","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:38:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#any_variant_available? with variants when all variants are available example at ./spec/models/spree/product_spec.rb:1498","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:38:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#any_variant_available? with variants when no variants are available example at ./spec/models/spree/product_spec.rb:1504","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:38:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#lowest_price returns the lowest price","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:39:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"scopes .not_discontinued when nothing is passed as an argument returns only not discontinued products","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:40:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"scopes .not_discontinued when false is passed as an argument returns all products","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:40:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"scopes .available when available_on is specified returns products available before or on the specified date","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:40:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"scopes .available when available_on is not specified returns active, not discontinued products","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:40:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"scopes .available when show_products_without_price is false only returns products with prices in the specified currency","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:40:2:3:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"scopes .available when show_products_without_price is true returns products regardless of price","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:40:2:4:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"scopes .ascend_by_price orders products by minimum price ascending","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:40:3:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"scopes .ascend_by_price places products without prices at the end","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:40:3:2\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"scopes .ascend_by_price with variant prices uses minimum variant price for sorting","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:40:3:3:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"scopes .descend_by_price orders products by maximum price descending","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:40:4:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"scopes .descend_by_price places products without prices at the end","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:40:4:2\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"scopes .descend_by_price with variant prices uses maximum variant price for sorting","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:40:4:3:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"after_touch :touch_taxons without taxons skips enqueuing a job for touching the taxons","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:41:1:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"after_touch :touch_taxons with taxons enqueues a job for touching the taxons","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:41:2:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"custom events product.activated publishes product.activated event when activated","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:42:1:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"custom events product.archived publishes product.archived event when archived","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:42:2:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#has_variants? without variants returns false","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:43:1:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#has_variants? without variants has variant_count of 0","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:43:1:2\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#has_variants? with variants returns true","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:43:2:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#has_variants? with variants has variant_count of 1","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:43:2:2\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"#has_variants? when variants are loaded in memory uses the loaded association instead of variant_count","suite":"Spree::Product at ./spec/models/spree/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:43:3:1\"}}","suiteSourceFile":"core/spec/models/spree/product_spec.rb"},{"name":"behaves like an adjustment source #destroy when order incomplete example at ./spec/support/concerns/adjustment_source.rb:21","suite":"Spree::Promotion::Actions::CreateAdjustment at ./spec/models/spree/promotion/actions/create_adjustment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/actions/create_adjustment_spec.rb"},{"name":"behaves like an adjustment source #destroy when order is complete example at ./spec/support/concerns/adjustment_source.rb:27","suite":"Spree::Promotion::Actions::CreateAdjustment at ./spec/models/spree/promotion/actions/create_adjustment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/actions/create_adjustment_spec.rb"},{"name":"behaves like an adjustment source #destroy when order is complete example at ./spec/support/concerns/adjustment_source.rb:28","suite":"Spree::Promotion::Actions::CreateAdjustment at ./spec/models/spree/promotion/actions/create_adjustment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:2\"}}","suiteSourceFile":"core/spec/models/spree/promotion/actions/create_adjustment_spec.rb"},{"name":"#compute_amount when shipping_discount is applied and total is less than discount returns discount amount eq to total","suite":"Spree::Promotion::Actions::CreateAdjustment at ./spec/models/spree/promotion/actions/create_adjustment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/actions/create_adjustment_spec.rb"},{"name":"#compute_amount when shipping_discount is applied and total is equal to discount returns discount amount","suite":"Spree::Promotion::Actions::CreateAdjustment at ./spec/models/spree/promotion/actions/create_adjustment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/actions/create_adjustment_spec.rb"},{"name":"#compute_amount when shipping_discount is applied and total is greater than discount returns discount amount","suite":"Spree::Promotion::Actions::CreateAdjustment at ./spec/models/spree/promotion/actions/create_adjustment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/actions/create_adjustment_spec.rb"},{"name":"#compute_amount when shipping_discount is not applied and total is less than discount returns discount amount eq to total","suite":"Spree::Promotion::Actions::CreateAdjustment at ./spec/models/spree/promotion/actions/create_adjustment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/actions/create_adjustment_spec.rb"},{"name":"#compute_amount when shipping_discount is not applied and total is equal to discount returns discount amount","suite":"Spree::Promotion::Actions::CreateAdjustment at ./spec/models/spree/promotion/actions/create_adjustment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/actions/create_adjustment_spec.rb"},{"name":"#compute_amount when shipping_discount is not applied and total is greater than discount returns discount amount","suite":"Spree::Promotion::Actions::CreateAdjustment at ./spec/models/spree/promotion/actions/create_adjustment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:3:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/actions/create_adjustment_spec.rb"},{"name":"#perform does not apply an adjustment if the amount is 0","suite":"Spree::Promotion::Actions::CreateAdjustment at ./spec/models/spree/promotion/actions/create_adjustment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/actions/create_adjustment_spec.rb"},{"name":"#perform creates a discount with correct negative amount","suite":"Spree::Promotion::Actions::CreateAdjustment at ./spec/models/spree/promotion/actions/create_adjustment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","suiteSourceFile":"core/spec/models/spree/promotion/actions/create_adjustment_spec.rb"},{"name":"#perform creates a discount accessible through both order_id and adjustable_id","suite":"Spree::Promotion::Actions::CreateAdjustment at ./spec/models/spree/promotion/actions/create_adjustment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3\"}}","suiteSourceFile":"core/spec/models/spree/promotion/actions/create_adjustment_spec.rb"},{"name":"#perform does not create a discount when order already has one from this promotion","suite":"Spree::Promotion::Actions::CreateAdjustment at ./spec/models/spree/promotion/actions/create_adjustment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4\"}}","suiteSourceFile":"core/spec/models/spree/promotion/actions/create_adjustment_spec.rb"},{"name":"behaves like an adjustment source #destroy when order incomplete example at ./spec/support/concerns/adjustment_source.rb:21","suite":"Spree::Promotion::Actions::CreateItemAdjustments at ./spec/models/spree/promotion/actions/create_item_adjustments_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/actions/create_item_adjustments_spec.rb"},{"name":"behaves like an adjustment source #destroy when order is complete example at ./spec/support/concerns/adjustment_source.rb:27","suite":"Spree::Promotion::Actions::CreateItemAdjustments at ./spec/models/spree/promotion/actions/create_item_adjustments_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/actions/create_item_adjustments_spec.rb"},{"name":"behaves like an adjustment source #destroy when order is complete example at ./spec/support/concerns/adjustment_source.rb:28","suite":"Spree::Promotion::Actions::CreateItemAdjustments at ./spec/models/spree/promotion/actions/create_item_adjustments_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:2\"}}","suiteSourceFile":"core/spec/models/spree/promotion/actions/create_item_adjustments_spec.rb"},{"name":"#perform when calculator computes 0 does not create an adjustment when calculator returns 0","suite":"Spree::Promotion::Actions::CreateItemAdjustments at ./spec/models/spree/promotion/actions/create_item_adjustments_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/actions/create_item_adjustments_spec.rb"},{"name":"#perform when calculator returns a non-zero value creates adjustment with item as adjustable","suite":"Spree::Promotion::Actions::CreateItemAdjustments at ./spec/models/spree/promotion/actions/create_item_adjustments_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/actions/create_item_adjustments_spec.rb"},{"name":"#perform when calculator returns a non-zero value creates adjustment with self as source","suite":"Spree::Promotion::Actions::CreateItemAdjustments at ./spec/models/spree/promotion/actions/create_item_adjustments_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:2\"}}","suiteSourceFile":"core/spec/models/spree/promotion/actions/create_item_adjustments_spec.rb"},{"name":"#perform when calculator returns a non-zero value does not perform twice on the same item","suite":"Spree::Promotion::Actions::CreateItemAdjustments at ./spec/models/spree/promotion/actions/create_item_adjustments_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:3\"}}","suiteSourceFile":"core/spec/models/spree/promotion/actions/create_item_adjustments_spec.rb"},{"name":"#perform when calculator returns a non-zero value with products rules does not create adjustments for line_items not in product rule","suite":"Spree::Promotion::Actions::CreateItemAdjustments at ./spec/models/spree/promotion/actions/create_item_adjustments_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:4:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/actions/create_item_adjustments_spec.rb"},{"name":"#compute_amount when the adjustable is actionable calls compute on the calculator","suite":"Spree::Promotion::Actions::CreateItemAdjustments at ./spec/models/spree/promotion/actions/create_item_adjustments_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/actions/create_item_adjustments_spec.rb"},{"name":"#compute_amount when the adjustable is actionable calculator returns amount greater than item total does not exceed it","suite":"Spree::Promotion::Actions::CreateItemAdjustments at ./spec/models/spree/promotion/actions/create_item_adjustments_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/actions/create_item_adjustments_spec.rb"},{"name":"#compute_amount when the adjustable is actionable given other promotions with order adjustment should not consider not eligible adjustments","suite":"Spree::Promotion::Actions::CreateItemAdjustments at ./spec/models/spree/promotion/actions/create_item_adjustments_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/actions/create_item_adjustments_spec.rb"},{"name":"#compute_amount when the adjustable is actionable given other promotions with order adjustment when adjustments total is greater than item total does not exceed it","suite":"Spree::Promotion::Actions::CreateItemAdjustments at ./spec/models/spree/promotion/actions/create_item_adjustments_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:3:2:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/actions/create_item_adjustments_spec.rb"},{"name":"#compute_amount when the adjustable is not actionable returns 0","suite":"Spree::Promotion::Actions::CreateItemAdjustments at ./spec/models/spree/promotion/actions/create_item_adjustments_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/actions/create_item_adjustments_spec.rb"},{"name":"#destroy destroys adjustments for incompleted orders","suite":"Spree::Promotion::Actions::CreateItemAdjustments at ./spec/models/spree/promotion/actions/create_item_adjustments_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/actions/create_item_adjustments_spec.rb"},{"name":"#destroy nullifies adjustments for completed orders","suite":"Spree::Promotion::Actions::CreateItemAdjustments at ./spec/models/spree/promotion/actions/create_item_adjustments_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2\"}}","suiteSourceFile":"core/spec/models/spree/promotion/actions/create_item_adjustments_spec.rb"},{"name":"#destroy doesnt mess with unrelated adjustments","suite":"Spree::Promotion::Actions::CreateItemAdjustments at ./spec/models/spree/promotion/actions/create_item_adjustments_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3\"}}","suiteSourceFile":"core/spec/models/spree/promotion/actions/create_item_adjustments_spec.rb"},{"name":"#perform order is eligible adds line items to order with correct variant and quantity","suite":"Spree::Promotion::Actions::CreateLineItems at ./spec/models/spree/promotion/actions/create_line_items_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/actions/create_line_items_spec.rb"},{"name":"#perform order is eligible only adds the delta of quantity to an order","suite":"Spree::Promotion::Actions::CreateLineItems at ./spec/models/spree/promotion/actions/create_line_items_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/promotion/actions/create_line_items_spec.rb"},{"name":"#perform order is eligible doesn't add if the quantity is greater","suite":"Spree::Promotion::Actions::CreateLineItems at ./spec/models/spree/promotion/actions/create_line_items_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3\"}}","suiteSourceFile":"core/spec/models/spree/promotion/actions/create_line_items_spec.rb"},{"name":"#perform order is eligible doesn't try to add an item if it's out of stock","suite":"Spree::Promotion::Actions::CreateLineItems at ./spec/models/spree/promotion/actions/create_line_items_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:4\"}}","suiteSourceFile":"core/spec/models/spree/promotion/actions/create_line_items_spec.rb"},{"name":"#item_available? returns false if the item is out of stock","suite":"Spree::Promotion::Actions::CreateLineItems at ./spec/models/spree/promotion/actions/create_line_items_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/actions/create_line_items_spec.rb"},{"name":"#item_available? returns true if the item is in stock","suite":"Spree::Promotion::Actions::CreateLineItems at ./spec/models/spree/promotion/actions/create_line_items_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","suiteSourceFile":"core/spec/models/spree/promotion/actions/create_line_items_spec.rb"},{"name":"#handle_promotion_action_line_items creates new promotion action line items","suite":"Spree::Promotion::Actions::CreateLineItems at ./spec/models/spree/promotion/actions/create_line_items_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/actions/create_line_items_spec.rb"},{"name":"#handle_promotion_action_line_items with existing promotion action line items updates existing promotion action line items","suite":"Spree::Promotion::Actions::CreateLineItems at ./spec/models/spree/promotion/actions/create_line_items_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/actions/create_line_items_spec.rb"},{"name":"#handle_promotion_action_line_items with items marked for destruction removes items marked for destruction","suite":"Spree::Promotion::Actions::CreateLineItems at ./spec/models/spree/promotion/actions/create_line_items_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/actions/create_line_items_spec.rb"},{"name":"behaves like an adjustment source #destroy when order incomplete example at ./spec/support/concerns/adjustment_source.rb:21","suite":"Spree::Promotion::Actions::FreeShipping at ./spec/models/spree/promotion/actions/free_shipping_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/actions/free_shipping_spec.rb"},{"name":"behaves like an adjustment source #destroy when order is complete example at ./spec/support/concerns/adjustment_source.rb:27","suite":"Spree::Promotion::Actions::FreeShipping at ./spec/models/spree/promotion/actions/free_shipping_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/actions/free_shipping_spec.rb"},{"name":"behaves like an adjustment source #destroy when order is complete example at ./spec/support/concerns/adjustment_source.rb:28","suite":"Spree::Promotion::Actions::FreeShipping at ./spec/models/spree/promotion/actions/free_shipping_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:2\"}}","suiteSourceFile":"core/spec/models/spree/promotion/actions/free_shipping_spec.rb"},{"name":"#perform creates a discount with correct negative amount","suite":"Spree::Promotion::Actions::FreeShipping at ./spec/models/spree/promotion/actions/free_shipping_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/actions/free_shipping_spec.rb"},{"name":"#perform does not create a discount when order already has one from this promotion","suite":"Spree::Promotion::Actions::FreeShipping at ./spec/models/spree/promotion/actions/free_shipping_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","suiteSourceFile":"core/spec/models/spree/promotion/actions/free_shipping_spec.rb"},{"name":"#perform when shipping methods are configured to be free can create adjustment with amount equal to 0","suite":"Spree::Promotion::Actions::FreeShipping at ./spec/models/spree/promotion/actions/free_shipping_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/actions/free_shipping_spec.rb"},{"name":"preferred country_id is set is eligible for correct country","suite":"Spree::Promotion::Rules::Country at ./spec/models/spree/promotion/rules/country_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/country_spec.rb"},{"name":"preferred country_id is set is not eligible for incorrect country","suite":"Spree::Promotion::Rules::Country at ./spec/models/spree/promotion/rules/country_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/country_spec.rb"},{"name":"preferred country_iso is set is eligible for correct country","suite":"Spree::Promotion::Rules::Country at ./spec/models/spree/promotion/rules/country_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/country_spec.rb"},{"name":"preferred country_iso is set is not eligible for incorrect country","suite":"Spree::Promotion::Rules::Country at ./spec/models/spree/promotion/rules/country_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/country_spec.rb"},{"name":"preferred country is not set is eligible for default country","suite":"Spree::Promotion::Rules::Country at ./spec/models/spree/promotion/rules/country_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/country_spec.rb"},{"name":"preferred country is not set is not eligible for incorrect country","suite":"Spree::Promotion::Rules::Country at ./spec/models/spree/promotion/rules/country_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/country_spec.rb"},{"name":"preferred currency is set is eligible for correct currency","suite":"Spree::Promotion::Rules::Currency at ./spec/models/spree/promotion/rules/currency_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/currency_spec.rb"},{"name":"preferred currency is set is not eligible for incorrect currency","suite":"Spree::Promotion::Rules::Currency at ./spec/models/spree/promotion/rules/currency_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/currency_spec.rb"},{"name":"#applicable? when promotable is an order example at ./spec/models/spree/promotion/rules/currency_spec.rb:31","suite":"Spree::Promotion::Rules::Currency at ./spec/models/spree/promotion/rules/currency_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/currency_spec.rb"},{"name":"#applicable? when promotable is not an order example at ./spec/models/spree/promotion/rules/currency_spec.rb:36","suite":"Spree::Promotion::Rules::Currency at ./spec/models/spree/promotion/rules/currency_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/currency_spec.rb"},{"name":"#applicable? returns true for orders","suite":"Spree::Promotion::Rules::CustomerGroup at ./spec/models/spree/promotion/rules/customer_group_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/customer_group_spec.rb"},{"name":"#applicable? returns false for non-orders","suite":"Spree::Promotion::Rules::CustomerGroup at ./spec/models/spree/promotion/rules/customer_group_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/customer_group_spec.rb"},{"name":"#eligible? when no customer groups are configured is not eligible","suite":"Spree::Promotion::Rules::CustomerGroup at ./spec/models/spree/promotion/rules/customer_group_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/customer_group_spec.rb"},{"name":"#eligible? when order has no user is not eligible","suite":"Spree::Promotion::Rules::CustomerGroup at ./spec/models/spree/promotion/rules/customer_group_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/customer_group_spec.rb"},{"name":"#eligible? when user is in the customer group is eligible","suite":"Spree::Promotion::Rules::CustomerGroup at ./spec/models/spree/promotion/rules/customer_group_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/customer_group_spec.rb"},{"name":"#eligible? when user is not in any configured customer group is not eligible","suite":"Spree::Promotion::Rules::CustomerGroup at ./spec/models/spree/promotion/rules/customer_group_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:4:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/customer_group_spec.rb"},{"name":"#eligible? when user is in one of multiple configured customer groups is eligible","suite":"Spree::Promotion::Rules::CustomerGroup at ./spec/models/spree/promotion/rules/customer_group_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:5:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/customer_group_spec.rb"},{"name":"#eligible? when customer_group_ids contains strings is eligible","suite":"Spree::Promotion::Rules::CustomerGroup at ./spec/models/spree/promotion/rules/customer_group_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:6:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/customer_group_spec.rb"},{"name":"without a user or email example at ./spec/models/spree/promotion/rules/first_order_spec.rb:11","suite":"Spree::Promotion::Rules::FirstOrder at ./spec/models/spree/promotion/rules/first_order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/first_order_spec.rb"},{"name":"without a user or email sets an error message","suite":"Spree::Promotion::Rules::FirstOrder at ./spec/models/spree/promotion/rules/first_order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/first_order_spec.rb"},{"name":"first order for a signed user with no completed orders example at ./spec/models/spree/promotion/rules/first_order_spec.rb:25","suite":"Spree::Promotion::Rules::FirstOrder at ./spec/models/spree/promotion/rules/first_order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/first_order_spec.rb"},{"name":"first order for a signed user with no completed orders is eligible when user passed in payload data","suite":"Spree::Promotion::Rules::FirstOrder at ./spec/models/spree/promotion/rules/first_order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/first_order_spec.rb"},{"name":"first order for a signed user with completed orders is eligible when checked against first completed order","suite":"Spree::Promotion::Rules::FirstOrder at ./spec/models/spree/promotion/rules/first_order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/first_order_spec.rb"},{"name":"first order for a signed user with completed orders with another order example at ./spec/models/spree/promotion/rules/first_order_spec.rb:47","suite":"Spree::Promotion::Rules::FirstOrder at ./spec/models/spree/promotion/rules/first_order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/first_order_spec.rb"},{"name":"first order for a signed user with completed orders with another order sets an error message","suite":"Spree::Promotion::Rules::FirstOrder at ./spec/models/spree/promotion/rules/first_order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:2:2:2\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/first_order_spec.rb"},{"name":"first order for a guest user with no other orders example at ./spec/models/spree/promotion/rules/first_order_spec.rb:64","suite":"Spree::Promotion::Rules::FirstOrder at ./spec/models/spree/promotion/rules/first_order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/first_order_spec.rb"},{"name":"first order for a guest user with another order example at ./spec/models/spree/promotion/rules/first_order_spec.rb:70","suite":"Spree::Promotion::Rules::FirstOrder at ./spec/models/spree/promotion/rules/first_order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/first_order_spec.rb"},{"name":"first order for a guest user with another order sets an error message","suite":"Spree::Promotion::Rules::FirstOrder at ./spec/models/spree/promotion/rules/first_order_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:2:2\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/first_order_spec.rb"},{"name":"preferred operator_min set to gt and preferred operator_max set to lt and item total is lower than preferred maximum amount and item total is higher than preferred minimum amount is eligible","suite":"Spree::Promotion::Rules::ItemTotal at ./spec/models/spree/promotion/rules/item_total_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/item_total_spec.rb"},{"name":"preferred operator_min set to gt and preferred operator_max set to lt and item total is lower than preferred maximum amount and item total is equal to the preferred minimum amount is not eligible","suite":"Spree::Promotion::Rules::ItemTotal at ./spec/models/spree/promotion/rules/item_total_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/item_total_spec.rb"},{"name":"preferred operator_min set to gt and preferred operator_max set to lt and item total is lower than preferred maximum amount and item total is equal to the preferred minimum amount set an error message","suite":"Spree::Promotion::Rules::ItemTotal at ./spec/models/spree/promotion/rules/item_total_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:2\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/item_total_spec.rb"},{"name":"preferred operator_min set to gt and preferred operator_max set to lt and item total is lower than preferred maximum amount and item total is lower to the preferred minimum amount is not eligible","suite":"Spree::Promotion::Rules::ItemTotal at ./spec/models/spree/promotion/rules/item_total_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/item_total_spec.rb"},{"name":"preferred operator_min set to gt and preferred operator_max set to lt and item total is lower than preferred maximum amount and item total is lower to the preferred minimum amount set an error message","suite":"Spree::Promotion::Rules::ItemTotal at ./spec/models/spree/promotion/rules/item_total_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:2\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/item_total_spec.rb"},{"name":"preferred operator_min set to gt and preferred operator_max set to lt and item total is equal to the preferred maximum amount is not eligible","suite":"Spree::Promotion::Rules::ItemTotal at ./spec/models/spree/promotion/rules/item_total_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/item_total_spec.rb"},{"name":"preferred operator_min set to gt and preferred operator_max set to lt and item total is equal to the preferred maximum amount set an error message","suite":"Spree::Promotion::Rules::ItemTotal at ./spec/models/spree/promotion/rules/item_total_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/item_total_spec.rb"},{"name":"preferred operator_min set to gt and preferred operator_max set to lt and item total is higher than the preferred maximum amount is not eligible","suite":"Spree::Promotion::Rules::ItemTotal at ./spec/models/spree/promotion/rules/item_total_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/item_total_spec.rb"},{"name":"preferred operator_min set to gt and preferred operator_max set to lt and item total is higher than the preferred maximum amount set an error message","suite":"Spree::Promotion::Rules::ItemTotal at ./spec/models/spree/promotion/rules/item_total_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:2\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/item_total_spec.rb"},{"name":"preferred operator set to gt and preferred operator_max set to lte and item total is lower than preferred maximum amount and item total is higher than preferred minimum amount is eligible","suite":"Spree::Promotion::Rules::ItemTotal at ./spec/models/spree/promotion/rules/item_total_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/item_total_spec.rb"},{"name":"preferred operator set to gt and preferred operator_max set to lte and item total is lower than preferred maximum amount and item total is equal to the preferred minimum amount is not eligible","suite":"Spree::Promotion::Rules::ItemTotal at ./spec/models/spree/promotion/rules/item_total_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/item_total_spec.rb"},{"name":"preferred operator set to gt and preferred operator_max set to lte and item total is lower than preferred maximum amount and item total is equal to the preferred minimum amount set an error message","suite":"Spree::Promotion::Rules::ItemTotal at ./spec/models/spree/promotion/rules/item_total_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:2:2\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/item_total_spec.rb"},{"name":"preferred operator set to gt and preferred operator_max set to lte and item total is lower than preferred maximum amount and item total is lower to the preferred minimum amount is not eligible","suite":"Spree::Promotion::Rules::ItemTotal at ./spec/models/spree/promotion/rules/item_total_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/item_total_spec.rb"},{"name":"preferred operator set to gt and preferred operator_max set to lte and item total is lower than preferred maximum amount and item total is lower to the preferred minimum amount set an error message","suite":"Spree::Promotion::Rules::ItemTotal at ./spec/models/spree/promotion/rules/item_total_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:3:2\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/item_total_spec.rb"},{"name":"preferred operator set to gt and preferred operator_max set to lte and item total is equal to the preferred maximum amount is not eligible","suite":"Spree::Promotion::Rules::ItemTotal at ./spec/models/spree/promotion/rules/item_total_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/item_total_spec.rb"},{"name":"preferred operator set to gt and preferred operator_max set to lte and item total is higher than the preferred maximum amount is not eligible","suite":"Spree::Promotion::Rules::ItemTotal at ./spec/models/spree/promotion/rules/item_total_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/item_total_spec.rb"},{"name":"preferred operator set to gt and preferred operator_max set to lte and item total is higher than the preferred maximum amount set an error message","suite":"Spree::Promotion::Rules::ItemTotal at ./spec/models/spree/promotion/rules/item_total_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:2\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/item_total_spec.rb"},{"name":"preferred operator set to gte and preferred operator_max set to lt and item total is lower than preferred maximum amount and item total is higher than preferred minimum amount is eligible","suite":"Spree::Promotion::Rules::ItemTotal at ./spec/models/spree/promotion/rules/item_total_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/item_total_spec.rb"},{"name":"preferred operator set to gte and preferred operator_max set to lt and item total is lower than preferred maximum amount and item total is equal to the preferred minimum amount is not eligible","suite":"Spree::Promotion::Rules::ItemTotal at ./spec/models/spree/promotion/rules/item_total_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/item_total_spec.rb"},{"name":"preferred operator set to gte and preferred operator_max set to lt and item total is lower than preferred maximum amount and item total is lower to the preferred minimum amount is not eligible","suite":"Spree::Promotion::Rules::ItemTotal at ./spec/models/spree/promotion/rules/item_total_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/item_total_spec.rb"},{"name":"preferred operator set to gte and preferred operator_max set to lt and item total is lower than preferred maximum amount and item total is lower to the preferred minimum amount set an error message","suite":"Spree::Promotion::Rules::ItemTotal at ./spec/models/spree/promotion/rules/item_total_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:3:2\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/item_total_spec.rb"},{"name":"preferred operator set to gte and preferred operator_max set to lt and item total is equal to the preferred maximum amount is not eligible","suite":"Spree::Promotion::Rules::ItemTotal at ./spec/models/spree/promotion/rules/item_total_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/item_total_spec.rb"},{"name":"preferred operator set to gte and preferred operator_max set to lt and item total is equal to the preferred maximum amount set an error message","suite":"Spree::Promotion::Rules::ItemTotal at ./spec/models/spree/promotion/rules/item_total_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:2\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/item_total_spec.rb"},{"name":"preferred operator set to gte and preferred operator_max set to lt and item total is higher than the preferred maximum amount is not eligible","suite":"Spree::Promotion::Rules::ItemTotal at ./spec/models/spree/promotion/rules/item_total_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/item_total_spec.rb"},{"name":"preferred operator set to gte and preferred operator_max set to lt and item total is higher than the preferred maximum amount set an error message","suite":"Spree::Promotion::Rules::ItemTotal at ./spec/models/spree/promotion/rules/item_total_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3:2\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/item_total_spec.rb"},{"name":"preferred operator set to gte and preferred operator_max set to lte and item total is lower than preferred maximum amount and item total is higher than preferred minimum amount is eligible","suite":"Spree::Promotion::Rules::ItemTotal at ./spec/models/spree/promotion/rules/item_total_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/item_total_spec.rb"},{"name":"preferred operator set to gte and preferred operator_max set to lte and item total is lower than preferred maximum amount and item total is equal to the preferred minimum amount is not eligible","suite":"Spree::Promotion::Rules::ItemTotal at ./spec/models/spree/promotion/rules/item_total_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/item_total_spec.rb"},{"name":"preferred operator set to gte and preferred operator_max set to lte and item total is lower than preferred maximum amount and item total is lower to the preferred minimum amount is not eligible","suite":"Spree::Promotion::Rules::ItemTotal at ./spec/models/spree/promotion/rules/item_total_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/item_total_spec.rb"},{"name":"preferred operator set to gte and preferred operator_max set to lte and item total is lower than preferred maximum amount and item total is lower to the preferred minimum amount set an error message","suite":"Spree::Promotion::Rules::ItemTotal at ./spec/models/spree/promotion/rules/item_total_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:3:2\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/item_total_spec.rb"},{"name":"preferred operator set to gte and preferred operator_max set to lte and item total is equal to the preferred maximum amount is not eligible","suite":"Spree::Promotion::Rules::ItemTotal at ./spec/models/spree/promotion/rules/item_total_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/item_total_spec.rb"},{"name":"preferred operator set to gte and preferred operator_max set to lte and item total is higher than the preferred maximum amount is not eligible","suite":"Spree::Promotion::Rules::ItemTotal at ./spec/models/spree/promotion/rules/item_total_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/item_total_spec.rb"},{"name":"preferred operator set to gte and preferred operator_max set to lte and item total is higher than the preferred maximum amount set an error message","suite":"Spree::Promotion::Rules::ItemTotal at ./spec/models/spree/promotion/rules/item_total_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3:2\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/item_total_spec.rb"},{"name":"when preferred amount max is not set and item total is higher than preferred minimum amount is eligible","suite":"Spree::Promotion::Rules::ItemTotal at ./spec/models/spree/promotion/rules/item_total_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/item_total_spec.rb"},{"name":"when preferred amount max is not set and item total is equal to the preferred minimum amount is not eligible","suite":"Spree::Promotion::Rules::ItemTotal at ./spec/models/spree/promotion/rules/item_total_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/item_total_spec.rb"},{"name":"when preferred amount max is not set and item total is equal to the preferred minimum amount set an error message","suite":"Spree::Promotion::Rules::ItemTotal at ./spec/models/spree/promotion/rules/item_total_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:2\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/item_total_spec.rb"},{"name":"when preferred amount max is not set and item total is lower than preferred minimum amount is not eligible","suite":"Spree::Promotion::Rules::ItemTotal at ./spec/models/spree/promotion/rules/item_total_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/item_total_spec.rb"},{"name":"when preferred amount max is not set and item total is lower than preferred minimum amount set an error message","suite":"Spree::Promotion::Rules::ItemTotal at ./spec/models/spree/promotion/rules/item_total_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3:2\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/item_total_spec.rb"},{"name":"#eligible?(order) when the order is assigned to a user when the user has used this promotion before example at ./spec/models/spree/promotion/rules/one_use_per_user_spec.rb:23","suite":"Spree::Promotion::Rules::OneUsePerUser at ./spec/models/spree/promotion/rules/one_use_per_user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/one_use_per_user_spec.rb"},{"name":"#eligible?(order) when the order is assigned to a user when the user has used this promotion before sets an error message","suite":"Spree::Promotion::Rules::OneUsePerUser at ./spec/models/spree/promotion/rules/one_use_per_user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/one_use_per_user_spec.rb"},{"name":"#eligible?(order) when the order is assigned to a user when the user has not used this promotion before example at ./spec/models/spree/promotion/rules/one_use_per_user_spec.rb:32","suite":"Spree::Promotion::Rules::OneUsePerUser at ./spec/models/spree/promotion/rules/one_use_per_user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/one_use_per_user_spec.rb"},{"name":"#eligible?(order) when the order is not assigned to a user example at ./spec/models/spree/promotion/rules/one_use_per_user_spec.rb:39","suite":"Spree::Promotion::Rules::OneUsePerUser at ./spec/models/spree/promotion/rules/one_use_per_user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/one_use_per_user_spec.rb"},{"name":"#eligible?(order) when the order is not assigned to a user sets an error message","suite":"Spree::Promotion::Rules::OneUsePerUser at ./spec/models/spree/promotion/rules/one_use_per_user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/one_use_per_user_spec.rb"},{"name":"setting eligible values parses ids","suite":"Spree::Promotion::Rules::OptionValue at ./spec/models/spree/promotion/rules/option_value_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/option_value_spec.rb"},{"name":"#applicable? when promotable is an order example at ./spec/models/spree/promotion/rules/option_value_spec.rb:26","suite":"Spree::Promotion::Rules::OptionValue at ./spec/models/spree/promotion/rules/option_value_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/option_value_spec.rb"},{"name":"#applicable? when promotable is not an order example at ./spec/models/spree/promotion/rules/option_value_spec.rb:32","suite":"Spree::Promotion::Rules::OptionValue at ./spec/models/spree/promotion/rules/option_value_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/option_value_spec.rb"},{"name":"#eligible? when there are any applicable line items example at ./spec/models/spree/promotion/rules/option_value_spec.rb:48","suite":"Spree::Promotion::Rules::OptionValue at ./spec/models/spree/promotion/rules/option_value_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/option_value_spec.rb"},{"name":"#eligible? when there are no applicable line items example at ./spec/models/spree/promotion/rules/option_value_spec.rb:56","suite":"Spree::Promotion::Rules::OptionValue at ./spec/models/spree/promotion/rules/option_value_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/option_value_spec.rb"},{"name":"#actionable? when the line item has the correct product when all of the option values match example at ./spec/models/spree/promotion/rules/option_value_spec.rb:99","suite":"Spree::Promotion::Rules::OptionValue at ./spec/models/spree/promotion/rules/option_value_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/option_value_spec.rb"},{"name":"#actionable? when the line item has the correct product when not all of the option values match example at ./spec/models/spree/promotion/rules/option_value_spec.rb:110","suite":"Spree::Promotion::Rules::OptionValue at ./spec/models/spree/promotion/rules/option_value_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/option_value_spec.rb"},{"name":"#actionable? when the line item's product doesn't match example at ./spec/models/spree/promotion/rules/option_value_spec.rb:122","suite":"Spree::Promotion::Rules::OptionValue at ./spec/models/spree/promotion/rules/option_value_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/option_value_spec.rb"},{"name":"#eligible?(order) is eligible if there are no products","suite":"Spree::Promotion::Rules::Product at ./spec/models/spree/promotion/rules/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/product_spec.rb"},{"name":"#eligible?(order) with 'any' match policy is eligible if any of the products is in eligible products","suite":"Spree::Promotion::Rules::Product at ./spec/models/spree/promotion/rules/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/product_spec.rb"},{"name":"#eligible?(order) with 'any' match policy when none of the products are eligible products example at ./spec/models/spree/promotion/rules/product_spec.rb:34","suite":"Spree::Promotion::Rules::Product at ./spec/models/spree/promotion/rules/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/product_spec.rb"},{"name":"#eligible?(order) with 'any' match policy when none of the products are eligible products sets an error message","suite":"Spree::Promotion::Rules::Product at ./spec/models/spree/promotion/rules/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:2\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/product_spec.rb"},{"name":"#eligible?(order) with 'all' match policy is eligible if all of the eligible products are ordered","suite":"Spree::Promotion::Rules::Product at ./spec/models/spree/promotion/rules/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/product_spec.rb"},{"name":"#eligible?(order) with 'all' match policy when any of the eligible products is not ordered example at ./spec/models/spree/promotion/rules/product_spec.rb:58","suite":"Spree::Promotion::Rules::Product at ./spec/models/spree/promotion/rules/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:2:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/product_spec.rb"},{"name":"#eligible?(order) with 'all' match policy when any of the eligible products is not ordered sets an error message","suite":"Spree::Promotion::Rules::Product at ./spec/models/spree/promotion/rules/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:2:2\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/product_spec.rb"},{"name":"#eligible?(order) with 'none' match policy is eligible if none of the order's products are in eligible products","suite":"Spree::Promotion::Rules::Product at ./spec/models/spree/promotion/rules/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/product_spec.rb"},{"name":"#eligible?(order) with 'none' match policy when any of the order's products are in eligible products example at ./spec/models/spree/promotion/rules/product_spec.rb:82","suite":"Spree::Promotion::Rules::Product at ./spec/models/spree/promotion/rules/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:2:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/product_spec.rb"},{"name":"#eligible?(order) with 'none' match policy when any of the order's products are in eligible products sets an error message","suite":"Spree::Promotion::Rules::Product at ./spec/models/spree/promotion/rules/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:2:2\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/product_spec.rb"},{"name":"#actionable? with 'any' match policy for product in rule example at ./spec/models/spree/promotion/rules/product_spec.rb:112","suite":"Spree::Promotion::Rules::Product at ./spec/models/spree/promotion/rules/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/product_spec.rb"},{"name":"#actionable? with 'any' match policy for product not in rule example at ./spec/models/spree/promotion/rules/product_spec.rb:118","suite":"Spree::Promotion::Rules::Product at ./spec/models/spree/promotion/rules/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/product_spec.rb"},{"name":"#actionable? with 'all' match policy for product in rule example at ./spec/models/spree/promotion/rules/product_spec.rb:128","suite":"Spree::Promotion::Rules::Product at ./spec/models/spree/promotion/rules/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/product_spec.rb"},{"name":"#actionable? with 'all' match policy for product not in rule example at ./spec/models/spree/promotion/rules/product_spec.rb:134","suite":"Spree::Promotion::Rules::Product at ./spec/models/spree/promotion/rules/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/product_spec.rb"},{"name":"#actionable? with 'none' match policy for product in rule example at ./spec/models/spree/promotion/rules/product_spec.rb:144","suite":"Spree::Promotion::Rules::Product at ./spec/models/spree/promotion/rules/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:1:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/product_spec.rb"},{"name":"#actionable? with 'none' match policy for product not in rule example at ./spec/models/spree/promotion/rules/product_spec.rb:150","suite":"Spree::Promotion::Rules::Product at ./spec/models/spree/promotion/rules/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:2:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/product_spec.rb"},{"name":"#add_products adds the products to the rule","suite":"Spree::Promotion::Rules::Product at ./spec/models/spree/promotion/rules/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/product_spec.rb"},{"name":"#add_products removes the products from the rule","suite":"Spree::Promotion::Rules::Product at ./spec/models/spree/promotion/rules/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/product_spec.rb"},{"name":"#add_products does not remove the products when nil is passed","suite":"Spree::Promotion::Rules::Product at ./spec/models/spree/promotion/rules/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/product_spec.rb"},{"name":"#add_products touches the record to invalidate cache","suite":"Spree::Promotion::Rules::Product at ./spec/models/spree/promotion/rules/product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/product_spec.rb"},{"name":"#eligible?(order) with any match policy is eligible if order does has any preferred taxon","suite":"Spree::Promotion::Rules::Taxon at ./spec/models/spree/promotion/rules/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/taxon_spec.rb"},{"name":"#eligible?(order) with any match policy when order contains items from different taxons acts on a product within the eligible taxon","suite":"Spree::Promotion::Rules::Taxon at ./spec/models/spree/promotion/rules/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/taxon_spec.rb"},{"name":"#eligible?(order) with any match policy when order contains items from different taxons does not act on a product in another taxon","suite":"Spree::Promotion::Rules::Taxon at ./spec/models/spree/promotion/rules/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:2\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/taxon_spec.rb"},{"name":"#eligible?(order) with any match policy when order does not have any preferred taxon example at ./spec/models/spree/promotion/rules/taxon_spec.rb:44","suite":"Spree::Promotion::Rules::Taxon at ./spec/models/spree/promotion/rules/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/taxon_spec.rb"},{"name":"#eligible?(order) with any match policy when order does not have any preferred taxon sets an error message","suite":"Spree::Promotion::Rules::Taxon at ./spec/models/spree/promotion/rules/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:2\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/taxon_spec.rb"},{"name":"#eligible?(order) with any match policy when a product has a taxon child of a taxon rule example at ./spec/models/spree/promotion/rules/taxon_spec.rb:59","suite":"Spree::Promotion::Rules::Taxon at ./spec/models/spree/promotion/rules/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/taxon_spec.rb"},{"name":"#eligible?(order) with all match policy is eligible order has all preferred taxons","suite":"Spree::Promotion::Rules::Taxon at ./spec/models/spree/promotion/rules/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/taxon_spec.rb"},{"name":"#eligible?(order) with all match policy when order does not have all preferred taxons example at ./spec/models/spree/promotion/rules/taxon_spec.rb:80","suite":"Spree::Promotion::Rules::Taxon at ./spec/models/spree/promotion/rules/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/taxon_spec.rb"},{"name":"#eligible?(order) with all match policy when order does not have all preferred taxons sets an error message","suite":"Spree::Promotion::Rules::Taxon at ./spec/models/spree/promotion/rules/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:2\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/taxon_spec.rb"},{"name":"#eligible?(order) with all match policy when a product has a taxon child of a taxon rule example at ./spec/models/spree/promotion/rules/taxon_spec.rb:99","suite":"Spree::Promotion::Rules::Taxon at ./spec/models/spree/promotion/rules/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:3:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/taxon_spec.rb"},{"name":"#add_taxons adds the taxons to the rule","suite":"Spree::Promotion::Rules::Taxon at ./spec/models/spree/promotion/rules/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/taxon_spec.rb"},{"name":"#add_taxons removes the taxons from the rule","suite":"Spree::Promotion::Rules::Taxon at ./spec/models/spree/promotion/rules/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/taxon_spec.rb"},{"name":"#add_taxons does not remove the taxons when nil is passed","suite":"Spree::Promotion::Rules::Taxon at ./spec/models/spree/promotion/rules/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/taxon_spec.rb"},{"name":"#eligible?(order) is eligible if order has an associated user","suite":"Spree::Promotion::Rules::UserLoggedIn at ./spec/models/spree/promotion/rules/user_logged_in_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/user_logged_in_spec.rb"},{"name":"#eligible?(order) when user is not logged in example at ./spec/models/spree/promotion/rules/user_logged_in_spec.rb:19","suite":"Spree::Promotion::Rules::UserLoggedIn at ./spec/models/spree/promotion/rules/user_logged_in_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/user_logged_in_spec.rb"},{"name":"#eligible?(order) when user is not logged in sets an error message","suite":"Spree::Promotion::Rules::UserLoggedIn at ./spec/models/spree/promotion/rules/user_logged_in_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/user_logged_in_spec.rb"},{"name":"#eligible? is not eligible if users are not provided","suite":"Spree::Promotion::Rules::User at ./spec/models/spree/promotion/rules/user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/user_spec.rb"},{"name":"#eligible? can assign to user_ids","suite":"Spree::Promotion::Rules::User at ./spec/models/spree/promotion/rules/user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/user_spec.rb"},{"name":"#eligible? when users include user placing the order is eligible if users include user placing the order","suite":"Spree::Promotion::Rules::User at ./spec/models/spree/promotion/rules/user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/user_spec.rb"},{"name":"#eligible? when users does not include user placing the order is not eligible if user placing the order is not listed","suite":"Spree::Promotion::Rules::User at ./spec/models/spree/promotion/rules/user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/user_spec.rb"},{"name":"#add_users adds users to the promotion rule","suite":"Spree::Promotion::Rules::User at ./spec/models/spree/promotion/rules/user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/user_spec.rb"},{"name":"#add_users removes users from the promotion rule","suite":"Spree::Promotion::Rules::User at ./spec/models/spree/promotion/rules/user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/user_spec.rb"},{"name":"#add_users does not remove the users when nil is passed","suite":"Spree::Promotion::Rules::User at ./spec/models/spree/promotion/rules/user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/user_spec.rb"},{"name":"#add_users touches the record to invalidate cache","suite":"Spree::Promotion::Rules::User at ./spec/models/spree/promotion/rules/user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:4\"}}","suiteSourceFile":"core/spec/models/spree/promotion/rules/user_spec.rb"},{"name":"forces developer to implement 'perform' method","suite":"Spree::PromotionAction at ./spec/models/spree/promotion_action_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_action_spec.rb"},{"name":"validation when all required attributes are specified example at ./spec/models/spree/promotion_category_spec.rb:10","suite":"Spree::PromotionCategory at ./spec/models/spree/promotion_category_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_category_spec.rb"},{"name":"validation when name is missing example at ./spec/models/spree/promotion_category_spec.rb:16","suite":"Spree::PromotionCategory at ./spec/models/spree/promotion_category_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_category_spec.rb"},{"name":"activates in LineItem level promotion with no rules creates the adjustment","suite":"Spree::PromotionHandler::Cart at ./spec/models/spree/promotion_handler/cart_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_handler/cart_spec.rb"},{"name":"activates in LineItem level promotion includes item involved creates the adjustment","suite":"Spree::PromotionHandler::Cart at ./spec/models/spree/promotion_handler/cart_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_handler/cart_spec.rb"},{"name":"activates in LineItem level promotion has item total rule creates the adjustment","suite":"Spree::PromotionHandler::Cart at ./spec/models/spree/promotion_handler/cart_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_handler/cart_spec.rb"},{"name":"activates in Order level promotion with no rules creates the adjustment","suite":"Spree::PromotionHandler::Cart at ./spec/models/spree/promotion_handler/cart_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_handler/cart_spec.rb"},{"name":"activates in Order level promotion has item total rule creates the adjustment","suite":"Spree::PromotionHandler::Cart at ./spec/models/spree/promotion_handler/cart_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_handler/cart_spec.rb"},{"name":"activates promotions associated with the order creates the adjustment","suite":"Spree::PromotionHandler::Cart at ./spec/models/spree/promotion_handler/cart_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_handler/cart_spec.rb"},{"name":"returns self in apply","suite":"Spree::PromotionHandler::Coupon at ./spec/models/spree/promotion_handler/coupon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_handler/coupon_spec.rb"},{"name":"status messages #set_success_code has status_code","suite":"Spree::PromotionHandler::Coupon at ./spec/models/spree/promotion_handler/coupon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_handler/coupon_spec.rb"},{"name":"status messages #set_success_code has success message","suite":"Spree::PromotionHandler::Coupon at ./spec/models/spree/promotion_handler/coupon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:2\"}}","suiteSourceFile":"core/spec/models/spree/promotion_handler/coupon_spec.rb"},{"name":"status messages #set_error_code has status_code","suite":"Spree::PromotionHandler::Coupon at ./spec/models/spree/promotion_handler/coupon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_handler/coupon_spec.rb"},{"name":"status messages #set_error_code has error message","suite":"Spree::PromotionHandler::Coupon at ./spec/models/spree/promotion_handler/coupon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:2\"}}","suiteSourceFile":"core/spec/models/spree/promotion_handler/coupon_spec.rb"},{"name":"coupon code promotion doesnt exist doesnt fetch any promotion","suite":"Spree::PromotionHandler::Coupon at ./spec/models/spree/promotion_handler/coupon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_handler/coupon_spec.rb"},{"name":"coupon code promotion doesnt exist with no actions defined populates error message","suite":"Spree::PromotionHandler::Coupon at ./spec/models/spree/promotion_handler/coupon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_handler/coupon_spec.rb"},{"name":"existing coupon code promotion fetches with given code","suite":"Spree::PromotionHandler::Coupon at ./spec/models/spree/promotion_handler/coupon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_handler/coupon_spec.rb"},{"name":"existing coupon code promotion with a per-item adjustment action right coupon given with correct coupon code casing successfully activates promo","suite":"Spree::PromotionHandler::Coupon at ./spec/models/spree/promotion_handler/coupon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_handler/coupon_spec.rb"},{"name":"existing coupon code promotion with a per-item adjustment action right coupon given with correct coupon code casing calls update_with_updater!","suite":"Spree::PromotionHandler::Coupon at ./spec/models/spree/promotion_handler/coupon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/promotion_handler/coupon_spec.rb"},{"name":"existing coupon code promotion with a per-item adjustment action right coupon given with correct coupon code casing coupon already applied to the order","suite":"Spree::PromotionHandler::Coupon at ./spec/models/spree/promotion_handler/coupon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1:1:3\"}}","suiteSourceFile":"core/spec/models/spree/promotion_handler/coupon_spec.rb"},{"name":"existing coupon code promotion with a per-item adjustment action right coupon given with incorrect coupon code casing successfully activates promo","suite":"Spree::PromotionHandler::Coupon at ./spec/models/spree/promotion_handler/coupon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_handler/coupon_spec.rb"},{"name":"existing coupon code promotion with a per-item adjustment action coexists with a non coupon code promo successfully activates promo","suite":"Spree::PromotionHandler::Coupon at ./spec/models/spree/promotion_handler/coupon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_handler/coupon_spec.rb"},{"name":"existing coupon code promotion with a free-shipping adjustment action right coupon code given successfully activates promo","suite":"Spree::PromotionHandler::Coupon at ./spec/models/spree/promotion_handler/coupon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3:1:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_handler/coupon_spec.rb"},{"name":"existing coupon code promotion with a free-shipping adjustment action right coupon code given coupon already applied to the order","suite":"Spree::PromotionHandler::Coupon at ./spec/models/spree/promotion_handler/coupon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3:1:2\"}}","suiteSourceFile":"core/spec/models/spree/promotion_handler/coupon_spec.rb"},{"name":"existing coupon code promotion with a whole-order adjustment action right coupon given successfully activates promo","suite":"Spree::PromotionHandler::Coupon at ./spec/models/spree/promotion_handler/coupon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:4:1:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_handler/coupon_spec.rb"},{"name":"existing coupon code promotion with a whole-order adjustment action right coupon given coupon already applied to the order","suite":"Spree::PromotionHandler::Coupon at ./spec/models/spree/promotion_handler/coupon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:4:1:2\"}}","suiteSourceFile":"core/spec/models/spree/promotion_handler/coupon_spec.rb"},{"name":"existing coupon code promotion with a whole-order adjustment action right coupon given coupon fails to activate","suite":"Spree::PromotionHandler::Coupon at ./spec/models/spree/promotion_handler/coupon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:4:1:3\"}}","suiteSourceFile":"core/spec/models/spree/promotion_handler/coupon_spec.rb"},{"name":"existing coupon code promotion with a whole-order adjustment action right coupon given coupon code hit max usage","suite":"Spree::PromotionHandler::Coupon at ./spec/models/spree/promotion_handler/coupon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:4:1:4\"}}","suiteSourceFile":"core/spec/models/spree/promotion_handler/coupon_spec.rb"},{"name":"existing coupon code promotion with a whole-order adjustment action right coupon given when the a new coupon is less good notifies of better deal","suite":"Spree::PromotionHandler::Coupon at ./spec/models/spree/promotion_handler/coupon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:4:1:5:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_handler/coupon_spec.rb"},{"name":"existing coupon code promotion for an order with taxable line items and the product price is less than promo discount successfully applies the promo","suite":"Spree::PromotionHandler::Coupon at ./spec/models/spree/promotion_handler/coupon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:5:1:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_handler/coupon_spec.rb"},{"name":"existing coupon code promotion for an order with taxable line items and the product price is greater than promo discount successfully applies the promo","suite":"Spree::PromotionHandler::Coupon at ./spec/models/spree/promotion_handler/coupon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:5:2:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_handler/coupon_spec.rb"},{"name":"existing coupon code promotion for an order with taxable line items and multiple quantity per line item successfully applies the promo","suite":"Spree::PromotionHandler::Coupon at ./spec/models/spree/promotion_handler/coupon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:5:3:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_handler/coupon_spec.rb"},{"name":"existing coupon code promotion with a CreateLineItems action successfully activates promo","suite":"Spree::PromotionHandler::Coupon at ./spec/models/spree/promotion_handler/coupon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:6:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_handler/coupon_spec.rb"},{"name":"with coupon codes valid coupon successfully activates promo","suite":"Spree::PromotionHandler::Coupon at ./spec/models/spree/promotion_handler/coupon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_handler/coupon_spec.rb"},{"name":"with coupon codes valid coupon coupon already applied to the order","suite":"Spree::PromotionHandler::Coupon at ./spec/models/spree/promotion_handler/coupon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:2\"}}","suiteSourceFile":"core/spec/models/spree/promotion_handler/coupon_spec.rb"},{"name":"with coupon codes valid coupon with used coupon code does not activate promo","suite":"Spree::PromotionHandler::Coupon at ./spec/models/spree/promotion_handler/coupon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_handler/coupon_spec.rb"},{"name":"with coupon codes valid coupon #remove removes the promotion","suite":"Spree::PromotionHandler::Coupon at ./spec/models/spree/promotion_handler/coupon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_handler/coupon_spec.rb"},{"name":"with coupon codes valid coupon #remove touches the promotion","suite":"Spree::PromotionHandler::Coupon at ./spec/models/spree/promotion_handler/coupon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:4:2\"}}","suiteSourceFile":"core/spec/models/spree/promotion_handler/coupon_spec.rb"},{"name":"number of usages for one common promotion code hits max usage","suite":"Spree::PromotionHandler::Coupon at ./spec/models/spree/promotion_handler/coupon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_handler/coupon_spec.rb"},{"name":"number of usages for one-time unique promotion codes promotion can be used as many times as it has coupon codes","suite":"Spree::PromotionHandler::Coupon at ./spec/models/spree/promotion_handler/coupon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2:3\"}}","suiteSourceFile":"core/spec/models/spree/promotion_handler/coupon_spec.rb"},{"name":"number of usages for one-time unique promotion codes behaves like allows to use coupon code one time only example at ./spec/models/spree/promotion_handler/coupon_spec.rb:442","suite":"Spree::PromotionHandler::Coupon at ./spec/models/spree/promotion_handler/coupon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_handler/coupon_spec.rb"},{"name":"number of usages for one-time unique promotion codes behaves like allows to use coupon code one time only example at ./spec/models/spree/promotion_handler/coupon_spec.rb:442","suite":"Spree::PromotionHandler::Coupon at ./spec/models/spree/promotion_handler/coupon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_handler/coupon_spec.rb"},{"name":"for a gift card apply when gift card is not applied applies gift card","suite":"Spree::PromotionHandler::Coupon at ./spec/models/spree/promotion_handler/coupon_with_gift_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_handler/coupon_with_gift_card_spec.rb"},{"name":"for a gift card apply when the gift card is applied to another order doesn't apply the gift card to a new order","suite":"Spree::PromotionHandler::Coupon at ./spec/models/spree/promotion_handler/coupon_with_gift_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_handler/coupon_with_gift_card_spec.rb"},{"name":"for a gift card apply when gift card is expired returns error code","suite":"Spree::PromotionHandler::Coupon at ./spec/models/spree/promotion_handler/coupon_with_gift_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_handler/coupon_with_gift_card_spec.rb"},{"name":"for a gift card apply when gift card is already redeemed returns error code","suite":"Spree::PromotionHandler::Coupon at ./spec/models/spree/promotion_handler/coupon_with_gift_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_handler/coupon_with_gift_card_spec.rb"},{"name":"#remove when gift card is applied removes gift card","suite":"Spree::PromotionHandler::Coupon at ./spec/models/spree/promotion_handler/coupon_with_gift_card_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_handler/coupon_with_gift_card_spec.rb"},{"name":"activates in Shipment level creates the adjustment","suite":"Spree::PromotionHandler::FreeShipping at ./spec/models/spree/promotion_handler/free_shipping_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_handler/free_shipping_spec.rb"},{"name":"if promo has a code does adjust the shipment when applied to order","suite":"Spree::PromotionHandler::FreeShipping at ./spec/models/spree/promotion_handler/free_shipping_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_handler/free_shipping_spec.rb"},{"name":"if promo has a code does not adjust the shipment when not applied to order","suite":"Spree::PromotionHandler::FreeShipping at ./spec/models/spree/promotion_handler/free_shipping_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","suiteSourceFile":"core/spec/models/spree/promotion_handler/free_shipping_spec.rb"},{"name":"if promo has multiple codes does adjust the shipment when applied to order","suite":"Spree::PromotionHandler::FreeShipping at ./spec/models/spree/promotion_handler/free_shipping_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_handler/free_shipping_spec.rb"},{"name":"if promo has multiple codes does not adjust the shipment when not applied to order","suite":"Spree::PromotionHandler::FreeShipping at ./spec/models/spree/promotion_handler/free_shipping_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","suiteSourceFile":"core/spec/models/spree/promotion_handler/free_shipping_spec.rb"},{"name":"if promo has a path does not adjust the shipment","suite":"Spree::PromotionHandler::FreeShipping at ./spec/models/spree/promotion_handler/free_shipping_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_handler/free_shipping_spec.rb"},{"name":"activates at the right path","suite":"Spree::PromotionHandler::Page at ./spec/models/spree/promotion_handler/page_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_handler/page_spec.rb"},{"name":"does not activate at the wrong path","suite":"Spree::PromotionHandler::Page at ./spec/models/spree/promotion_handler/page_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3\"}}","suiteSourceFile":"core/spec/models/spree/promotion_handler/page_spec.rb"},{"name":"when promotion is expired is not activated","suite":"Spree::PromotionHandler::Page at ./spec/models/spree/promotion_handler/page_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_handler/page_spec.rb"},{"name":"#duplicate model fields returns a duplicate of a promotion with the path, name and code fields changed","suite":"Spree::PromotionHandler::PromotionDuplicator at ./spec/models/spree/promotion_handler/promotion_duplicator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_handler/promotion_duplicator_spec.rb"},{"name":"#duplicate model fields returns a duplicate of a promotion with all the fields (except the path, name and code fields) the same","suite":"Spree::PromotionHandler::PromotionDuplicator at ./spec/models/spree/promotion_handler/promotion_duplicator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/promotion_handler/promotion_duplicator_spec.rb"},{"name":"#duplicate model associations - rules copies all promotion rules","suite":"Spree::PromotionHandler::PromotionDuplicator at ./spec/models/spree/promotion_handler/promotion_duplicator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_handler/promotion_duplicator_spec.rb"},{"name":"#duplicate model associations - rules promotion rule's fields (except promotion_id) are the same","suite":"Spree::PromotionHandler::PromotionDuplicator at ./spec/models/spree/promotion_handler/promotion_duplicator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2\"}}","suiteSourceFile":"core/spec/models/spree/promotion_handler/promotion_duplicator_spec.rb"},{"name":"#duplicate model associations - rules assigns a new promotion rule to new promotion","suite":"Spree::PromotionHandler::PromotionDuplicator at ./spec/models/spree/promotion_handler/promotion_duplicator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:3\"}}","suiteSourceFile":"core/spec/models/spree/promotion_handler/promotion_duplicator_spec.rb"},{"name":"#duplicate model associations - actions copies all promotion actions","suite":"Spree::PromotionHandler::PromotionDuplicator at ./spec/models/spree/promotion_handler/promotion_duplicator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_handler/promotion_duplicator_spec.rb"},{"name":"#duplicate model associations - actions copies promotion stores","suite":"Spree::PromotionHandler::PromotionDuplicator at ./spec/models/spree/promotion_handler/promotion_duplicator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:2\"}}","suiteSourceFile":"core/spec/models/spree/promotion_handler/promotion_duplicator_spec.rb"},{"name":"#duplicate model associations - actions promotion action's fields (except promotion_id) are the same","suite":"Spree::PromotionHandler::PromotionDuplicator at ./spec/models/spree/promotion_handler/promotion_duplicator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:3\"}}","suiteSourceFile":"core/spec/models/spree/promotion_handler/promotion_duplicator_spec.rb"},{"name":"#duplicate model associations - actions assigns a new promotion action to new promotion","suite":"Spree::PromotionHandler::PromotionDuplicator at ./spec/models/spree/promotion_handler/promotion_duplicator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:4\"}}","suiteSourceFile":"core/spec/models/spree/promotion_handler/promotion_duplicator_spec.rb"},{"name":"#duplicate model associations - action's calculator copies promotion action's calculator","suite":"Spree::PromotionHandler::PromotionDuplicator at ./spec/models/spree/promotion_handler/promotion_duplicator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_handler/promotion_duplicator_spec.rb"},{"name":"#duplicate model associations - action's calculator assigns a new calculator to promotion action","suite":"Spree::PromotionHandler::PromotionDuplicator at ./spec/models/spree/promotion_handler/promotion_duplicator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:2\"}}","suiteSourceFile":"core/spec/models/spree/promotion_handler/promotion_duplicator_spec.rb"},{"name":"forces developer to implement eligible? method","suite":"Spree::PromotionRule at ./spec/models/spree/promotion_rule_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_rule_spec.rb"},{"name":"validates unique rules for a promotion","suite":"Spree::PromotionRule at ./spec/models/spree/promotion_rule_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2\"}}","suiteSourceFile":"core/spec/models/spree/promotion_rule_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:4","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:5","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:7","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:8","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:10","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:11","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"behaves like metadata reads data as symbolized keys","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"behaves like metadata reads data as not symbolized keys","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"behaves like metadata can query records by metadata properties","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:10\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"behaves like lifecycle events lifecycle events promotion.created publishes created event when record is created","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"behaves like lifecycle events lifecycle events promotion.updated publishes updated event when record is updated","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"behaves like lifecycle events lifecycle events promotion.deleted publishes deleted event when record is deleted","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"Validations valid_promotion is valid","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"Validations validates usage limit","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"Validations validates name","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"Validations can create multiple promos with the same code","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"Validations expires_at_must_be_later_than_starts_at starts_at is a date earlier than expires_at is valid","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:5:1:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"Validations expires_at_must_be_later_than_starts_at starts_at is a date earlier than expires_at is not valid example at ./spec/models/spree/promotion_spec.rb:55","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:5:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"Validations expires_at_must_be_later_than_starts_at starts_at is a date earlier than expires_at is not valid example at ./spec/models/spree/promotion_spec.rb:56","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:5:2:1:2\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"Validations expires_at_must_be_later_than_starts_at starts_at and expires_at are nil is valid","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:5:3:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"Callbacks #set_usage_limit_to_nil when promo has one code for all customers does not change usage_limit","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"Callbacks #set_usage_limit_to_nil when promo has unique codes sets usage_limit to nil","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"Callbacks #remove_coupons removes the coupons","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"scopes .coupons is expected to not include promotion without code","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"scopes .coupons is expected to include promotion with code","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:2\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"scopes .applied is expected to not include promotion not applied","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"scopes .applied is expected to include promotion applied","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:2\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"scopes .advertised is expected to not include promotion not advertised","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"scopes .advertised is expected to include promotion advertised","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3:2\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"#destroy deletes actions","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"#destroy deletes rules","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"#destroy if promotion was already used does not destroy the promotion","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:3:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"#save deeply autosaves records and preferences","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"#save allows to change promotion type from automatic to single discount code","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"#save allows to change promotion type from automatic to multiple discount codes","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:3\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"#save allows to change promotion type from single discount code to automatic","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:4\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"#save allows to change promotion type from multiple discount codes to automatic","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:5\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"#activate checks path if present","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"#activate does not perform actions against an order in a finalized state","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"#activate does activate if newer then order","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:3\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"#activate when activated assigns the order","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:4:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"#activate when not activated doesn't assign the order","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:5:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"#usage_limit_exceeded does not have its usage limit exceeded with no usage limit","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"#usage_limit_exceeded has its usage limit exceeded","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:2\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"#expired is not exipired","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"#expired is expired if it hasn't started yet","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:2\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"#expired is expired if it has already ended","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:3\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"#expired is not expired if it has started already","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:4\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"#expired is not expired if it has not ended yet","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:5\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"#expired is not expired if current time is within starts_at and expires_at range","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:6\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"#expired is not expired if usage limit is not exceeded","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:7\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"#credits_count counts eligible adjustments","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"#credits_count does not count ineligible adjustments","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"#adjusted_credits_count counts order level adjustments","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"#adjusted_credits_count counts item level adjustments","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:2\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"#products when it has product rules with products associated has products","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:1:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"#products when there's no product rule associated does not have products but still return an empty array","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:2:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"#eligible? when promotion is expired example at ./spec/models/spree/promotion_spec.rb:474","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:1:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"#eligible? when promotable is a Spree::LineItem and product is promotionable example at ./spec/models/spree/promotion_spec.rb:488","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"#eligible? when promotable is a Spree::LineItem and product is not promotionable example at ./spec/models/spree/promotion_spec.rb:494","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"#eligible? when promotable is a Spree::Order and it is empty example at ./spec/models/spree/promotion_spec.rb:502","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:3:1:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"#eligible? when promotable is a Spree::Order and it contains items and the items are all non-promotionable example at ./spec/models/spree/promotion_spec.rb:513","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:3:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"#eligible? when promotable is a Spree::Order and it contains items and at least one item is promotionable example at ./spec/models/spree/promotion_spec.rb:517","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:3:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"#eligible_rules when there are no rules returns true","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:1:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"#eligible_rules when there are no aplicable rules returns true","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:2:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"#eligible_rules with 'all' match policy when all rules are eligible returns the eligible rules","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:3:1:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"#eligible_rules with 'all' match policy when all rules are eligible does set anything to eligiblity errors","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:3:1:2\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"#eligible_rules with 'all' match policy when any of the rules is not eligible returns nil","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:3:2:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"#eligible_rules with 'all' match policy when any of the rules is not eligible sets eligibility errors to the first non-nil one","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:3:2:2\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"#eligible_rules with 'any' match policy has eligible rules if any of the rules are eligible","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:4:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"#eligible_rules with 'any' match policy when none of the rules are eligible returns nil","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:4:2:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"#eligible_rules with 'any' match policy when none of the rules are eligible sets eligibility errors to the first non-nil one","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:4:2:2\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"#line_item_actionable? when the order is eligible for promotion when there are no rules example at ./spec/models/spree/promotion_spec.rb:641","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"#line_item_actionable? when the order is eligible for promotion when there are rules when the match policy is all when all rules allow action on the line item example at ./spec/models/spree/promotion_spec.rb:651","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:1:2:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"#line_item_actionable? when the order is eligible for promotion when there are rules when the match policy is all when at least one rule does not allow action on the line item example at ./spec/models/spree/promotion_spec.rb:657","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:1:2:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"#line_item_actionable? when the order is eligible for promotion when there are rules when the match policy is any when at least one rule allows action on the line item example at ./spec/models/spree/promotion_spec.rb:667","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:1:2:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"#line_item_actionable? when the order is eligible for promotion when there are rules when the match policy is any when no rules allow action on the line item example at ./spec/models/spree/promotion_spec.rb:673","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:1:2:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"#line_item_actionable? when the order is not eligible for the promotion example at ./spec/models/spree/promotion_spec.rb:682","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:2:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"normalize blank values for code & path will save blank value as nil value instead","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:17:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"#with_coupon_code and code stored in uppercase finds the code with lowercase","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:1:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"#with_coupon_code when promotion has no actions then returns the one with an action","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:2:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"#with_coupon_code when promotion has no actions return the last one created","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:2:2\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"#with_coupon_code coupon from coupon code batch finds the code with lowercase","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:3:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"#with_coupon_code coupon from coupon code batch finds the code with uppercase","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:3:2\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"#used_by? when the user has used this promo when the order is complete example at ./spec/models/spree/promotion_spec.rb:756","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"#used_by? when the user has used this promo when the order is complete when the promotion is not eligible example at ./spec/models/spree/promotion_spec.rb:766","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"#used_by? when the user has used this promo when the order is complete when the only matching order is the excluded order example at ./spec/models/spree/promotion_spec.rb:772","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:1:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"#used_by? when the user has used this promo when the order is not complete example at ./spec/models/spree/promotion_spec.rb:779","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"#used_by? when the user has not used this promo example at ./spec/models/spree/promotion_spec.rb:784","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:2:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"adding items to the cart updates the promotions for new line items","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:20:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"#generate_code with generate_code has a generated code","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:21:1:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"#generate_code without generate_code has a generated code","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:21:2:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"#generate_coupon_codes has a generated code","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:22:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"#generate_coupon_codes generates new codes when number_of_codes is changed","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:22:2\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"#generate_coupon_codes with prefix has a generated code with prefix","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:22:3:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"#generate_coupon_codes when number of codes is greater than the web limit generates the codes in a background job","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:22:4:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"#cached_rules returns the rules","suite":"Spree::Promotion at ./spec/models/spree/promotion_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:23:1\"}}","suiteSourceFile":"core/spec/models/spree/promotion_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:4","suite":"Spree::Property at ./spec/models/spree/property_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/property_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:5","suite":"Spree::Property at ./spec/models/spree/property_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/property_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:7","suite":"Spree::Property at ./spec/models/spree/property_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/models/spree/property_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:8","suite":"Spree::Property at ./spec/models/spree/property_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","suiteSourceFile":"core/spec/models/spree/property_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:10","suite":"Spree::Property at ./spec/models/spree/property_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","suiteSourceFile":"core/spec/models/spree/property_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:11","suite":"Spree::Property at ./spec/models/spree/property_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","suiteSourceFile":"core/spec/models/spree/property_spec.rb"},{"name":"behaves like metadata reads data as symbolized keys","suite":"Spree::Property at ./spec/models/spree/property_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7\"}}","suiteSourceFile":"core/spec/models/spree/property_spec.rb"},{"name":"behaves like metadata reads data as not symbolized keys","suite":"Spree::Property at ./spec/models/spree/property_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8\"}}","suiteSourceFile":"core/spec/models/spree/property_spec.rb"},{"name":"behaves like metadata can query records by metadata properties","suite":"Spree::Property at ./spec/models/spree/property_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:10\"}}","suiteSourceFile":"core/spec/models/spree/property_spec.rb"},{"name":"translations translates property fields","suite":"Spree::Property at ./spec/models/spree/property_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/property_spec.rb"},{"name":"scopes .available example at ./spec/models/spree/property_spec.rb:35","suite":"Spree::Property at ./spec/models/spree/property_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","suiteSourceFile":"core/spec/models/spree/property_spec.rb"},{"name":"scopes .available_on_front_end example at ./spec/models/spree/property_spec.rb:41","suite":"Spree::Property at ./spec/models/spree/property_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","suiteSourceFile":"core/spec/models/spree/property_spec.rb"},{"name":"scopes .available_on_back_end example at ./spec/models/spree/property_spec.rb:47","suite":"Spree::Property at ./spec/models/spree/property_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3:1\"}}","suiteSourceFile":"core/spec/models/spree/property_spec.rb"},{"name":"callbacks #normalize_name should parameterize the name","suite":"Spree::Property at ./spec/models/spree/property_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1\"}}","suiteSourceFile":"core/spec/models/spree/property_spec.rb"},{"name":"setting filter param example at ./spec/models/spree/property_spec.rb:66","suite":"Spree::Property at ./spec/models/spree/property_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","suiteSourceFile":"core/spec/models/spree/property_spec.rb"},{"name":"#uniq_values example at ./spec/models/spree/property_spec.rb:78","suite":"Spree::Property at ./spec/models/spree/property_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","suiteSourceFile":"core/spec/models/spree/property_spec.rb"},{"name":"#uniq_values when narrowing the scope of product properties example at ./spec/models/spree/property_spec.rb:94","suite":"Spree::Property at ./spec/models/spree/property_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2:1\"}}","suiteSourceFile":"core/spec/models/spree/property_spec.rb"},{"name":"#uniq_values when caching correctly returns uniq values","suite":"Spree::Property at ./spec/models/spree/property_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:3:1\"}}","suiteSourceFile":"core/spec/models/spree/property_spec.rb"},{"name":"#ensure_product_properties_have_filter_params filterable property example at ./spec/models/spree/property_spec.rb:147","suite":"Spree::Property at ./spec/models/spree/property_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1:1\"}}","suiteSourceFile":"core/spec/models/spree/property_spec.rb"},{"name":"#ensure_product_properties_have_filter_params filterable property example at ./spec/models/spree/property_spec.rb:148","suite":"Spree::Property at ./spec/models/spree/property_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1:2\"}}","suiteSourceFile":"core/spec/models/spree/property_spec.rb"},{"name":"#ensure_product_properties_have_filter_params not-filterable property example at ./spec/models/spree/property_spec.rb:152","suite":"Spree::Property at ./spec/models/spree/property_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2:1\"}}","suiteSourceFile":"core/spec/models/spree/property_spec.rb"},{"name":"#after_touch callback touches the product","suite":"Spree::Property at ./spec/models/spree/property_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1\"}}","suiteSourceFile":"core/spec/models/spree/property_spec.rb"},{"name":"#after_update callback with DEPENDENCY_UPDATE_FIELDS touches the product","suite":"Spree::Property at ./spec/models/spree/property_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1:1\"}}","suiteSourceFile":"core/spec/models/spree/property_spec.rb"},{"name":"#after_update callback without DEPENDENCY_UPDATE_FIELDS does not touch the product","suite":"Spree::Property at ./spec/models/spree/property_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:2:1\"}}","suiteSourceFile":"core/spec/models/spree/property_spec.rb"},{"name":"#kind_to_metafield_type returns the correct metafield type","suite":"Spree::Property at ./spec/models/spree/property_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1\"}}","suiteSourceFile":"core/spec/models/spree/property_spec.rb"},{"name":"#kind_to_metafield_type when the property kind is long_text returns the correct metafield type","suite":"Spree::Property at ./spec/models/spree/property_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:2:1\"}}","suiteSourceFile":"core/spec/models/spree/property_spec.rb"},{"name":"#kind_to_metafield_type when the property kind is number returns the correct metafield type","suite":"Spree::Property at ./spec/models/spree/property_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:3:1\"}}","suiteSourceFile":"core/spec/models/spree/property_spec.rb"},{"name":"#kind_to_metafield_type when the property kind is rich_text returns the correct metafield type","suite":"Spree::Property at ./spec/models/spree/property_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:4:1\"}}","suiteSourceFile":"core/spec/models/spree/property_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:4","suite":"Spree::Prototype at ./spec/models/spree/prototype_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/prototype_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:5","suite":"Spree::Prototype at ./spec/models/spree/prototype_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/prototype_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:7","suite":"Spree::Prototype at ./spec/models/spree/prototype_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/models/spree/prototype_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:8","suite":"Spree::Prototype at ./spec/models/spree/prototype_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","suiteSourceFile":"core/spec/models/spree/prototype_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:10","suite":"Spree::Prototype at ./spec/models/spree/prototype_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","suiteSourceFile":"core/spec/models/spree/prototype_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:11","suite":"Spree::Prototype at ./spec/models/spree/prototype_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","suiteSourceFile":"core/spec/models/spree/prototype_spec.rb"},{"name":"behaves like metadata reads data as symbolized keys","suite":"Spree::Prototype at ./spec/models/spree/prototype_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7\"}}","suiteSourceFile":"core/spec/models/spree/prototype_spec.rb"},{"name":"behaves like metadata reads data as not symbolized keys","suite":"Spree::Prototype at ./spec/models/spree/prototype_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8\"}}","suiteSourceFile":"core/spec/models/spree/prototype_spec.rb"},{"name":"behaves like metadata can query records by metadata properties","suite":"Spree::Prototype at ./spec/models/spree/prototype_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:10\"}}","suiteSourceFile":"core/spec/models/spree/prototype_spec.rb"},{"name":"Class Methods .return_processing_reason default refund reason present example at ./spec/models/spree/refund_reason_spec.rb:9","suite":"Spree::RefundReason at ./spec/models/spree/refund_reason_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/refund_reason_spec.rb"},{"name":"Class Methods .return_processing_reason default refund reason not present creates a new refund reason on the fly","suite":"Spree::RefundReason at ./spec/models/spree/refund_reason_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/refund_reason_spec.rb"},{"name":"Class Methods .order_canceled_reason order canceled reason present example at ./spec/models/spree/refund_reason_spec.rb:24","suite":"Spree::RefundReason at ./spec/models/spree/refund_reason_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/refund_reason_spec.rb"},{"name":"Class Methods .order_canceled_reason order canceled reason not present creates a new refund reason on the fly","suite":"Spree::RefundReason at ./spec/models/spree/refund_reason_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/refund_reason_spec.rb"},{"name":"Class Methods .shipment_canceled_reason shipment canceled reason present example at ./spec/models/spree/refund_reason_spec.rb:39","suite":"Spree::RefundReason at ./spec/models/spree/refund_reason_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1:1\"}}","suiteSourceFile":"core/spec/models/spree/refund_reason_spec.rb"},{"name":"Class Methods .shipment_canceled_reason shipment canceled reason not present creates a new refund reason on the fly","suite":"Spree::RefundReason at ./spec/models/spree/refund_reason_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:2:1\"}}","suiteSourceFile":"core/spec/models/spree/refund_reason_spec.rb"},{"name":"shared examples behaves like metadata example at ./lib/spree/testing_support/metadata.rb:4","suite":"Spree::Refund at ./spec/models/spree/refund_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/refund_spec.rb"},{"name":"shared examples behaves like metadata example at ./lib/spree/testing_support/metadata.rb:5","suite":"Spree::Refund at ./spec/models/spree/refund_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/refund_spec.rb"},{"name":"shared examples behaves like metadata example at ./lib/spree/testing_support/metadata.rb:7","suite":"Spree::Refund at ./spec/models/spree/refund_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3\"}}","suiteSourceFile":"core/spec/models/spree/refund_spec.rb"},{"name":"shared examples behaves like metadata example at ./lib/spree/testing_support/metadata.rb:8","suite":"Spree::Refund at ./spec/models/spree/refund_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:4\"}}","suiteSourceFile":"core/spec/models/spree/refund_spec.rb"},{"name":"shared examples behaves like metadata example at ./lib/spree/testing_support/metadata.rb:10","suite":"Spree::Refund at ./spec/models/spree/refund_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:5\"}}","suiteSourceFile":"core/spec/models/spree/refund_spec.rb"},{"name":"shared examples behaves like metadata example at ./lib/spree/testing_support/metadata.rb:11","suite":"Spree::Refund at ./spec/models/spree/refund_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:6\"}}","suiteSourceFile":"core/spec/models/spree/refund_spec.rb"},{"name":"shared examples behaves like metadata reads data as symbolized keys","suite":"Spree::Refund at ./spec/models/spree/refund_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:7\"}}","suiteSourceFile":"core/spec/models/spree/refund_spec.rb"},{"name":"shared examples behaves like metadata reads data as not symbolized keys","suite":"Spree::Refund at ./spec/models/spree/refund_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:8\"}}","suiteSourceFile":"core/spec/models/spree/refund_spec.rb"},{"name":"shared examples behaves like metadata can query records by metadata properties","suite":"Spree::Refund at ./spec/models/spree/refund_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:10\"}}","suiteSourceFile":"core/spec/models/spree/refund_spec.rb"},{"name":"shared examples behaves like lifecycle events lifecycle events refund.created publishes created event when record is created","suite":"Spree::Refund at ./spec/models/spree/refund_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/refund_spec.rb"},{"name":"shared examples behaves like lifecycle events lifecycle events refund.updated publishes updated event when record is updated","suite":"Spree::Refund at ./spec/models/spree/refund_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/refund_spec.rb"},{"name":"shared examples behaves like lifecycle events lifecycle events refund.deleted publishes deleted event when record is deleted","suite":"Spree::Refund at ./spec/models/spree/refund_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/refund_spec.rb"},{"name":"create transaction id exists on creation creates a refund record","suite":"Spree::Refund at ./spec/models/spree/refund_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/refund_spec.rb"},{"name":"create transaction id exists on creation maintains the transaction id","suite":"Spree::Refund at ./spec/models/spree/refund_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:2\"}}","suiteSourceFile":"core/spec/models/spree/refund_spec.rb"},{"name":"create transaction id exists on creation saves the amount","suite":"Spree::Refund at ./spec/models/spree/refund_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:3\"}}","suiteSourceFile":"core/spec/models/spree/refund_spec.rb"},{"name":"create transaction id exists on creation creates a log entry","suite":"Spree::Refund at ./spec/models/spree/refund_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:4\"}}","suiteSourceFile":"core/spec/models/spree/refund_spec.rb"},{"name":"create transaction id exists on creation does not attempt to process a transaction","suite":"Spree::Refund at ./spec/models/spree/refund_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:5\"}}","suiteSourceFile":"core/spec/models/spree/refund_spec.rb"},{"name":"create processing is successful creates a refund","suite":"Spree::Refund at ./spec/models/spree/refund_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/refund_spec.rb"},{"name":"create processing is successful return the newly created refund","suite":"Spree::Refund at ./spec/models/spree/refund_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:2\"}}","suiteSourceFile":"core/spec/models/spree/refund_spec.rb"},{"name":"create processing is successful saves the returned authorization value","suite":"Spree::Refund at ./spec/models/spree/refund_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:3\"}}","suiteSourceFile":"core/spec/models/spree/refund_spec.rb"},{"name":"create processing is successful saves the passed amount as the refund amount","suite":"Spree::Refund at ./spec/models/spree/refund_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:4\"}}","suiteSourceFile":"core/spec/models/spree/refund_spec.rb"},{"name":"create processing is successful creates a log entry","suite":"Spree::Refund at ./spec/models/spree/refund_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:5\"}}","suiteSourceFile":"core/spec/models/spree/refund_spec.rb"},{"name":"create processing is successful attempts to process a transaction","suite":"Spree::Refund at ./spec/models/spree/refund_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:6\"}}","suiteSourceFile":"core/spec/models/spree/refund_spec.rb"},{"name":"create processing is successful updates the payment total","suite":"Spree::Refund at ./spec/models/spree/refund_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:7\"}}","suiteSourceFile":"core/spec/models/spree/refund_spec.rb"},{"name":"create processing fails raises error and not create a refund","suite":"Spree::Refund at ./spec/models/spree/refund_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:1\"}}","suiteSourceFile":"core/spec/models/spree/refund_spec.rb"},{"name":"create without payment profiles supported does not supply the payment source","suite":"Spree::Refund at ./spec/models/spree/refund_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:4:1\"}}","suiteSourceFile":"core/spec/models/spree/refund_spec.rb"},{"name":"create with payment profiles supported supplies the payment source","suite":"Spree::Refund at ./spec/models/spree/refund_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:5:1\"}}","suiteSourceFile":"core/spec/models/spree/refund_spec.rb"},{"name":"create with an activemerchant gateway connection error raises Spree::Core::GatewayError","suite":"Spree::Refund at ./spec/models/spree/refund_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:6:1\"}}","suiteSourceFile":"core/spec/models/spree/refund_spec.rb"},{"name":"create with amount too large is invalid","suite":"Spree::Refund at ./spec/models/spree/refund_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:7:1\"}}","suiteSourceFile":"core/spec/models/spree/refund_spec.rb"},{"name":"total_amount_reimbursed_for with reimbursements performed returns the total amount","suite":"Spree::Refund at ./spec/models/spree/refund_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","suiteSourceFile":"core/spec/models/spree/refund_spec.rb"},{"name":"total_amount_reimbursed_for without reimbursements performed returns zero","suite":"Spree::Refund at ./spec/models/spree/refund_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","suiteSourceFile":"core/spec/models/spree/refund_spec.rb"},{"name":"class methods .total_amount_reimbursed_for sums the amounts of all of the reimbursements credits","suite":"Spree::Reimbursement::Credit at ./spec/models/spree/reimbursement/credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/reimbursement/credit_spec.rb"},{"name":"#description is the creditable's class name","suite":"Spree::Reimbursement::Credit at ./spec/models/spree/reimbursement/credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/reimbursement/credit_spec.rb"},{"name":"#display_amount is a money object","suite":"Spree::Reimbursement::Credit at ./spec/models/spree/reimbursement/credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/reimbursement/credit_spec.rb"},{"name":"#calculate_reimbursement_types the return item requires exchange returns a hash with the exchange reimbursement type associated to the return items","suite":"Spree::Reimbursement::ReimbursementTypeEngine at ./spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb"},{"name":"#calculate_reimbursement_types the return item requires exchange the return items are not included in any of the other reimbursement types","suite":"Spree::Reimbursement::ReimbursementTypeEngine at ./spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb"},{"name":"#calculate_reimbursement_types the return item requires exchange behaves like reimbursement type hash contain all keys that respond to reimburse","suite":"Spree::Reimbursement::ReimbursementTypeEngine at ./spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb"},{"name":"#calculate_reimbursement_types the return item does not require exchange the return item has an override reimbursement type returns a hash with the override reimbursement type associated to the return items","suite":"Spree::Reimbursement::ReimbursementTypeEngine at ./spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb"},{"name":"#calculate_reimbursement_types the return item does not require exchange the return item has an override reimbursement type the return items are not included in any of the other reimbursement types","suite":"Spree::Reimbursement::ReimbursementTypeEngine at ./spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1:2\"}}","suiteSourceFile":"core/spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb"},{"name":"#calculate_reimbursement_types the return item does not require exchange the return item has an override reimbursement type behaves like reimbursement type hash contain all keys that respond to reimburse","suite":"Spree::Reimbursement::ReimbursementTypeEngine at ./spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb"},{"name":"#calculate_reimbursement_types the return item does not require exchange the return item does not have an override reimbursement type the return item has a preferred reimbursement type the reimbursement type is not valid for the return item returns a hash with no return items associated to the preferred reimbursement type","suite":"Spree::Reimbursement::ReimbursementTypeEngine at ./spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb"},{"name":"#calculate_reimbursement_types the return item does not require exchange the return item does not have an override reimbursement type the return item has a preferred reimbursement type the reimbursement type is not valid for the return item the return items are not included in any of the other reimbursement types","suite":"Spree::Reimbursement::ReimbursementTypeEngine at ./spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb"},{"name":"#calculate_reimbursement_types the return item does not require exchange the return item does not have an override reimbursement type the return item has a preferred reimbursement type the reimbursement type is not valid for the return item behaves like reimbursement type hash contain all keys that respond to reimburse","suite":"Spree::Reimbursement::ReimbursementTypeEngine at ./spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:1:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb"},{"name":"#calculate_reimbursement_types the return item does not require exchange the return item does not have an override reimbursement type the return item has a preferred reimbursement type the reimbursement type is valid for the return item returns a hash with the expired reimbursement type associated to the return items","suite":"Spree::Reimbursement::ReimbursementTypeEngine at ./spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb"},{"name":"#calculate_reimbursement_types the return item does not require exchange the return item does not have an override reimbursement type the return item has a preferred reimbursement type the reimbursement type is valid for the return item the return items are not included in any of the other reimbursement types","suite":"Spree::Reimbursement::ReimbursementTypeEngine at ./spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:1:2:2\"}}","suiteSourceFile":"core/spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb"},{"name":"#calculate_reimbursement_types the return item does not require exchange the return item does not have an override reimbursement type the return item has a preferred reimbursement type the reimbursement type is valid for the return item behaves like reimbursement type hash contain all keys that respond to reimburse","suite":"Spree::Reimbursement::ReimbursementTypeEngine at ./spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:1:2:3:1\"}}","suiteSourceFile":"core/spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb"},{"name":"#calculate_reimbursement_types the return item does not require exchange the return item does not have an override reimbursement type the return item does not have a preferred reimbursement type the return item is past the time constraint returns a hash with the expired reimbursement type associated to the return items","suite":"Spree::Reimbursement::ReimbursementTypeEngine at ./spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb"},{"name":"#calculate_reimbursement_types the return item does not require exchange the return item does not have an override reimbursement type the return item does not have a preferred reimbursement type the return item is past the time constraint the return items are not included in any of the other reimbursement types","suite":"Spree::Reimbursement::ReimbursementTypeEngine at ./spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:2:1:2\"}}","suiteSourceFile":"core/spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb"},{"name":"#calculate_reimbursement_types the return item does not require exchange the return item does not have an override reimbursement type the return item does not have a preferred reimbursement type the return item is past the time constraint behaves like reimbursement type hash contain all keys that respond to reimburse","suite":"Spree::Reimbursement::ReimbursementTypeEngine at ./spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:2:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb"},{"name":"#calculate_reimbursement_types the return item does not require exchange the return item does not have an override reimbursement type the return item does not have a preferred reimbursement type the return item is within the time constraint returns a hash with the default reimbursement type associated to the return items","suite":"Spree::Reimbursement::ReimbursementTypeEngine at ./spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb"},{"name":"#calculate_reimbursement_types the return item does not require exchange the return item does not have an override reimbursement type the return item does not have a preferred reimbursement type the return item is within the time constraint the return items are not included in any of the other reimbursement types","suite":"Spree::Reimbursement::ReimbursementTypeEngine at ./spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:2:2:2\"}}","suiteSourceFile":"core/spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb"},{"name":"#calculate_reimbursement_types the return item does not require exchange the return item does not have an override reimbursement type the return item does not have a preferred reimbursement type the return item is within the time constraint behaves like reimbursement type hash contain all keys that respond to reimburse","suite":"Spree::Reimbursement::ReimbursementTypeEngine at ./spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:2:2:3:1\"}}","suiteSourceFile":"core/spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb"},{"name":"#valid_preferred_reimbursement_type? is valid if it is not past the reimbursable time period","suite":"Spree::Reimbursement::ReimbursementTypeValidator at ./spec/models/spree/reimbursement/reimbursement_type_validator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/reimbursement/reimbursement_type_validator_spec.rb"},{"name":"#valid_preferred_reimbursement_type? is valid if the return items preferred method of reimbursement is the expired method of reimbursement","suite":"Spree::Reimbursement::ReimbursementTypeValidator at ./spec/models/spree/reimbursement/reimbursement_type_validator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/reimbursement/reimbursement_type_validator_spec.rb"},{"name":"#valid_preferred_reimbursement_type? is invalid if the return item is past the eligible time period and the preferred method of reimbursement is not the expired method of reimbursement","suite":"Spree::Reimbursement::ReimbursementTypeValidator at ./spec/models/spree/reimbursement/reimbursement_type_validator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/reimbursement/reimbursement_type_validator_spec.rb"},{"name":"#past_reimbursable_time_period? it has not shipped is not past the reimbursable time period","suite":"Spree::Reimbursement::ReimbursementTypeValidator at ./spec/models/spree/reimbursement/reimbursement_type_validator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/reimbursement/reimbursement_type_validator_spec.rb"},{"name":"#past_reimbursable_time_period? it has shipped and it is more recent than the time constraint is not past the reimbursable time period","suite":"Spree::Reimbursement::ReimbursementTypeValidator at ./spec/models/spree/reimbursement/reimbursement_type_validator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/reimbursement/reimbursement_type_validator_spec.rb"},{"name":"#past_reimbursable_time_period? it has shipped and it is further in the past than the time constraint is past the reimbursable time period","suite":"Spree::Reimbursement::ReimbursementTypeValidator at ./spec/models/spree/reimbursement/reimbursement_type_validator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:1\"}}","suiteSourceFile":"core/spec/models/spree/reimbursement/reimbursement_type_validator_spec.rb"},{"name":".simulate reimburses each calculated reimbursement types with the correct return items as a simulation","suite":"Spree::ReimbursementPerformer at ./spec/models/spree/reimbursement_performer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/reimbursement_performer_spec.rb"},{"name":".perform reimburses each calculated reimbursement types with the correct return items as a performance","suite":"Spree::ReimbursementPerformer at ./spec/models/spree/reimbursement_performer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/reimbursement_performer_spec.rb"},{"name":"#display_total returns the value as a Spree::Money instance","suite":"Spree::Reimbursement at ./spec/models/spree/reimbursement_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/reimbursement_spec.rb"},{"name":"#display_total uses the order's currency","suite":"Spree::Reimbursement at ./spec/models/spree/reimbursement_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/reimbursement_spec.rb"},{"name":"#store returns order store","suite":"Spree::Reimbursement at ./spec/models/spree/reimbursement_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/reimbursement_spec.rb"},{"name":"#perform! refunds the total amount","suite":"Spree::Reimbursement at ./spec/models/spree/reimbursement_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/reimbursement_spec.rb"},{"name":"#perform! creates a refund","suite":"Spree::Reimbursement at ./spec/models/spree/reimbursement_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","suiteSourceFile":"core/spec/models/spree/reimbursement_spec.rb"},{"name":"#perform! with additional tax saves the additional tax and refunds the total","suite":"Spree::Reimbursement at ./spec/models/spree/reimbursement_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3:1\"}}","suiteSourceFile":"core/spec/models/spree/reimbursement_spec.rb"},{"name":"#perform! when performer is provided sets the performer","suite":"Spree::Reimbursement at ./spec/models/spree/reimbursement_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4:1\"}}","suiteSourceFile":"core/spec/models/spree/reimbursement_spec.rb"},{"name":"#perform! when performer is provided refunds the total amount","suite":"Spree::Reimbursement at ./spec/models/spree/reimbursement_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4:2\"}}","suiteSourceFile":"core/spec/models/spree/reimbursement_spec.rb"},{"name":"#perform! when performer is provided creates a refund","suite":"Spree::Reimbursement at ./spec/models/spree/reimbursement_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4:3\"}}","suiteSourceFile":"core/spec/models/spree/reimbursement_spec.rb"},{"name":"#perform! with included tax saves the included tax and refunds the total","suite":"Spree::Reimbursement at ./spec/models/spree/reimbursement_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:5:1\"}}","suiteSourceFile":"core/spec/models/spree/reimbursement_spec.rb"},{"name":"#perform! when reimbursement cannot be fully performed raises IncompleteReimbursement error","suite":"Spree::Reimbursement at ./spec/models/spree/reimbursement_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:6:1\"}}","suiteSourceFile":"core/spec/models/spree/reimbursement_spec.rb"},{"name":"#perform! when reimbursement is performed using store credits succeeds","suite":"Spree::Reimbursement at ./spec/models/spree/reimbursement_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:7:1\"}}","suiteSourceFile":"core/spec/models/spree/reimbursement_spec.rb"},{"name":"#perform! when exchange is required generates an exchange shipment for the order for the exchange items","suite":"Spree::Reimbursement at ./spec/models/spree/reimbursement_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:8:1\"}}","suiteSourceFile":"core/spec/models/spree/reimbursement_spec.rb"},{"name":"#return_items_requiring_exchange returns only the return items that require an exchange","suite":"Spree::Reimbursement at ./spec/models/spree/reimbursement_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/reimbursement_spec.rb"},{"name":"#calculated_total with return item amounts that would round up if added rounds down","suite":"Spree::Reimbursement at ./spec/models/spree/reimbursement_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:1\"}}","suiteSourceFile":"core/spec/models/spree/reimbursement_spec.rb"},{"name":"#calculated_total with a return item amount that should round up rounds up","suite":"Spree::Reimbursement at ./spec/models/spree/reimbursement_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1\"}}","suiteSourceFile":"core/spec/models/spree/reimbursement_spec.rb"},{"name":".build_from_customer_return connects data","suite":"Spree::Reimbursement at ./spec/models/spree/reimbursement_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","suiteSourceFile":"core/spec/models/spree/reimbursement_spec.rb"},{"name":"custom events reimbursement.reimbursed publishes reimbursement.reimbursed event when performed","suite":"Spree::Reimbursement at ./spec/models/spree/reimbursement_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1:1\"}}","suiteSourceFile":"core/spec/models/spree/reimbursement_spec.rb"},{"name":"without taxes leaves the return items additional_tax_total and included_tax_total at zero","suite":"Spree::ReimbursementTaxCalculator at ./spec/models/spree/reimbursement_tax_calculator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/reimbursement_tax_calculator_spec.rb"},{"name":"with additional tax sets additional_tax_total on the return items","suite":"Spree::ReimbursementTaxCalculator at ./spec/models/spree/reimbursement_tax_calculator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/reimbursement_tax_calculator_spec.rb"},{"name":"with included tax sets included_tax_total on the return items","suite":"Spree::ReimbursementTaxCalculator at ./spec/models/spree/reimbursement_tax_calculator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/reimbursement_tax_calculator_spec.rb"},{"name":".reimburse simulate is true creates one readonly lump credit for all outstanding balance payable to the customer","suite":"Spree::ReimbursementType::Credit at ./spec/models/spree/reimbursement_type/credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/reimbursement_type/credit_spec.rb"},{"name":".reimburse simulate is true does not save to the database","suite":"Spree::ReimbursementType::Credit at ./spec/models/spree/reimbursement_type/credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/reimbursement_type/credit_spec.rb"},{"name":".reimburse simulate is false creates one lump credit for all outstanding balance payable to the customer","suite":"Spree::ReimbursementType::Credit at ./spec/models/spree/reimbursement_type/credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/reimbursement_type/credit_spec.rb"},{"name":".reimburse return items are supplied simulate is true does not perform an exchange and returns the exchange object","suite":"Spree::ReimbursementType::Exchange at ./spec/models/spree/reimbursement_type/exchange_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/reimbursement_type/exchange_spec.rb"},{"name":".reimburse return items are supplied simulate is false performs an exchange and returns the exchange object","suite":"Spree::ReimbursementType::Exchange at ./spec/models/spree/reimbursement_type/exchange_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/reimbursement_type/exchange_spec.rb"},{"name":".reimburse no return items are supplied does not perform an exchange and returns an empty array","suite":"Spree::ReimbursementType::Exchange at ./spec/models/spree/reimbursement_type/exchange_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/reimbursement_type/exchange_spec.rb"},{"name":".reimburse simulate is true returns an array of readonly refunds","suite":"Spree::ReimbursementType::OriginalPayment at ./spec/models/spree/reimbursement_type/original_payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/reimbursement_type/original_payment_spec.rb"},{"name":".reimburse simulate is false performs the refund","suite":"Spree::ReimbursementType::OriginalPayment at ./spec/models/spree/reimbursement_type/original_payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/reimbursement_type/original_payment_spec.rb"},{"name":".reimburse when no credit is allowed on the payment returns an empty array","suite":"Spree::ReimbursementType::OriginalPayment at ./spec/models/spree/reimbursement_type/original_payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/reimbursement_type/original_payment_spec.rb"},{"name":".reimburse when a payment is negative returns an empty array","suite":"Spree::ReimbursementType::OriginalPayment at ./spec/models/spree/reimbursement_type/original_payment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/reimbursement_type/original_payment_spec.rb"},{"name":".reimburse simulate is true for store credits that the customer used creates readonly refunds for all store credit payments","suite":"Spree::ReimbursementType::StoreCredit at ./spec/models/spree/reimbursement_type/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/reimbursement_type/store_credit_spec.rb"},{"name":".reimburse simulate is true for store credits that the customer used does not save to the database","suite":"Spree::ReimbursementType::StoreCredit at ./spec/models/spree/reimbursement_type/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/reimbursement_type/store_credit_spec.rb"},{"name":".reimburse simulate is true for return items that were not paid for with store credit does not save to the database","suite":"Spree::ReimbursementType::StoreCredit at ./spec/models/spree/reimbursement_type/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:2\"}}","suiteSourceFile":"core/spec/models/spree/reimbursement_type/store_credit_spec.rb"},{"name":".reimburse simulate is true for return items that were not paid for with store credit creates one readonly lump credit for all outstanding balance payable to the customer creates a credit that is read only","suite":"Spree::ReimbursementType::StoreCredit at ./spec/models/spree/reimbursement_type/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/reimbursement_type/store_credit_spec.rb"},{"name":".reimburse simulate is true for return items that were not paid for with store credit creates one readonly lump credit for all outstanding balance payable to the customer creates a credit which amounts to the sum of the return items rounded down","suite":"Spree::ReimbursementType::StoreCredit at ./spec/models/spree/reimbursement_type/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1:2\"}}","suiteSourceFile":"core/spec/models/spree/reimbursement_type/store_credit_spec.rb"},{"name":".reimburse simulate is false for store credits that the customer used performs refunds for all store credit payments","suite":"Spree::ReimbursementType::StoreCredit at ./spec/models/spree/reimbursement_type/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/reimbursement_type/store_credit_spec.rb"},{"name":".reimburse simulate is false for return items that were not paid for with store credit creates one lump credit for all outstanding balance payable to the customer","suite":"Spree::ReimbursementType::StoreCredit at ./spec/models/spree/reimbursement_type/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/reimbursement_type/store_credit_spec.rb"},{"name":".reimburse simulate is false for return items that were not paid for with store credit creates a store credit with the same currency as the reimbursement's order","suite":"Spree::ReimbursementType::StoreCredit at ./spec/models/spree/reimbursement_type/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:2\"}}","suiteSourceFile":"core/spec/models/spree/reimbursement_type/store_credit_spec.rb"},{"name":".headers returns array of hashes with name and label","suite":"Spree::ReportLineItem at ./spec/models/spree/report_line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/report_line_item_spec.rb"},{"name":".csv_headers returns array of attribute keys","suite":"Spree::ReportLineItem at ./spec/models/spree/report_line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/report_line_item_spec.rb"},{"name":"#to_csv returns array of attribute values","suite":"Spree::ReportLineItem at ./spec/models/spree/report_line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/report_line_item_spec.rb"},{"name":"#vendor returns vendor name from record","suite":"Spree::ReportLineItems::ProductsPerformance at ./spec/models/spree/report_line_items/products_performance_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/report_line_items/products_performance_spec.rb"},{"name":"#brand returns brand name from record","suite":"Spree::ReportLineItems::ProductsPerformance at ./spec/models/spree/report_line_items/products_performance_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/report_line_items/products_performance_spec.rb"},{"name":"#category_levels when product has taxons returns mapped category levels","suite":"Spree::ReportLineItems::ProductsPerformance at ./spec/models/spree/report_line_items/products_performance_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","suiteSourceFile":"core/spec/models/spree/report_line_items/products_performance_spec.rb"},{"name":"#category_levels when product has no taxons returns nil for all category levels","suite":"Spree::ReportLineItems::ProductsPerformance at ./spec/models/spree/report_line_items/products_performance_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","suiteSourceFile":"core/spec/models/spree/report_line_items/products_performance_spec.rb"},{"name":"#price returns formatted price in report currency","suite":"Spree::ReportLineItems::ProductsPerformance at ./spec/models/spree/report_line_items/products_performance_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/report_line_items/products_performance_spec.rb"},{"name":"#weeks_online with available on returns number of weeks since product activation","suite":"Spree::ReportLineItems::ProductsPerformance at ./spec/models/spree/report_line_items/products_performance_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:1\"}}","suiteSourceFile":"core/spec/models/spree/report_line_items/products_performance_spec.rb"},{"name":"#weeks_online without available on returns number of weeks since product creation","suite":"Spree::ReportLineItems::ProductsPerformance at ./spec/models/spree/report_line_items/products_performance_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1\"}}","suiteSourceFile":"core/spec/models/spree/report_line_items/products_performance_spec.rb"},{"name":"money amounts returns formatted money amounts","suite":"Spree::ReportLineItems::ProductsPerformance at ./spec/models/spree/report_line_items/products_performance_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","suiteSourceFile":"core/spec/models/spree/report_line_items/products_performance_spec.rb"},{"name":"#quantity returns line item quantity","suite":"Spree::ReportLineItems::ProductsPerformance at ./spec/models/spree/report_line_items/products_performance_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","suiteSourceFile":"core/spec/models/spree/report_line_items/products_performance_spec.rb"},{"name":"#date returns formatted completed_at date","suite":"Spree::ReportLineItems::SalesTotal at ./spec/models/spree/report_line_items/sales_total_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/report_line_items/sales_total_spec.rb"},{"name":"#order returns order number","suite":"Spree::ReportLineItems::SalesTotal at ./spec/models/spree/report_line_items/sales_total_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/report_line_items/sales_total_spec.rb"},{"name":"#product returns variant descriptive name","suite":"Spree::ReportLineItems::SalesTotal at ./spec/models/spree/report_line_items/sales_total_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/report_line_items/sales_total_spec.rb"},{"name":"#quantity returns quantity","suite":"Spree::ReportLineItems::SalesTotal at ./spec/models/spree/report_line_items/sales_total_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/report_line_items/sales_total_spec.rb"},{"name":"#total returns money object with final amount plus shipping","suite":"Spree::ReportLineItems::SalesTotal at ./spec/models/spree/report_line_items/sales_total_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","suiteSourceFile":"core/spec/models/spree/report_line_items/sales_total_spec.rb"},{"name":"#promo_total returns display promo total","suite":"Spree::ReportLineItems::SalesTotal at ./spec/models/spree/report_line_items/sales_total_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","suiteSourceFile":"core/spec/models/spree/report_line_items/sales_total_spec.rb"},{"name":"#pre_tax_amount returns display pre tax amount","suite":"Spree::ReportLineItems::SalesTotal at ./spec/models/spree/report_line_items/sales_total_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","suiteSourceFile":"core/spec/models/spree/report_line_items/sales_total_spec.rb"},{"name":"#shipment_total returns display shipping cost","suite":"Spree::ReportLineItems::SalesTotal at ./spec/models/spree/report_line_items/sales_total_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1\"}}","suiteSourceFile":"core/spec/models/spree/report_line_items/sales_total_spec.rb"},{"name":"#tax_total returns display tax total","suite":"Spree::ReportLineItems::SalesTotal at ./spec/models/spree/report_line_items/sales_total_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1\"}}","suiteSourceFile":"core/spec/models/spree/report_line_items/sales_total_spec.rb"},{"name":"behaves like lifecycle events lifecycle events report.created publishes created event when record is created","suite":"Spree::Report at ./spec/models/spree/report_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/report_spec.rb"},{"name":"behaves like lifecycle events lifecycle events report.updated publishes updated event when record is updated","suite":"Spree::Report at ./spec/models/spree/report_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/report_spec.rb"},{"name":"behaves like lifecycle events lifecycle events report.deleted publishes deleted event when record is deleted","suite":"Spree::Report at ./spec/models/spree/report_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/report_spec.rb"},{"name":"#human_name returns formatted name with store, dates and report type","suite":"Spree::Report at ./spec/models/spree/report_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/report_spec.rb"},{"name":"#event_serializer_class returns the correct serializer class","suite":"Spree::Report at ./spec/models/spree/report_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/report_spec.rb"},{"name":"#generate generates CSV file and attaches it","suite":"Spree::Report at ./spec/models/spree/report_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/report_spec.rb"},{"name":"#generate sends report done email when user is present","suite":"Spree::Report at ./spec/models/spree/report_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2\"}}","suiteSourceFile":"core/spec/models/spree/report_spec.rb"},{"name":"#generate when user is not present does not send report done email","suite":"Spree::Report at ./spec/models/spree/report_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3:1\"}}","suiteSourceFile":"core/spec/models/spree/report_spec.rb"},{"name":"#attachment_file_name returns the correct file name format","suite":"Spree::Report at ./spec/models/spree/report_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","suiteSourceFile":"core/spec/models/spree/report_spec.rb"},{"name":"callbacks after_initialize sets default currency from store","suite":"Spree::Report at ./spec/models/spree/report_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1:1\"}}","suiteSourceFile":"core/spec/models/spree/report_spec.rb"},{"name":"callbacks after_initialize sets default date range","suite":"Spree::Report at ./spec/models/spree/report_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1:2\"}}","suiteSourceFile":"core/spec/models/spree/report_spec.rb"},{"name":"#line_items_scope when order is within date range includes products with sales data","suite":"Spree::Reports::ProductsPerformance at ./spec/models/spree/reports/products_performance_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/reports/products_performance_spec.rb"},{"name":"#line_items_scope when order is outside date range excludes products from orders outside date range","suite":"Spree::Reports::ProductsPerformance at ./spec/models/spree/reports/products_performance_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/reports/products_performance_spec.rb"},{"name":"#line_items_scope date range boundary conditions when order completed exactly at date_from includes products","suite":"Spree::Reports::ProductsPerformance at ./spec/models/spree/reports/products_performance_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1:1\"}}","suiteSourceFile":"core/spec/models/spree/reports/products_performance_spec.rb"},{"name":"#line_items_scope date range boundary conditions when order completed exactly at date_to includes products","suite":"Spree::Reports::ProductsPerformance at ./spec/models/spree/reports/products_performance_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:2:1\"}}","suiteSourceFile":"core/spec/models/spree/reports/products_performance_spec.rb"},{"name":"#line_items_scope date range boundary conditions when order completed 1 minute before date_from excludes products","suite":"Spree::Reports::ProductsPerformance at ./spec/models/spree/reports/products_performance_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:3:1\"}}","suiteSourceFile":"core/spec/models/spree/reports/products_performance_spec.rb"},{"name":"#line_items_scope date range boundary conditions when order completed 1 minute after date_to excludes products","suite":"Spree::Reports::ProductsPerformance at ./spec/models/spree/reports/products_performance_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:4:1\"}}","suiteSourceFile":"core/spec/models/spree/reports/products_performance_spec.rb"},{"name":"#line_items_scope when order has different currency excludes products with different currency","suite":"Spree::Reports::ProductsPerformance at ./spec/models/spree/reports/products_performance_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/reports/products_performance_spec.rb"},{"name":"#line_items_scope when order is within date range includes line items from completed orders within date range","suite":"Spree::Reports::SalesTotal at ./spec/models/spree/reports/sales_total_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/reports/sales_total_spec.rb"},{"name":"#line_items_scope when order is outside date range excludes line items from orders outside date range","suite":"Spree::Reports::SalesTotal at ./spec/models/spree/reports/sales_total_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/reports/sales_total_spec.rb"},{"name":"#line_items_scope date range boundary conditions when order completed exactly at date_from includes line items","suite":"Spree::Reports::SalesTotal at ./spec/models/spree/reports/sales_total_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1:1\"}}","suiteSourceFile":"core/spec/models/spree/reports/sales_total_spec.rb"},{"name":"#line_items_scope date range boundary conditions when order completed exactly at date_to includes line items","suite":"Spree::Reports::SalesTotal at ./spec/models/spree/reports/sales_total_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:2:1\"}}","suiteSourceFile":"core/spec/models/spree/reports/sales_total_spec.rb"},{"name":"#line_items_scope date range boundary conditions when order completed 1 minute before date_from excludes line items","suite":"Spree::Reports::SalesTotal at ./spec/models/spree/reports/sales_total_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:3:1\"}}","suiteSourceFile":"core/spec/models/spree/reports/sales_total_spec.rb"},{"name":"#line_items_scope date range boundary conditions when order completed 1 minute after date_to excludes line items","suite":"Spree::Reports::SalesTotal at ./spec/models/spree/reports/sales_total_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:4:1\"}}","suiteSourceFile":"core/spec/models/spree/reports/sales_total_spec.rb"},{"name":"#line_items_scope when order has different currency excludes line items with different currency","suite":"Spree::Reports::SalesTotal at ./spec/models/spree/reports/sales_total_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/reports/sales_total_spec.rb"},{"name":"#line_items_scope when order is incomplete excludes line items from incomplete orders","suite":"Spree::Reports::SalesTotal at ./spec/models/spree/reports/sales_total_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5:1\"}}","suiteSourceFile":"core/spec/models/spree/reports/sales_total_spec.rb"},{"name":"#return_line_items returns line items","suite":"Spree::Reports::SalesTotal at ./spec/models/spree/reports/sales_total_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/reports/sales_total_spec.rb"},{"name":"lifecycle events return_authorization.created publishes created event when record is created","suite":"Spree::ReturnAuthorization at ./spec/models/spree/return_authorization_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/return_authorization_spec.rb"},{"name":"lifecycle events return_authorization.updated publishes updated event when record is updated","suite":"Spree::ReturnAuthorization at ./spec/models/spree/return_authorization_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/return_authorization_spec.rb"},{"name":"lifecycle events return_authorization.deleted publishes deleted event when record is destroyed","suite":"Spree::ReturnAuthorization at ./spec/models/spree/return_authorization_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/return_authorization_spec.rb"},{"name":"save is invalid when order has no inventory units","suite":"Spree::ReturnAuthorization at ./spec/models/spree/return_authorization_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/return_authorization_spec.rb"},{"name":"save expedited exchanges are configured no items to exchange does not create a reimbursement","suite":"Spree::ReturnAuthorization at ./spec/models/spree/return_authorization_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/return_authorization_spec.rb"},{"name":"save expedited exchanges are configured items to exchange calls pre_expedited_exchange hooks with the return items to exchange","suite":"Spree::ReturnAuthorization at ./spec/models/spree/return_authorization_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/return_authorization_spec.rb"},{"name":"save expedited exchanges are configured items to exchange attempts to accept all return items requiring exchange","suite":"Spree::ReturnAuthorization at ./spec/models/spree/return_authorization_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:2:2\"}}","suiteSourceFile":"core/spec/models/spree/return_authorization_spec.rb"},{"name":"save expedited exchanges are configured items to exchange performs an exchange reimbursement for the exchange return items","suite":"Spree::ReturnAuthorization at ./spec/models/spree/return_authorization_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:2:3\"}}","suiteSourceFile":"core/spec/models/spree/return_authorization_spec.rb"},{"name":"save expedited exchanges are configured items to exchange the reimbursement fails puts errors on the return authorization","suite":"Spree::ReturnAuthorization at ./spec/models/spree/return_authorization_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:2:4:1\"}}","suiteSourceFile":"core/spec/models/spree/return_authorization_spec.rb"},{"name":"whitelisted_ransackable_attributes example at ./spec/models/spree/return_authorization_spec.rb:121","suite":"Spree::ReturnAuthorization at ./spec/models/spree/return_authorization_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/return_authorization_spec.rb"},{"name":"whitelisted_ransackable_associations example at ./spec/models/spree/return_authorization_spec.rb:125","suite":"Spree::ReturnAuthorization at ./spec/models/spree/return_authorization_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/return_authorization_spec.rb"},{"name":"#currency returns the order currency","suite":"Spree::ReturnAuthorization at ./spec/models/spree/return_authorization_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","suiteSourceFile":"core/spec/models/spree/return_authorization_spec.rb"},{"name":"#pre_tax_total sums it's associated return_item's pre-tax amounts","suite":"Spree::ReturnAuthorization at ./spec/models/spree/return_authorization_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","suiteSourceFile":"core/spec/models/spree/return_authorization_spec.rb"},{"name":"#display_pre_tax_total returns a Spree::Money","suite":"Spree::ReturnAuthorization at ./spec/models/spree/return_authorization_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","suiteSourceFile":"core/spec/models/spree/return_authorization_spec.rb"},{"name":"#refundable_amount no promotions returns the pre-tax line item total","suite":"Spree::ReturnAuthorization at ./spec/models/spree/return_authorization_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1:1\"}}","suiteSourceFile":"core/spec/models/spree/return_authorization_spec.rb"},{"name":"#refundable_amount promotions returns the pre-tax line item total minus the order level promotion value","suite":"Spree::ReturnAuthorization at ./spec/models/spree/return_authorization_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2:1\"}}","suiteSourceFile":"core/spec/models/spree/return_authorization_spec.rb"},{"name":"#customer_returned_items? has associated customer returns returns true","suite":"Spree::ReturnAuthorization at ./spec/models/spree/return_authorization_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1:1\"}}","suiteSourceFile":"core/spec/models/spree/return_authorization_spec.rb"},{"name":"#customer_returned_items? does not have associated customer returns returns false","suite":"Spree::ReturnAuthorization at ./spec/models/spree/return_authorization_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:2:1\"}}","suiteSourceFile":"core/spec/models/spree/return_authorization_spec.rb"},{"name":"cancel_return_items cancels the associated return items","suite":"Spree::ReturnAuthorization at ./spec/models/spree/return_authorization_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1\"}}","suiteSourceFile":"core/spec/models/spree/return_authorization_spec.rb"},{"name":"cancel_return_items some return items cannot be cancelled cancels those that can be cancelled","suite":"Spree::ReturnAuthorization at ./spec/models/spree/return_authorization_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:2:1\"}}","suiteSourceFile":"core/spec/models/spree/return_authorization_spec.rb"},{"name":"#can_cancel? all items can be cancelled returns true","suite":"Spree::ReturnAuthorization at ./spec/models/spree/return_authorization_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1:1\"}}","suiteSourceFile":"core/spec/models/spree/return_authorization_spec.rb"},{"name":"#can_cancel? at least one return item can be cancelled example at ./spec/models/spree/return_authorization_spec.rb:255","suite":"Spree::ReturnAuthorization at ./spec/models/spree/return_authorization_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2:1\"}}","suiteSourceFile":"core/spec/models/spree/return_authorization_spec.rb"},{"name":"#can_cancel? no items can be cancelled example at ./spec/models/spree/return_authorization_spec.rb:262","suite":"Spree::ReturnAuthorization at ./spec/models/spree/return_authorization_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:3:1\"}}","suiteSourceFile":"core/spec/models/spree/return_authorization_spec.rb"},{"name":"#can_cancel? when return_authorization has no return_items example at ./spec/models/spree/return_authorization_spec.rb:268","suite":"Spree::ReturnAuthorization at ./spec/models/spree/return_authorization_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:4:1\"}}","suiteSourceFile":"core/spec/models/spree/return_authorization_spec.rb"},{"name":"custom events return_authorization.canceled publishes return_authorization.canceled event when canceled","suite":"Spree::ReturnAuthorization at ./spec/models/spree/return_authorization_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:1:1\"}}","suiteSourceFile":"core/spec/models/spree/return_authorization_spec.rb"},{"name":"#eligible_for_return? checks that all permitted eligibility validators are eligible for return","suite":"Spree::ReturnItem::EligibilityValidator::Default at ./spec/models/spree/return_item/eligibility_validator/default_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item/eligibility_validator/default_spec.rb"},{"name":"#requires_manual_intervention? any of the permitted eligibility validators require manual intervention returns true","suite":"Spree::ReturnItem::EligibilityValidator::Default at ./spec/models/spree/return_item/eligibility_validator/default_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item/eligibility_validator/default_spec.rb"},{"name":"#requires_manual_intervention? no permitted eligibility validators require manual intervention returns false","suite":"Spree::ReturnItem::EligibilityValidator::Default at ./spec/models/spree/return_item/eligibility_validator/default_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item/eligibility_validator/default_spec.rb"},{"name":"#errors the validator errors are empty returns an empty hash","suite":"Spree::ReturnItem::EligibilityValidator::Default at ./spec/models/spree/return_item/eligibility_validator/default_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item/eligibility_validator/default_spec.rb"},{"name":"#errors the validators have errors gathers all errors from permitted eligibility validators into a single errors hash","suite":"Spree::ReturnItem::EligibilityValidator::Default at ./spec/models/spree/return_item/eligibility_validator/default_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item/eligibility_validator/default_spec.rb"},{"name":"#eligible_for_return? the associated inventory unit is shipped returns true","suite":"Spree::ReturnItem::EligibilityValidator::InventoryShipped at ./spec/models/spree/return_item/eligibility_validator/inventory_shipped_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item/eligibility_validator/inventory_shipped_spec.rb"},{"name":"#eligible_for_return? the associated inventory unit is not shipped returns false","suite":"Spree::ReturnItem::EligibilityValidator::InventoryShipped at ./spec/models/spree/return_item/eligibility_validator/inventory_shipped_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item/eligibility_validator/inventory_shipped_spec.rb"},{"name":"#eligible_for_return? the associated inventory unit is not shipped sets an error","suite":"Spree::ReturnItem::EligibilityValidator::InventoryShipped at ./spec/models/spree/return_item/eligibility_validator/inventory_shipped_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2\"}}","suiteSourceFile":"core/spec/models/spree/return_item/eligibility_validator/inventory_shipped_spec.rb"},{"name":"#requires_manual_intervention? not eligible for return returns true if errors were added","suite":"Spree::ReturnItem::EligibilityValidator::InventoryShipped at ./spec/models/spree/return_item/eligibility_validator/inventory_shipped_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item/eligibility_validator/inventory_shipped_spec.rb"},{"name":"#requires_manual_intervention? eligible for return returns false if no errors were added","suite":"Spree::ReturnItem::EligibilityValidator::InventoryShipped at ./spec/models/spree/return_item/eligibility_validator/inventory_shipped_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item/eligibility_validator/inventory_shipped_spec.rb"},{"name":"#eligible_for_return? inventory unit has already been reimbursed returns false","suite":"Spree::ReturnItem::EligibilityValidator::NoReimbursements at ./spec/models/spree/return_item/eligibility_validator/no_reimbursements_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item/eligibility_validator/no_reimbursements_spec.rb"},{"name":"#eligible_for_return? inventory unit has already been reimbursed sets an error","suite":"Spree::ReturnItem::EligibilityValidator::NoReimbursements at ./spec/models/spree/return_item/eligibility_validator/no_reimbursements_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/return_item/eligibility_validator/no_reimbursements_spec.rb"},{"name":"#eligible_for_return? inventory unit has not been reimbursed returns true","suite":"Spree::ReturnItem::EligibilityValidator::NoReimbursements at ./spec/models/spree/return_item/eligibility_validator/no_reimbursements_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item/eligibility_validator/no_reimbursements_spec.rb"},{"name":"#requires_manual_intervention? not eligible for return returns true if errors were added","suite":"Spree::ReturnItem::EligibilityValidator::NoReimbursements at ./spec/models/spree/return_item/eligibility_validator/no_reimbursements_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item/eligibility_validator/no_reimbursements_spec.rb"},{"name":"#requires_manual_intervention? eligible for return returns false if no errors were added","suite":"Spree::ReturnItem::EligibilityValidator::NoReimbursements at ./spec/models/spree/return_item/eligibility_validator/no_reimbursements_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item/eligibility_validator/no_reimbursements_spec.rb"},{"name":"#eligible_for_return? the order was completed returns true","suite":"Spree::ReturnItem::EligibilityValidator::OrderCompleted at ./spec/models/spree/return_item/eligibility_validator/order_completed_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item/eligibility_validator/order_completed_spec.rb"},{"name":"#eligible_for_return? the order is not completed returns false","suite":"Spree::ReturnItem::EligibilityValidator::OrderCompleted at ./spec/models/spree/return_item/eligibility_validator/order_completed_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item/eligibility_validator/order_completed_spec.rb"},{"name":"#eligible_for_return? the order is not completed sets an error","suite":"Spree::ReturnItem::EligibilityValidator::OrderCompleted at ./spec/models/spree/return_item/eligibility_validator/order_completed_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2\"}}","suiteSourceFile":"core/spec/models/spree/return_item/eligibility_validator/order_completed_spec.rb"},{"name":"#eligible_for_return? there is an rma on the return item returns true","suite":"Spree::ReturnItem::EligibilityValidator::RMARequired at ./spec/models/spree/return_item/eligibility_validator/rma_required_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item/eligibility_validator/rma_required_spec.rb"},{"name":"#eligible_for_return? there is no rma on the return item returns false abd error","suite":"Spree::ReturnItem::EligibilityValidator::RMARequired at ./spec/models/spree/return_item/eligibility_validator/rma_required_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item/eligibility_validator/rma_required_spec.rb"},{"name":"#eligible_for_return? it is within the return timeframe returns true","suite":"Spree::ReturnItem::EligibilityValidator::TimeSincePurchase at ./spec/models/spree/return_item/eligibility_validator/time_since_purchase_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item/eligibility_validator/time_since_purchase_spec.rb"},{"name":"#eligible_for_return? it is past the return timeframe returns false","suite":"Spree::ReturnItem::EligibilityValidator::TimeSincePurchase at ./spec/models/spree/return_item/eligibility_validator/time_since_purchase_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item/eligibility_validator/time_since_purchase_spec.rb"},{"name":"#eligible_for_return? it is past the return timeframe sets an error","suite":"Spree::ReturnItem::EligibilityValidator::TimeSincePurchase at ./spec/models/spree/return_item/eligibility_validator/time_since_purchase_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2\"}}","suiteSourceFile":"core/spec/models/spree/return_item/eligibility_validator/time_since_purchase_spec.rb"},{"name":".eligible_variants returns all other variants for the same product with the same option value for the specified option type","suite":"Spree::ReturnItem::ExchangeVariantEligibility::SameOptionValue at ./spec/models/spree/return_item/exchange_variant_eligibility/same_option_value_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item/exchange_variant_eligibility/same_option_value_spec.rb"},{"name":".eligible_variants does not return variants for another product","suite":"Spree::ReturnItem::ExchangeVariantEligibility::SameOptionValue at ./spec/models/spree/return_item/exchange_variant_eligibility/same_option_value_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/return_item/exchange_variant_eligibility/same_option_value_spec.rb"},{"name":".eligible_variants no option value restrictions are specified returns all variants for the product","suite":"Spree::ReturnItem::ExchangeVariantEligibility::SameOptionValue at ./spec/models/spree/return_item/exchange_variant_eligibility/same_option_value_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item/exchange_variant_eligibility/same_option_value_spec.rb"},{"name":".eligible_variants does not return variants for another product","suite":"Spree::ReturnItem::ExchangeVariantEligibility::SameProduct at ./spec/models/spree/return_item/exchange_variant_eligibility/same_product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/models/spree/return_item/exchange_variant_eligibility/same_product_spec.rb"},{"name":".eligible_variants only returns variants that are on hand or backorderable","suite":"Spree::ReturnItem::ExchangeVariantEligibility::SameProduct at ./spec/models/spree/return_item/exchange_variant_eligibility/same_product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","suiteSourceFile":"core/spec/models/spree/return_item/exchange_variant_eligibility/same_product_spec.rb"},{"name":".eligible_variants product has no variants returns the master variant for the same product","suite":"Spree::ReturnItem::ExchangeVariantEligibility::SameProduct at ./spec/models/spree/return_item/exchange_variant_eligibility/same_product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item/exchange_variant_eligibility/same_product_spec.rb"},{"name":".eligible_variants product has variants returns all variants for the same product","suite":"Spree::ReturnItem::ExchangeVariantEligibility::SameProduct at ./spec/models/spree/return_item/exchange_variant_eligibility/same_product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item/exchange_variant_eligibility/same_product_spec.rb"},{"name":"#receive! returns the inventory unit","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"#receive! attempts to accept the return item","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"#receive! with a stock location increases the count on hand","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"#receive! with a stock location when the variant is not resellable example at ./spec/models/spree/return_item_spec.rb:58","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:2:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"#receive! with a stock location when variant does not track inventory does not increase the count on hand","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:3:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"#receive! with a stock location when the restock_inventory preference is false does not increase the count on hand","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:4:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"#display_pre_tax_amount returns a Spree::Money","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"#pre_tax_amount= is expected to equal to localized number","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":".default_refund_amount_calculator defaults to the default refund amount calculator","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"pre_tax_amount calculations on create pre tax amount is not specified not an exchange example at ./spec/models/spree/return_item_spec.rb:122","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"pre_tax_amount calculations on create pre tax amount is not specified an exchange example at ./spec/models/spree/return_item_spec.rb:128","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"pre_tax_amount calculations on create pre tax amount is specified example at ./spec/models/spree/return_item_spec.rb:135","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":".from_inventory_unit with a cancelled return item example at ./spec/models/spree/return_item_spec.rb:147","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":".from_inventory_unit with a non-cancelled return item example at ./spec/models/spree/return_item_spec.rb:153","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"reception_status state_machine starts off in the awaiting state","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"acceptance_status state_machine starts off in the pending state","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"#receive awaiting status transitions successfully","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"#receive return_item has a reception status of received behaves like an invalid state transition cannot transition to received","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"#receive return_item has a reception status of cancelled behaves like an invalid state transition cannot transition to received","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:3:1:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"#receive return_item has a reception status of given_to_customer behaves like an invalid state transition cannot transition to received","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:4:1:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"#cancel awaiting status transitions successfully","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"#cancel return_item has a reception status of received behaves like an invalid state transition cannot transition to cancelled","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"#cancel return_item has a reception status of cancelled behaves like an invalid state transition cannot transition to cancelled","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:3:1:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"#cancel return_item has a reception status of given_to_customer behaves like an invalid state transition cannot transition to cancelled","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:4:1:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"#give awaiting status transitions successfully","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"#give return_item has a reception status of received behaves like an invalid state transition cannot transition to give_to_customer","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"#give return_item has a reception status of cancelled behaves like an invalid state transition cannot transition to give_to_customer","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:3:1:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"#give return_item has a reception status of given_to_customer behaves like an invalid state transition cannot transition to give_to_customer","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:4:1:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"#attempt_accept pending status transitions successfully","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:1:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"#attempt_accept pending status has no acceptance status errors","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:1:2\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"#attempt_accept return_item has an acceptance status of manual_intervention_required behaves like an invalid state transition cannot transition to accepted","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"#attempt_accept return_item has an acceptance status of rejected behaves like an invalid state transition cannot transition to accepted","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:3:1:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"#attempt_accept not eligible for return manual intervention required transitions to manual intervention required","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:4:1:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"#attempt_accept not eligible for return manual intervention required sets the acceptance status errors","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:4:1:2\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"#attempt_accept not eligible for return manual intervention not required transitions to rejected","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:4:2:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"#attempt_accept not eligible for return manual intervention not required sets the acceptance status errors","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:4:2:2\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"#reject pending status transitions successfully","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:1:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"#reject pending status has no acceptance status errors","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:1:2\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"#reject return_item has an acceptance status of rejected behaves like an invalid state transition cannot transition to rejected","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"#accept pending status transitions successfully","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:1:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"#accept pending status has no acceptance status errors","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:1:2\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"#accept return_item has an acceptance status of rejected behaves like an invalid state transition cannot transition to accepted","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"#require_manual_intervention pending status transitions successfully","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:1:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"#require_manual_intervention pending status has no acceptance status errors","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:1:2\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"#require_manual_intervention return_item has an acceptance status of rejected behaves like an invalid state transition cannot transition to manual_intervention_required","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"validity for reimbursements when acceptance_status is accepted is valid","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:1:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"validity for reimbursements when acceptance_status is accepted is valid","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:2:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"#exchange_requested? exchange variant exists example at ./spec/models/spree/return_item_spec.rb:425","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:17:1:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"#exchange_requested? exchange variant does not exist example at ./spec/models/spree/return_item_spec.rb:431","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:17:2:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"#exchange_processed? exchange inventory unit exists example at ./spec/models/spree/return_item_spec.rb:439","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:1:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"#exchange_processed? exchange inventory unit does not exist example at ./spec/models/spree/return_item_spec.rb:445","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:2:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"#exchange_required? exchange has been requested and not yet processed example at ./spec/models/spree/return_item_spec.rb:456","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:1:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"#exchange_required? exchange has not been requested example at ./spec/models/spree/return_item_spec.rb:462","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:2:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"#exchange_required? exchange has been requested and processed example at ./spec/models/spree/return_item_spec.rb:471","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:3:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"#eligible_exchange_variants uses the exchange variant calculator to compute possible variants to exchange for","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:20:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":".exchange_variant_engine defaults to the same product calculator","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:21:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"exchange pre_tax_amount the return item is intended to be exchanged example at ./spec/models/spree/return_item_spec.rb:498","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:22:1:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"exchange pre_tax_amount the return item is not intended to be exchanged example at ./spec/models/spree/return_item_spec.rb:506","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:22:2:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"#build_default_exchange_inventory_unit the return item is intended to be exchanged an exchange inventory unit already exists example at ./spec/models/spree/return_item_spec.rb:527","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:23:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"#build_default_exchange_inventory_unit the return item is intended to be exchanged no exchange inventory unit exists builds a pending inventory unit with references to the return item, variant, and previous inventory unit","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:23:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"#build_default_exchange_inventory_unit the return item is not intended to be exchanged example at ./spec/models/spree/return_item_spec.rb:543","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:23:2:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"#exchange_shipments returns the exchange inventory unit's shipment","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:24:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"#shipment returns the inventory unit's shipment","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:25:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"inventory_unit uniqueness with other awaiting return items exist for the same inventory unit cancels the others","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:26:1:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"inventory_unit uniqueness with other awaiting return items exist for the same inventory unit does not cancel itself","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:26:1:2\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"inventory_unit uniqueness with other cancelled return items exist for the same inventory unit succeeds","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:26:2:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"inventory_unit uniqueness with other received return items exist for the same inventory unit is invalid","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:26:3:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"inventory_unit uniqueness with other given_to_customer return items exist for the same inventory unit is invalid","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:26:4:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"valid exchange variant return item doesn't have an exchange variant is valid","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:27:1:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"valid exchange variant return item has an exchange variant the exchange variant is eligible is valid","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:27:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"valid exchange variant return item has an exchange variant the exchange variant is not eligible new return item is invalid","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:27:2:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"valid exchange variant return item has an exchange variant the exchange variant is not eligible new return item adds an error message about the invalid exchange variant","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:27:2:2:1:2\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"valid exchange variant return item has an exchange variant the exchange variant is not eligible the exchange variant has been updated is invalid","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:27:2:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"valid exchange variant return item has an exchange variant the exchange variant is not eligible the exchange variant has been updated adds an error message about the invalid exchange variant","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:27:2:2:2:2\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"valid exchange variant return item has an exchange variant the exchange variant is not eligible the exchange variant has not been updated is valid","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:27:2:2:3:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"included tax in total includes included tax total","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:28:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"#process_inventory_unit! example at ./spec/models/spree/return_item_spec.rb:719","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"#process_inventory_unit! stock should restock example at ./spec/models/spree/return_item_spec.rb:730","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:2:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"#process_inventory_unit! stock should not restock return_item is not resellable example at ./spec/models/spree/return_item_spec.rb:737","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:3:1:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"#process_inventory_unit! stock should not restock return_item is not resellable example at ./spec/models/spree/return_item_spec.rb:738","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:3:1:2\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"#process_inventory_unit! stock should not restock variant should not track inventory example at ./spec/models/spree/return_item_spec.rb:744","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:3:2:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"#process_inventory_unit! stock should not restock variant should not track inventory example at ./spec/models/spree/return_item_spec.rb:745","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:3:2:2\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"#process_inventory_unit! stock should not restock stock_item not present example at ./spec/models/spree/return_item_spec.rb:751","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:3:3:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"#process_inventory_unit! stock should not restock stock_item not present example at ./spec/models/spree/return_item_spec.rb:752","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:3:3:2\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"#process_inventory_unit! stock should not restock when restock inventory preference false example at ./spec/models/spree/return_item_spec.rb:758","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:3:4:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"#process_inventory_unit! stock should not restock when restock inventory preference false example at ./spec/models/spree/return_item_spec.rb:759","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:3:4:2\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"#process_inventory_unit! #currency responds to currency method","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:4:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"custom events return_item.received publishes return_item.received event when received","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:30:1:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"custom events return_item.canceled publishes return_item.canceled event when canceled","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:30:2:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"custom events return_item.given publishes return_item.given event when given to customer","suite":"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:30:3:1\"}}","suiteSourceFile":"core/spec/models/spree/return_item_spec.rb"},{"name":"compute_shipment must be overridden","suite":"Spree::ReturnsCalculator at ./spec/models/spree/returns_calculator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","suiteSourceFile":"core/spec/models/spree/returns_calculator_spec.rb"},{"name":"with users can access users through the polymorphic association","suite":"Spree::Role at ./spec/models/spree/role_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/role_spec.rb"},{"name":".default_admin_role returns the default admin role","suite":"Spree::Role at ./spec/models/spree/role_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/role_spec.rb"},{"name":"with different user types can associate with different user types","suite":"Spree::RoleUser at ./spec/models/spree/role_user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/role_user_spec.rb"},{"name":"Callbacks before_validation :set_default_resource sets the resource to the current store if it is not set","suite":"Spree::RoleUser at ./spec/models/spree/role_user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/role_user_spec.rb"},{"name":"#name returns the name of the user","suite":"Spree::RoleUser at ./spec/models/spree/role_user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/role_user_spec.rb"},{"name":"shipment.shipped event publishes shipment.shipped when shipment state changes to shipped","suite":"Spree::Shipment::CustomEvents at ./spec/models/spree/shipment/custom_events_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/shipment/custom_events_spec.rb"},{"name":"shipment.shipped event does not publish when events are disabled","suite":"Spree::Shipment::CustomEvents at ./spec/models/spree/shipment/custom_events_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/shipment/custom_events_spec.rb"},{"name":"order.shipped event publishes order.shipped when shipment ships and order is fully shipped","suite":"Spree::Shipment::CustomEvents at ./spec/models/spree/shipment/custom_events_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/shipment/custom_events_spec.rb"},{"name":"order.shipped event does not publish order.shipped when order has unshipped shipments","suite":"Spree::Shipment::CustomEvents at ./spec/models/spree/shipment/custom_events_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","suiteSourceFile":"core/spec/models/spree/shipment/custom_events_spec.rb"},{"name":"is backordered if one if its inventory_units is backordered","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"#discounted_cost","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"#tax_total with included taxes","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"#tax_total with additional taxes","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:20\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"#final_price","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:21\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"behaves like lifecycle events lifecycle events shipment.created publishes created event when record is created","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"behaves like lifecycle events lifecycle events shipment.updated publishes updated event when record is updated","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"behaves like lifecycle events lifecycle events shipment.deleted publishes deleted event when record is deleted","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:4","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:5","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:7","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:8","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:4\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:10","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:5\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:11","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:6\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"behaves like metadata reads data as symbolized keys","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:7\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"behaves like metadata reads data as not symbolized keys","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:8\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"behaves like metadata can query records by metadata properties","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:10\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"precision of pre_tax_amount keeps four digits of precision even when reloading","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"#digital? returns true if shipping method has a digital calculator","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"#digital? returns false if shipping method does not have a digital calculator","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"#digital? when shipping method is nil returns false if shipping method is nil","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3:1\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"#name returns the shipment number and shipping method name","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"#tracked? returns true if the shipment is tracked","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"#tracked? when the shipment is not tracked returns false","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2:1\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"#partial? when all products are included in the shipment example at ./spec/models/spree/shipment_spec.rb:85","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1:1\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"#partial? when not all products are included in the shipment example at ./spec/models/spree/shipment_spec.rb:93","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2:1\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"number generation generates a number containing a letter + 11 numbers","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"#determine_state returns canceled if order is canceled?","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"#determine_state returns canceled when shipment is canceled","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:2\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"#determine_state returns pending unless order.can_ship?","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:3\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"#determine_state returns pending if backordered","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:4\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"#determine_state returns shipped when already shipped","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:5\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"#determine_state returns pending when unpaid","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:6\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"#determine_state returns ready when paid","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:7\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"#determine_state returns ready when Config.auto_capture_on_dispatch","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:8\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"display_amount retuns a Spree::Money","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"display_final_price retuns a Spree::Money","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:1\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"display_item_cost retuns a Spree::Money","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:1\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"#item_cost equals shipment line items amount with tax","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:1\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"#item_cost equals line items final amount with tax","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:2\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"#item_quantity returns the sum of all manifest quantities with multiple quantities per line_item","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:1\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"#item_quantity returns the sum of all manifest quantities with single quantity per line_item","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:2\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"#item_quantity returns only the sum of items in the specific shipment, not in other shipments","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:3\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"#item_quantity returns 0 if there are no items in the shipment","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:4\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"#item_weight equals line items weight","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:1\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"#weight_unit equals line items weight unit","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:17:1\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"#free? returns true if final_price is equal to 0","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:22:1\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"#free? returns when Free Shipping promotion is applied","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:22:2\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"#with_free_shipping_promotion? returns true when Free Shipping promotion is applied","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:23:1\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"#with_free_shipping_promotion? returns false otherwise","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:23:2\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"#store return order store","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:24:1\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"#currency return order currency","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:25:1\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"manifest returns variant expected","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:26:1\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"manifest variant was removed still returns variant expected","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:26:2:1\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"#can_get_rates? returns true if order is digital and it does not have a ship address","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:27:1\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"#can_get_rates? returns false if order is not digital and it does not have a ship address","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:27:2\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"#can_get_rates? returns false when order's ship address is not valid","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:27:3\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"#can_get_rates? returns true when order's ship address is valid","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:27:4\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"shipping_rates returns shipping_method from selected shipping_rate","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:28:1\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"shipping_rates refresh_rates requests new rates, and maintain shipping_method selection","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:28:2:1\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"shipping_rates refresh_rates handles no shipping_method selection","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:28:2:2\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"shipping_rates refresh_rates does not refresh if shipment is shipped","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:28:2:3\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"shipping_rates refresh_rates can't get rates without a shipping address","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:28:2:4\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"shipping_rates refresh_rates to_package uses symbols for states when adding contents to package","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:28:2:5:1\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"#update! when order cannot ship results in a 'pending' state","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:1:1\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"#update! when order is paid results in a 'ready' state","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:2:1\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"#update! when order is paid behaves like immutable once shipped remains in shipped state once shipped","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"#update! when order is paid behaves like pending if backordered has a state of pending if backordered","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:2:3:1\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"#update! when order has balance due results in a 'pending' state","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:3:1\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"#update! when order has balance due behaves like immutable once shipped remains in shipped state once shipped","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:3:2:1\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"#update! when order has balance due behaves like pending if backordered has a state of pending if backordered","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:3:3:1\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"#update! when order has a credit owed results in a 'ready' state","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:4:1\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"#update! when order has a credit owed behaves like immutable once shipped remains in shipped state once shipped","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:4:2:1\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"#update! when order has a credit owed behaves like pending if backordered has a state of pending if backordered","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:4:3:1\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"#update! when shipment state changes to shipped calls after_ship","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:5:1\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"#update! when shipment state changes to shipped when using the default shipment handler calls the 'perform' method","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:5:2:1\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"#update! when shipment state changes to shipped when using a custom shipment handler calls the custom handler's 'perform' method","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:5:3:1\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"#update! when shipment state changes to shipped with adjustments transitions to shipped","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:5:4:1\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"when order is completed with inventory tracking validates with inventory","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:30:1:1\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"when order is completed without inventory tracking validates with no inventory","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:30:2:1\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"#cancel cancels the shipment","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:31:1\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"#cancel restocks the items","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:31:2\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"#cancel with backordered inventory units doesn't fill backorders when restocking inventory units","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:31:3:1\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"#resume transitions state to ready if the order is ready","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:32:1\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"#resume transitions state to pending if the order is not ready","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:32:2\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"#resume unstocks them items","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:32:3\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"#resume for a shipment item that does not track inventory skips unstocking the shipment item","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:32:4:1\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"#ship when the shipment is canceled unstocks them items","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:33:1:1\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"#ship from ready updates shipped_at timestamp","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:33:2:1\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"#ship from ready finalizes adjustments","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:33:2:2\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"#ship from canceled updates shipped_at timestamp","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:33:3:1\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"#ship from canceled finalizes adjustments","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:33:3:2\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"#ready with Config.auto_capture_on_dispatch == false cannot ready a shipment for an order if the order is unpaid","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:34:1:1\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"#ready with Config.auto_capture_on_dispatch == true shipments ready for an order if the order is unpaid","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:34:2:1\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"#ready with Config.auto_capture_on_dispatch == true tells the order to process payment in #after_ship","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:34:2:2\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"#ready with Config.auto_capture_on_dispatch == true order has pending payments can fully capture an authorized payment","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:34:2:3:1\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"#ready with Config.auto_capture_on_dispatch == true order has pending payments can partially capture an authorized payment","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:34:2:3:2\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"updates cost when selected shipping rate is present updates shipment totals","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:35:1\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"updates cost when selected shipping rate is present factors in additional adjustments to adjustment total","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:35:2\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"updates cost when selected shipping rate is present does not factor in included adjustments to adjustment total","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:35:3\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"changes shipping rate via general update updates everything around order shipment total and state","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:36:1\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"after_save line item changes triggers adjustment total recalculation","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:37:1:1\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"after_save line item changes does not trigger adjustment recalculation if shipment has shipped","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:37:1:2\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"after_save line item does not change does not trigger adjustment total recalculation","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:37:2:1\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"currency returns the order currency","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:38:1\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"nil costs sets cost to 0","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:39:1\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"#tracking_url uses shipping method to determine url","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:40:1\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"#transfer_to_location creates new shipment for same order","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:41:1\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"#transfer_to_location sets the given stock location for new shipment","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:41:2\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"#transfer_to_location sets proper costs for new shipment","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:41:3\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"#transfer_to_location updates `order.shipment_total` to the sum of shipments cost","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:41:4\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"set up new inventory units associates variant and order","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:42:1\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"#destroy destroys linked shipping_rates","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:43:1\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"state changes are logged to the database","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:44:1\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":".ready_or_pending returns shipments with state ready or pending","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:45:1\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"events shipped state transition publishes shipment.shipped event","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:46:1:1\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"events canceled state transition publishes shipment.canceled event","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:46:2:1\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"events resumed state transition publishes shipment.resumed event","suite":"Spree::Shipment at ./spec/models/spree/shipment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:46:3:1\"}}","suiteSourceFile":"core/spec/models/spree/shipment_spec.rb"},{"name":"computes with a shipment","suite":"Spree::ShippingCalculator at ./spec/models/spree/shipping_calculator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","suiteSourceFile":"core/spec/models/spree/shipping_calculator_spec.rb"},{"name":"computes with a package","suite":"Spree::ShippingCalculator at ./spec/models/spree/shipping_calculator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2\"}}","suiteSourceFile":"core/spec/models/spree/shipping_calculator_spec.rb"},{"name":"compute_shipment must be overridden","suite":"Spree::ShippingCalculator at ./spec/models/spree/shipping_calculator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3\"}}","suiteSourceFile":"core/spec/models/spree/shipping_calculator_spec.rb"},{"name":"compute_package must be overridden","suite":"Spree::ShippingCalculator at ./spec/models/spree/shipping_calculator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4\"}}","suiteSourceFile":"core/spec/models/spree/shipping_calculator_spec.rb"},{"name":"checks availability for a package","suite":"Spree::ShippingCalculator at ./spec/models/spree/shipping_calculator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5\"}}","suiteSourceFile":"core/spec/models/spree/shipping_calculator_spec.rb"},{"name":"calculates totals for content_items","suite":"Spree::ShippingCalculator at ./spec/models/spree/shipping_calculator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6\"}}","suiteSourceFile":"core/spec/models/spree/shipping_calculator_spec.rb"},{"name":"Validations has a valid factory","suite":"Spree::ShippingCategory at ./spec/models/spree/shipping_category_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/shipping_category_spec.rb"},{"name":"Validations requires name","suite":"Spree::ShippingCategory at ./spec/models/spree/shipping_category_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/shipping_category_spec.rb"},{"name":"Validations validates uniqueness","suite":"Spree::ShippingCategory at ./spec/models/spree/shipping_category_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/models/spree/shipping_category_spec.rb"},{"name":"#includes_digital_shipping_method? returns true if the shipping category includes a digital shipping method","suite":"Spree::ShippingCategory at ./spec/models/spree/shipping_category_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/shipping_category_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:4","suite":"Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/shipping_method_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:5","suite":"Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/shipping_method_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:7","suite":"Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/models/spree/shipping_method_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:8","suite":"Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","suiteSourceFile":"core/spec/models/spree/shipping_method_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:10","suite":"Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","suiteSourceFile":"core/spec/models/spree/shipping_method_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:11","suite":"Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","suiteSourceFile":"core/spec/models/spree/shipping_method_spec.rb"},{"name":"behaves like metadata reads data as symbolized keys","suite":"Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7\"}}","suiteSourceFile":"core/spec/models/spree/shipping_method_spec.rb"},{"name":"behaves like metadata reads data as not symbolized keys","suite":"Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8\"}}","suiteSourceFile":"core/spec/models/spree/shipping_method_spec.rb"},{"name":"behaves like metadata can query records by metadata properties","suite":"Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:10\"}}","suiteSourceFile":"core/spec/models/spree/shipping_method_spec.rb"},{"name":"scopes .available example at ./spec/models/spree/shipping_method_spec.rb:22","suite":"Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/shipping_method_spec.rb"},{"name":"scopes .available_on_front_end example at ./spec/models/spree/shipping_method_spec.rb:28","suite":"Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/shipping_method_spec.rb"},{"name":"scopes .available_on_back_end example at ./spec/models/spree/shipping_method_spec.rb:34","suite":"Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:1\"}}","suiteSourceFile":"core/spec/models/spree/shipping_method_spec.rb"},{"name":"#requires_zone_check? returns true if the shipping method is not digital","suite":"Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/shipping_method_spec.rb"},{"name":"#requires_zone_check? returns false if the shipping method is digital","suite":"Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","suiteSourceFile":"core/spec/models/spree/shipping_method_spec.rb"},{"name":"calculators rejects calculators that don't inherit from Spree::ShippingCalculator","suite":"Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/shipping_method_spec.rb"},{"name":"#shipments can gather all the related shipments","suite":"Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","suiteSourceFile":"core/spec/models/spree/shipping_method_spec.rb"},{"name":"validations validates presence of name","suite":"Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","suiteSourceFile":"core/spec/models/spree/shipping_method_spec.rb"},{"name":"validations validates presence of display_on","suite":"Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2\"}}","suiteSourceFile":"core/spec/models/spree/shipping_method_spec.rb"},{"name":"validations shipping category is required example at ./spec/models/spree/shipping_method_spec.rb:92","suite":"Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:3:1:1\"}}","suiteSourceFile":"core/spec/models/spree/shipping_method_spec.rb"},{"name":"validations shipping category is required adds error to base","suite":"Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:3:1:2\"}}","suiteSourceFile":"core/spec/models/spree/shipping_method_spec.rb"},{"name":"validations shipping category one associated example at ./spec/models/spree/shipping_method_spec.rb:105","suite":"Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:3:2:1\"}}","suiteSourceFile":"core/spec/models/spree/shipping_method_spec.rb"},{"name":"factory sets calculable correctly","suite":"Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","suiteSourceFile":"core/spec/models/spree/shipping_method_spec.rb"},{"name":"#build_tracking_url shipping method has a tracking URL mask on file tracking number has spaces returns a single URL with '%20' in lieu of spaces","suite":"Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/shipping_method_spec.rb"},{"name":"#build_tracking_url shipping method does not have a tracking URL mask on file uses tracking number gem to build tracking url","suite":"Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2:1\"}}","suiteSourceFile":"core/spec/models/spree/shipping_method_spec.rb"},{"name":"soft deletion soft-deletes when destroy is called","suite":"Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1\"}}","suiteSourceFile":"core/spec/models/spree/shipping_method_spec.rb"},{"name":"#available_to_display? when available on frontend example at ./spec/models/spree/shipping_method_spec.rb:157","suite":"Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1:1\"}}","suiteSourceFile":"core/spec/models/spree/shipping_method_spec.rb"},{"name":"#available_to_display? when available on frontend example at ./spec/models/spree/shipping_method_spec.rb:158","suite":"Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1:2\"}}","suiteSourceFile":"core/spec/models/spree/shipping_method_spec.rb"},{"name":"#available_to_display? when available on frontend example at ./spec/models/spree/shipping_method_spec.rb:159","suite":"Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1:3\"}}","suiteSourceFile":"core/spec/models/spree/shipping_method_spec.rb"},{"name":"#available_to_display? when available on backend example at ./spec/models/spree/shipping_method_spec.rb:163","suite":"Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:2:1\"}}","suiteSourceFile":"core/spec/models/spree/shipping_method_spec.rb"},{"name":"#available_to_display? when available on backend example at ./spec/models/spree/shipping_method_spec.rb:164","suite":"Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:2:2\"}}","suiteSourceFile":"core/spec/models/spree/shipping_method_spec.rb"},{"name":"#available_to_display? when available on backend example at ./spec/models/spree/shipping_method_spec.rb:165","suite":"Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:2:3\"}}","suiteSourceFile":"core/spec/models/spree/shipping_method_spec.rb"},{"name":"#frontend? example at ./spec/models/spree/shipping_method_spec.rb:170","suite":"Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1\"}}","suiteSourceFile":"core/spec/models/spree/shipping_method_spec.rb"},{"name":"#frontend? example at ./spec/models/spree/shipping_method_spec.rb:171","suite":"Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2\"}}","suiteSourceFile":"core/spec/models/spree/shipping_method_spec.rb"},{"name":"#frontend? example at ./spec/models/spree/shipping_method_spec.rb:172","suite":"Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:3\"}}","suiteSourceFile":"core/spec/models/spree/shipping_method_spec.rb"},{"name":"#backend? example at ./spec/models/spree/shipping_method_spec.rb:176","suite":"Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:1\"}}","suiteSourceFile":"core/spec/models/spree/shipping_method_spec.rb"},{"name":"#backend? example at ./spec/models/spree/shipping_method_spec.rb:177","suite":"Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:2\"}}","suiteSourceFile":"core/spec/models/spree/shipping_method_spec.rb"},{"name":"#backend? example at ./spec/models/spree/shipping_method_spec.rb:178","suite":"Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:3\"}}","suiteSourceFile":"core/spec/models/spree/shipping_method_spec.rb"},{"name":"#delivery_range without set estimated_transit_business_days_min and estimated_transit_business_days_max example at ./spec/models/spree/shipping_method_spec.rb:183","suite":"Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:1:1\"}}","suiteSourceFile":"core/spec/models/spree/shipping_method_spec.rb"},{"name":"#delivery_range with set estimated_transit_business_days_min and estimated_transit_business_days_max example at ./spec/models/spree/shipping_method_spec.rb:189","suite":"Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:2:1\"}}","suiteSourceFile":"core/spec/models/spree/shipping_method_spec.rb"},{"name":"#delivery_range when both are the same example at ./spec/models/spree/shipping_method_spec.rb:195","suite":"Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:3:1\"}}","suiteSourceFile":"core/spec/models/spree/shipping_method_spec.rb"},{"name":"#delivery_range when only one transit day value is set when only minimum day is set example at ./spec/models/spree/shipping_method_spec.rb:202","suite":"Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:4:1:1\"}}","suiteSourceFile":"core/spec/models/spree/shipping_method_spec.rb"},{"name":"#delivery_range when only one transit day value is set when only maximum day is set example at ./spec/models/spree/shipping_method_spec.rb:208","suite":"Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:4:2:1\"}}","suiteSourceFile":"core/spec/models/spree/shipping_method_spec.rb"},{"name":"#display_estimated_price example at ./spec/models/spree/shipping_method_spec.rb:214","suite":"Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:1\"}}","suiteSourceFile":"core/spec/models/spree/shipping_method_spec.rb"},{"name":"#display_estimated_price with the free rate example at ./spec/models/spree/shipping_method_spec.rb:219","suite":"Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:2:1\"}}","suiteSourceFile":"core/spec/models/spree/shipping_method_spec.rb"},{"name":"#display_price when tax included in price when the tax rate is from the default zone shows correct tax amount","suite":"Spree::ShippingRate at ./spec/models/spree/shipping_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/shipping_rate_spec.rb"},{"name":"#display_price when tax included in price when the tax rate is from the default zone when cost is zero shows no tax amount","suite":"Spree::ShippingRate at ./spec/models/spree/shipping_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/shipping_rate_spec.rb"},{"name":"#display_price when tax included in price when the tax rate is from another zone deducts the other zone's VAT from the calculated shipping rate","suite":"Spree::ShippingRate at ./spec/models/spree/shipping_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/shipping_rate_spec.rb"},{"name":"#display_price when tax included in price when the tax rate is from another zone when cost is zero shows no tax amount","suite":"Spree::ShippingRate at ./spec/models/spree/shipping_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/shipping_rate_spec.rb"},{"name":"#display_price when tax is additional to price shows correct tax amount","suite":"Spree::ShippingRate at ./spec/models/spree/shipping_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/shipping_rate_spec.rb"},{"name":"#display_price when tax is additional to price when cost is zero shows no tax amount","suite":"Spree::ShippingRate at ./spec/models/spree/shipping_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/shipping_rate_spec.rb"},{"name":"#display_price when the currency is JPY displays the price in yen","suite":"Spree::ShippingRate at ./spec/models/spree/shipping_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/shipping_rate_spec.rb"},{"name":"#display_price when tax rate is not shown in label shows no tax amount","suite":"Spree::ShippingRate at ./spec/models/spree/shipping_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/shipping_rate_spec.rb"},{"name":"#shipping_method can be retrieved","suite":"Spree::ShippingRate at ./spec/models/spree/shipping_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/shipping_rate_spec.rb"},{"name":"#shipping_method can be retrieved even when deleted","suite":"Spree::ShippingRate at ./spec/models/spree/shipping_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","suiteSourceFile":"core/spec/models/spree/shipping_rate_spec.rb"},{"name":"#tax_rate can be retrieved","suite":"Spree::ShippingRate at ./spec/models/spree/shipping_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/shipping_rate_spec.rb"},{"name":"#tax_rate can be retrieved even when deleted","suite":"Spree::ShippingRate at ./spec/models/spree/shipping_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","suiteSourceFile":"core/spec/models/spree/shipping_rate_spec.rb"},{"name":"#tax_amount without tax rate returns 0.0","suite":"Spree::ShippingRate at ./spec/models/spree/shipping_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1\"}}","suiteSourceFile":"core/spec/models/spree/shipping_rate_spec.rb"},{"name":"#final_price returns 0 if free shipping promotion is applied","suite":"Spree::ShippingRate at ./spec/models/spree/shipping_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","suiteSourceFile":"core/spec/models/spree/shipping_rate_spec.rb"},{"name":"#final_price returns 0 if cost is lesser than the discount amount","suite":"Spree::ShippingRate at ./spec/models/spree/shipping_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2\"}}","suiteSourceFile":"core/spec/models/spree/shipping_rate_spec.rb"},{"name":"#final_price returns cost minus discount amount","suite":"Spree::ShippingRate at ./spec/models/spree/shipping_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3\"}}","suiteSourceFile":"core/spec/models/spree/shipping_rate_spec.rb"},{"name":"#final_price does not return 0 when shipment is free because of selected shipping rate","suite":"Spree::ShippingRate at ./spec/models/spree/shipping_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:4\"}}","suiteSourceFile":"core/spec/models/spree/shipping_rate_spec.rb"},{"name":"#delivery_range returns the delivery range for the shipping method","suite":"Spree::ShippingRate at ./spec/models/spree/shipping_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","suiteSourceFile":"core/spec/models/spree/shipping_rate_spec.rb"},{"name":"#display_delivery_range returns the display delivery range for the shipping method","suite":"Spree::ShippingRate at ./spec/models/spree/shipping_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","suiteSourceFile":"core/spec/models/spree/shipping_rate_spec.rb"},{"name":"#free? when the shipping rate cost is 0 example at ./spec/models/spree/shipping_rate_spec.rb:208","suite":"Spree::ShippingRate at ./spec/models/spree/shipping_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1:1\"}}","suiteSourceFile":"core/spec/models/spree/shipping_rate_spec.rb"},{"name":"#free? when the shipping rate cost is not 0 example at ./spec/models/spree/shipping_rate_spec.rb:217","suite":"Spree::ShippingRate at ./spec/models/spree/shipping_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2:1\"}}","suiteSourceFile":"core/spec/models/spree/shipping_rate_spec.rb"},{"name":"#free? when the shipping rate cost is not 0 when the shipment has a free shipping promotion example at ./spec/models/spree/shipping_rate_spec.rb:227","suite":"Spree::ShippingRate at ./spec/models/spree/shipping_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/shipping_rate_spec.rb"},{"name":"#free? when the shipping rate cost is not 0 when the discount amount is equal to the cost example at ./spec/models/spree/shipping_rate_spec.rb:235","suite":"Spree::ShippingRate at ./spec/models/spree/shipping_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2:3:1\"}}","suiteSourceFile":"core/spec/models/spree/shipping_rate_spec.rb"},{"name":"can find a state by name or abbr","suite":"Spree::State at ./spec/models/spree/state_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","suiteSourceFile":"core/spec/models/spree/state_spec.rb"},{"name":"can find all states group by country id","suite":"Spree::State at ./spec/models/spree/state_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2\"}}","suiteSourceFile":"core/spec/models/spree/state_spec.rb"},{"name":"whitelisted_ransackable_attributes example at ./spec/models/spree/state_spec.rb:16","suite":"Spree::State at ./spec/models/spree/state_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/state_spec.rb"},{"name":"is valid when supply is sufficient and product is active","suite":"Spree::Stock::AvailabilityValidator at ./spec/models/spree/stock/availability_validator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","suiteSourceFile":"core/spec/models/spree/stock/availability_validator_spec.rb"},{"name":"is invalid when supply is insufficent","suite":"Spree::Stock::AvailabilityValidator at ./spec/models/spree/stock/availability_validator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2\"}}","suiteSourceFile":"core/spec/models/spree/stock/availability_validator_spec.rb"},{"name":"considers existing inventory_units sufficient","suite":"Spree::Stock::AvailabilityValidator at ./spec/models/spree/stock/availability_validator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3\"}}","suiteSourceFile":"core/spec/models/spree/stock/availability_validator_spec.rb"},{"name":"is valid when the quantity is zero","suite":"Spree::Stock::AvailabilityValidator at ./spec/models/spree/stock/availability_validator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4\"}}","suiteSourceFile":"core/spec/models/spree/stock/availability_validator_spec.rb"},{"name":"when supply is sufficient but product is not active shows a message about product status and not quantity","suite":"Spree::Stock::AvailabilityValidator at ./spec/models/spree/stock/availability_validator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","suiteSourceFile":"core/spec/models/spree/stock/availability_validator_spec.rb"},{"name":"#volume calculate the total volume of the variant","suite":"Spree::Stock::ContentItem at ./spec/models/spree/stock/content_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/stock/content_item_spec.rb"},{"name":"#dimension calculate the total dimension of the variant","suite":"Spree::Stock::ContentItem at ./spec/models/spree/stock/content_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/stock/content_item_spec.rb"},{"name":"#amount calculates the amount based on line_item's price","suite":"Spree::Stock::ContentItem at ./spec/models/spree/stock/content_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/stock/content_item_spec.rb"},{"name":"packages builds, prioritizes and estimates","suite":"Spree::Stock::Coordinator at ./spec/models/spree/stock/coordinator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/stock/coordinator_spec.rb"},{"name":"#shipments turns packages into shipments","suite":"Spree::Stock::Coordinator at ./spec/models/spree/stock/coordinator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/stock/coordinator_spec.rb"},{"name":"#shipments puts the order's ship address on the shipments","suite":"Spree::Stock::Coordinator at ./spec/models/spree/stock/coordinator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","suiteSourceFile":"core/spec/models/spree/stock/coordinator_spec.rb"},{"name":"build packages builds a package for every stock location","suite":"Spree::Stock::Coordinator at ./spec/models/spree/stock/coordinator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/stock/coordinator_spec.rb"},{"name":"build packages missing stock items in stock location builds packages only for valid stock locations","suite":"Spree::Stock::Coordinator at ./spec/models/spree/stock/coordinator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","suiteSourceFile":"core/spec/models/spree/stock/coordinator_spec.rb"},{"name":"example at ./spec/models/spree/stock/differentiator_spec.rb:31","suite":"Spree::Stock::Differentiator at ./spec/models/spree/stock/differentiator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","suiteSourceFile":"core/spec/models/spree/stock/differentiator_spec.rb"},{"name":"calculates the missing items","suite":"Spree::Stock::Differentiator at ./spec/models/spree/stock/differentiator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2\"}}","suiteSourceFile":"core/spec/models/spree/stock/differentiator_spec.rb"},{"name":"#shipping rates sorts shipping rates by cost","suite":"Spree::Stock::Estimator at ./spec/models/spree/stock/estimator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8\"}}","suiteSourceFile":"core/spec/models/spree/stock/estimator_spec.rb"},{"name":"#shipping rates when the order's ship address is in the same zone behaves like shipping rate matches returns shipping rates","suite":"Spree::Stock::Estimator at ./spec/models/spree/stock/estimator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/stock/estimator_spec.rb"},{"name":"#shipping rates when the order's ship address is in a different zone behaves like shipping rate doesn't match does not return shipping rates","suite":"Spree::Stock::Estimator at ./spec/models/spree/stock/estimator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/stock/estimator_spec.rb"},{"name":"#shipping rates when the calculator is not available for that order behaves like shipping rate doesn't match does not return shipping rates","suite":"Spree::Stock::Estimator at ./spec/models/spree/stock/estimator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1:1\"}}","suiteSourceFile":"core/spec/models/spree/stock/estimator_spec.rb"},{"name":"#shipping rates when the currency is nil behaves like shipping rate matches returns shipping rates","suite":"Spree::Stock::Estimator at ./spec/models/spree/stock/estimator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1:1\"}}","suiteSourceFile":"core/spec/models/spree/stock/estimator_spec.rb"},{"name":"#shipping rates when the currency is an empty string behaves like shipping rate matches returns shipping rates","suite":"Spree::Stock::Estimator at ./spec/models/spree/stock/estimator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5:1:1\"}}","suiteSourceFile":"core/spec/models/spree/stock/estimator_spec.rb"},{"name":"#shipping rates when the current matches the order's currency behaves like shipping rate matches returns shipping rates","suite":"Spree::Stock::Estimator at ./spec/models/spree/stock/estimator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6:1:1\"}}","suiteSourceFile":"core/spec/models/spree/stock/estimator_spec.rb"},{"name":"#shipping rates if the currency is different than the order's currency behaves like shipping rate doesn't match does not return shipping rates","suite":"Spree::Stock::Estimator at ./spec/models/spree/stock/estimator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7:1:1\"}}","suiteSourceFile":"core/spec/models/spree/stock/estimator_spec.rb"},{"name":"#shipping rates general shipping methods selects the most affordable shipping rate","suite":"Spree::Stock::Estimator at ./spec/models/spree/stock/estimator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:9:1\"}}","suiteSourceFile":"core/spec/models/spree/stock/estimator_spec.rb"},{"name":"#shipping rates general shipping methods selects the most affordable shipping rate and doesn't raise exception over nil cost","suite":"Spree::Stock::Estimator at ./spec/models/spree/stock/estimator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:9:2\"}}","suiteSourceFile":"core/spec/models/spree/stock/estimator_spec.rb"},{"name":"#shipping rates involves backend only shipping methods does not return backend rates at all","suite":"Spree::Stock::Estimator at ./spec/models/spree/stock/estimator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:10:1\"}}","suiteSourceFile":"core/spec/models/spree/stock/estimator_spec.rb"},{"name":"#shipping rates involves backend only shipping methods doesn't select backend rates even if they're more affordable","suite":"Spree::Stock::Estimator at ./spec/models/spree/stock/estimator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:10:2\"}}","suiteSourceFile":"core/spec/models/spree/stock/estimator_spec.rb"},{"name":"#shipping rates includes tax adjustments if applicable links the shipping rate and the tax rate","suite":"Spree::Stock::Estimator at ./spec/models/spree/stock/estimator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:11:1\"}}","suiteSourceFile":"core/spec/models/spree/stock/estimator_spec.rb"},{"name":"#shipping rates VAT price calculation when the order does not have a tax zone behaves like shipping rate matches returns shipping rates","suite":"Spree::Stock::Estimator at ./spec/models/spree/stock/estimator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:12:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/stock/estimator_spec.rb"},{"name":"#shipping rates VAT price calculation when the order's tax zone is the default zone behaves like shipping rate matches returns shipping rates","suite":"Spree::Stock::Estimator at ./spec/models/spree/stock/estimator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:12:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/stock/estimator_spec.rb"},{"name":"#shipping rates VAT price calculation when the order's tax zone is a non-VAT zone deducts the default VAT from the cost","suite":"Spree::Stock::Estimator at ./spec/models/spree/stock/estimator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:12:3:1\"}}","suiteSourceFile":"core/spec/models/spree/stock/estimator_spec.rb"},{"name":"#shipping rates VAT price calculation when the order's tax zone is a zone with VAT outside the default zone deducts the default vat and applies the foreign vat to calculate the price","suite":"Spree::Stock::Estimator at ./spec/models/spree/stock/estimator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:12:4:1\"}}","suiteSourceFile":"core/spec/models/spree/stock/estimator_spec.rb"},{"name":"#units returns an inventory unit for each quantity for the order's line items","suite":"Spree::Stock::InventoryUnitBuilder at ./spec/models/spree/stock/inventory_unit_builder_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/stock/inventory_unit_builder_spec.rb"},{"name":"#units builds the inventory units as pending","suite":"Spree::Stock::InventoryUnitBuilder at ./spec/models/spree/stock/inventory_unit_builder_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/stock/inventory_unit_builder_spec.rb"},{"name":"#units sets the order_id on inventory units","suite":"Spree::Stock::InventoryUnitBuilder at ./spec/models/spree/stock/inventory_unit_builder_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/models/spree/stock/inventory_unit_builder_spec.rb"},{"name":"calculates the weight of all the contents","suite":"Spree::Stock::Package at ./spec/models/spree/stock/package_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","suiteSourceFile":"core/spec/models/spree/stock/package_spec.rb"},{"name":"filters by on_hand and backordered","suite":"Spree::Stock::Package at ./spec/models/spree/stock/package_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3\"}}","suiteSourceFile":"core/spec/models/spree/stock/package_spec.rb"},{"name":"calculates the quantity by state","suite":"Spree::Stock::Package at ./spec/models/spree/stock/package_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4\"}}","suiteSourceFile":"core/spec/models/spree/stock/package_spec.rb"},{"name":"returns nil for content item not found","suite":"Spree::Stock::Package at ./spec/models/spree/stock/package_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5\"}}","suiteSourceFile":"core/spec/models/spree/stock/package_spec.rb"},{"name":"finds content item for an inventory unit","suite":"Spree::Stock::Package at ./spec/models/spree/stock/package_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6\"}}","suiteSourceFile":"core/spec/models/spree/stock/package_spec.rb"},{"name":"builds a list of shipping methods common to all categories","suite":"Spree::Stock::Package at ./spec/models/spree/stock/package_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7\"}}","suiteSourceFile":"core/spec/models/spree/stock/package_spec.rb"},{"name":"can convert to a shipment","suite":"Spree::Stock::Package at ./spec/models/spree/stock/package_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9\"}}","suiteSourceFile":"core/spec/models/spree/stock/package_spec.rb"},{"name":"currency returns the currency based on the currency from the order","suite":"Spree::Stock::Package at ./spec/models/spree/stock/package_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/stock/package_spec.rb"},{"name":"when no categories builds an empty list of shipping methods","suite":"Spree::Stock::Package at ./spec/models/spree/stock/package_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1\"}}","suiteSourceFile":"core/spec/models/spree/stock/package_spec.rb"},{"name":"#add_multiple adds multiple inventory units","suite":"Spree::Stock::Package at ./spec/models/spree/stock/package_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1\"}}","suiteSourceFile":"core/spec/models/spree/stock/package_spec.rb"},{"name":"#add_multiple allows adding with a state","suite":"Spree::Stock::Package at ./spec/models/spree/stock/package_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:2\"}}","suiteSourceFile":"core/spec/models/spree/stock/package_spec.rb"},{"name":"#add_multiple defaults to adding with the on hand state","suite":"Spree::Stock::Package at ./spec/models/spree/stock/package_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:3\"}}","suiteSourceFile":"core/spec/models/spree/stock/package_spec.rb"},{"name":"#remove there is a content item for the inventory unit removes that content item","suite":"Spree::Stock::Package at ./spec/models/spree/stock/package_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1:1\"}}","suiteSourceFile":"core/spec/models/spree/stock/package_spec.rb"},{"name":"#remove there is no content item for the inventory unit doesn't change the set of content items","suite":"Spree::Stock::Package at ./spec/models/spree/stock/package_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2:1\"}}","suiteSourceFile":"core/spec/models/spree/stock/package_spec.rb"},{"name":"#order there is an inventory unit returns an order","suite":"Spree::Stock::Package at ./spec/models/spree/stock/package_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:1:1\"}}","suiteSourceFile":"core/spec/models/spree/stock/package_spec.rb"},{"name":"#order there is no inventory unit returns nil","suite":"Spree::Stock::Package at ./spec/models/spree/stock/package_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:2:1\"}}","suiteSourceFile":"core/spec/models/spree/stock/package_spec.rb"},{"name":"#volume calculates the sum of the volume of all the items","suite":"Spree::Stock::Package at ./spec/models/spree/stock/package_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:1\"}}","suiteSourceFile":"core/spec/models/spree/stock/package_spec.rb"},{"name":"#dimension calculates the sum of the dimension of all the items","suite":"Spree::Stock::Package at ./spec/models/spree/stock/package_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:1\"}}","suiteSourceFile":"core/spec/models/spree/stock/package_spec.rb"},{"name":"packages builds an array of packages","suite":"Spree::Stock::Packer at ./spec/models/spree/stock/packer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/stock/packer_spec.rb"},{"name":"packages allows users to set splitters to an empty array","suite":"Spree::Stock::Packer at ./spec/models/spree/stock/packer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/stock/packer_spec.rb"},{"name":"default_package contains all the items","suite":"Spree::Stock::Packer at ./spec/models/spree/stock/packer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/stock/packer_spec.rb"},{"name":"default_package variants are added as backordered without enough on_hand","suite":"Spree::Stock::Packer at ./spec/models/spree/stock/packer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","suiteSourceFile":"core/spec/models/spree/stock/packer_spec.rb"},{"name":"default_package location doesn't have order items in stock builds an empty package","suite":"Spree::Stock::Packer at ./spec/models/spree/stock/packer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:1\"}}","suiteSourceFile":"core/spec/models/spree/stock/packer_spec.rb"},{"name":"default_package doesn't track inventory levels doesn't bother stock items status in stock location","suite":"Spree::Stock::Packer at ./spec/models/spree/stock/packer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:4:1\"}}","suiteSourceFile":"core/spec/models/spree/stock/packer_spec.rb"},{"name":"default_package doesn't track inventory levels still creates package with proper quantity","suite":"Spree::Stock::Packer at ./spec/models/spree/stock/packer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:4:2\"}}","suiteSourceFile":"core/spec/models/spree/stock/packer_spec.rb"},{"name":"keeps a single package","suite":"Spree::Stock::Prioritizer at ./spec/models/spree/stock/prioritizer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","suiteSourceFile":"core/spec/models/spree/stock/prioritizer_spec.rb"},{"name":"removes duplicate packages","suite":"Spree::Stock::Prioritizer at ./spec/models/spree/stock/prioritizer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2\"}}","suiteSourceFile":"core/spec/models/spree/stock/prioritizer_spec.rb"},{"name":"split over 2 packages","suite":"Spree::Stock::Prioritizer at ./spec/models/spree/stock/prioritizer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3\"}}","suiteSourceFile":"core/spec/models/spree/stock/prioritizer_spec.rb"},{"name":"1st has some, 2nd has remaining","suite":"Spree::Stock::Prioritizer at ./spec/models/spree/stock/prioritizer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4\"}}","suiteSourceFile":"core/spec/models/spree/stock/prioritizer_spec.rb"},{"name":"1st has backorder, 2nd has some","suite":"Spree::Stock::Prioritizer at ./spec/models/spree/stock/prioritizer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5\"}}","suiteSourceFile":"core/spec/models/spree/stock/prioritizer_spec.rb"},{"name":"1st has backorder, 2nd has all","suite":"Spree::Stock::Prioritizer at ./spec/models/spree/stock/prioritizer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6\"}}","suiteSourceFile":"core/spec/models/spree/stock/prioritizer_spec.rb"},{"name":"example at ./spec/models/spree/stock/quantifier_spec.rb:21","suite":"Spree::Stock::Quantifier at ./spec/models/spree/stock/quantifier_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","suiteSourceFile":"core/spec/models/spree/stock/quantifier_spec.rb"},{"name":"example at ./spec/models/spree/stock/quantifier_spec.rb:22","suite":"Spree::Stock::Quantifier at ./spec/models/spree/stock/quantifier_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2\"}}","suiteSourceFile":"core/spec/models/spree/stock/quantifier_spec.rb"},{"name":"with a single stock location/item total_on_hand should match stock_item","suite":"Spree::Stock::Quantifier at ./spec/models/spree/stock/quantifier_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/stock/quantifier_spec.rb"},{"name":"with a single stock location/item when variant is available when track_inventory_levels is false example at ./spec/models/spree/stock/quantifier_spec.rb:37","suite":"Spree::Stock::Quantifier at ./spec/models/spree/stock/quantifier_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/stock/quantifier_spec.rb"},{"name":"with a single stock location/item when variant is available when track_inventory_levels is false behaves like unlimited supply can_supply? any amount","suite":"Spree::Stock::Quantifier at ./spec/models/spree/stock/quantifier_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/stock/quantifier_spec.rb"},{"name":"with a single stock location/item when variant is available when variant inventory tracking is off example at ./spec/models/spree/stock/quantifier_spec.rb:45","suite":"Spree::Stock::Quantifier at ./spec/models/spree/stock/quantifier_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/stock/quantifier_spec.rb"},{"name":"with a single stock location/item when variant is available when variant inventory tracking is off behaves like unlimited supply can_supply? any amount","suite":"Spree::Stock::Quantifier at ./spec/models/spree/stock/quantifier_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/stock/quantifier_spec.rb"},{"name":"with a single stock location/item when variant is available when stock item allows backordering example at ./spec/models/spree/stock/quantifier_spec.rb:51","suite":"Spree::Stock::Quantifier at ./spec/models/spree/stock/quantifier_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:3:1\"}}","suiteSourceFile":"core/spec/models/spree/stock/quantifier_spec.rb"},{"name":"with a single stock location/item when variant is available when stock item allows backordering behaves like unlimited supply can_supply? any amount","suite":"Spree::Stock::Quantifier at ./spec/models/spree/stock/quantifier_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:3:2:1\"}}","suiteSourceFile":"core/spec/models/spree/stock/quantifier_spec.rb"},{"name":"with a single stock location/item when variant is available when stock item prevents backordering example at ./spec/models/spree/stock/quantifier_spec.rb:59","suite":"Spree::Stock::Quantifier at ./spec/models/spree/stock/quantifier_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:4:1\"}}","suiteSourceFile":"core/spec/models/spree/stock/quantifier_spec.rb"},{"name":"with a single stock location/item when variant is available when stock item prevents backordering can_supply? only upto total_on_hand","suite":"Spree::Stock::Quantifier at ./spec/models/spree/stock/quantifier_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:4:2\"}}","suiteSourceFile":"core/spec/models/spree/stock/quantifier_spec.rb"},{"name":"with a single stock location/item when variant is not available example at ./spec/models/spree/stock/quantifier_spec.rb:74","suite":"Spree::Stock::Quantifier at ./spec/models/spree/stock/quantifier_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3:1\"}}","suiteSourceFile":"core/spec/models/spree/stock/quantifier_spec.rb"},{"name":"with multiple stock locations/items total_on_hand should total all active stock_items","suite":"Spree::Stock::Quantifier at ./spec/models/spree/stock/quantifier_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/stock/quantifier_spec.rb"},{"name":"with multiple stock locations/items when variant is available when any stock item allows backordering example at ./spec/models/spree/stock/quantifier_spec.rb:98","suite":"Spree::Stock::Quantifier at ./spec/models/spree/stock/quantifier_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/stock/quantifier_spec.rb"},{"name":"with multiple stock locations/items when variant is available when any stock item allows backordering behaves like unlimited supply can_supply? any amount","suite":"Spree::Stock::Quantifier at ./spec/models/spree/stock/quantifier_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/stock/quantifier_spec.rb"},{"name":"with multiple stock locations/items when variant is available when all stock items prevent backordering example at ./spec/models/spree/stock/quantifier_spec.rb:106","suite":"Spree::Stock::Quantifier at ./spec/models/spree/stock/quantifier_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/stock/quantifier_spec.rb"},{"name":"with multiple stock locations/items when variant is available when all stock items prevent backordering can_supply? upto total_on_hand","suite":"Spree::Stock::Quantifier at ./spec/models/spree/stock/quantifier_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:2:2\"}}","suiteSourceFile":"core/spec/models/spree/stock/quantifier_spec.rb"},{"name":"with multiple stock locations/items when variant is not available example at ./spec/models/spree/stock/quantifier_spec.rb:121","suite":"Spree::Stock::Quantifier at ./spec/models/spree/stock/quantifier_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3:1\"}}","suiteSourceFile":"core/spec/models/spree/stock/quantifier_spec.rb"},{"name":"splits packages by status","suite":"Spree::Stock::Splitter::Backordered at ./spec/models/spree/stock/splitter/backordered_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","suiteSourceFile":"core/spec/models/spree/stock/splitter/backordered_spec.rb"},{"name":"continues to splitter chain example at ./spec/models/spree/stock/splitter/base_spec.rb:17","suite":"Spree::Stock::Splitter::Base at ./spec/models/spree/stock/splitter/base_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/stock/splitter/base_spec.rb"},{"name":"splits each package by product digital status","suite":"Spree::Stock::Splitter::Digital at ./spec/models/spree/stock/splitter/digital_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","suiteSourceFile":"core/spec/models/spree/stock/splitter/digital_spec.rb"},{"name":"splits each package by shipping category","suite":"Spree::Stock::Splitter::ShippingCategory at ./spec/models/spree/stock/splitter/shipping_category_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","suiteSourceFile":"core/spec/models/spree/stock/splitter/shipping_category_spec.rb"},{"name":"with packages that can be reduced splits and keeps splitting until all packages are underweight","suite":"Spree::Stock::Splitter::Weight at ./spec/models/spree/stock/splitter/weight_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/stock/splitter/weight_spec.rb"},{"name":"with packages that can not be reduced handles packages that can not be reduced","suite":"Spree::Stock::Splitter::Weight at ./spec/models/spree/stock/splitter/weight_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/stock/splitter/weight_spec.rb"},{"name":"with multiple packages splits and keeps splitting until all packages are underweight","suite":"Spree::Stock::Splitter::Weight at ./spec/models/spree/stock/splitter/weight_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/stock/splitter/weight_spec.rb"},{"name":"maintains the count on hand for a variant","suite":"Spree::StockItem at ./spec/models/spree/stock_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3\"}}","suiteSourceFile":"core/spec/models/spree/stock_item_spec.rb"},{"name":"can return the stock item's variant's name","suite":"Spree::StockItem at ./spec/models/spree/stock_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4\"}}","suiteSourceFile":"core/spec/models/spree/stock_item_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:4","suite":"Spree::StockItem at ./spec/models/spree/stock_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_item_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:5","suite":"Spree::StockItem at ./spec/models/spree/stock_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/stock_item_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:7","suite":"Spree::StockItem at ./spec/models/spree/stock_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/models/spree/stock_item_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:8","suite":"Spree::StockItem at ./spec/models/spree/stock_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","suiteSourceFile":"core/spec/models/spree/stock_item_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:10","suite":"Spree::StockItem at ./spec/models/spree/stock_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","suiteSourceFile":"core/spec/models/spree/stock_item_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:11","suite":"Spree::StockItem at ./spec/models/spree/stock_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","suiteSourceFile":"core/spec/models/spree/stock_item_spec.rb"},{"name":"behaves like metadata reads data as symbolized keys","suite":"Spree::StockItem at ./spec/models/spree/stock_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7\"}}","suiteSourceFile":"core/spec/models/spree/stock_item_spec.rb"},{"name":"behaves like metadata reads data as not symbolized keys","suite":"Spree::StockItem at ./spec/models/spree/stock_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8\"}}","suiteSourceFile":"core/spec/models/spree/stock_item_spec.rb"},{"name":"behaves like metadata can query records by metadata properties","suite":"Spree::StockItem at ./spec/models/spree/stock_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:10\"}}","suiteSourceFile":"core/spec/models/spree/stock_item_spec.rb"},{"name":"behaves like lifecycle events lifecycle events stock_item.created publishes created event when record is created","suite":"Spree::StockItem at ./spec/models/spree/stock_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_item_spec.rb"},{"name":"behaves like lifecycle events lifecycle events stock_item.updated publishes updated event when record is updated","suite":"Spree::StockItem at ./spec/models/spree/stock_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_item_spec.rb"},{"name":"behaves like lifecycle events lifecycle events stock_item.deleted publishes deleted event when record is deleted","suite":"Spree::StockItem at ./spec/models/spree/stock_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_item_spec.rb"},{"name":"available to be included in shipment has stock example at ./spec/models/spree/stock_item_spec.rb:21","suite":"Spree::StockItem at ./spec/models/spree/stock_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_item_spec.rb"},{"name":"available to be included in shipment backorderable example at ./spec/models/spree/stock_item_spec.rb:27","suite":"Spree::StockItem at ./spec/models/spree/stock_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_item_spec.rb"},{"name":"available to be included in shipment no stock and not backorderable example at ./spec/models/spree/stock_item_spec.rb:36","suite":"Spree::StockItem at ./spec/models/spree/stock_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_item_spec.rb"},{"name":"reduce_count_on_hand_to_zero when count_on_hand > 0 example at ./spec/models/spree/stock_item_spec.rb:47","suite":"Spree::StockItem at ./spec/models/spree/stock_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_item_spec.rb"},{"name":"reduce_count_on_hand_to_zero when count_on_hand > 0 example at ./spec/models/spree/stock_item_spec.rb:57","suite":"Spree::StockItem at ./spec/models/spree/stock_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_item_spec.rb"},{"name":"adjust count_on_hand is updated pessimistically","suite":"Spree::StockItem at ./spec/models/spree/stock_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_item_spec.rb"},{"name":"adjust count_on_hand item out of stock (by five items) when stock received is insufficient to fulfill backorders splits inventory to fulfill partial backorder","suite":"Spree::StockItem at ./spec/models/spree/stock_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_item_spec.rb"},{"name":"adjust count_on_hand item out of stock (by two items) processes existing backorders, even with negative stock","suite":"Spree::StockItem at ./spec/models/spree/stock_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:3:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_item_spec.rb"},{"name":"adjust count_on_hand item out of stock (by two items) does not process backorders when stock is adjusted negatively","suite":"Spree::StockItem at ./spec/models/spree/stock_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:3:2\"}}","suiteSourceFile":"core/spec/models/spree/stock_item_spec.rb"},{"name":"adjust count_on_hand item out of stock (by two items) adds new items fills existing backorders","suite":"Spree::StockItem at ./spec/models/spree/stock_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:3:3:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_item_spec.rb"},{"name":"set count_on_hand is updated pessimistically","suite":"Spree::StockItem at ./spec/models/spree/stock_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_item_spec.rb"},{"name":"set count_on_hand item out of stock (by two items) doesn't process backorders","suite":"Spree::StockItem at ./spec/models/spree/stock_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_item_spec.rb"},{"name":"set count_on_hand item out of stock (by two items) adds new items fills existing backorders","suite":"Spree::StockItem at ./spec/models/spree/stock_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_item_spec.rb"},{"name":"with stock movements doesnt raise ReadOnlyRecord error","suite":"Spree::StockItem at ./spec/models/spree/stock_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_item_spec.rb"},{"name":"destroyed recreates stock item just fine","suite":"Spree::StockItem at ./spec/models/spree/stock_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_item_spec.rb"},{"name":"destroyed doesnt allow recreating more than one stock item at once","suite":"Spree::StockItem at ./spec/models/spree/stock_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:2\"}}","suiteSourceFile":"core/spec/models/spree/stock_item_spec.rb"},{"name":"#after_save binary_inventory_cache is set to false (default) in_stock? changes touches its variant","suite":"Spree::StockItem at ./spec/models/spree/stock_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_item_spec.rb"},{"name":"#after_save binary_inventory_cache is set to false (default) in_stock? does not change touches its variant","suite":"Spree::StockItem at ./spec/models/spree/stock_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_item_spec.rb"},{"name":"#after_save binary_inventory_cache is set to true in_stock? changes touches its variant","suite":"Spree::StockItem at ./spec/models/spree/stock_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_item_spec.rb"},{"name":"#after_save binary_inventory_cache is set to true in_stock? does not change does not touch its variant","suite":"Spree::StockItem at ./spec/models/spree/stock_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_item_spec.rb"},{"name":"#after_save binary_inventory_cache is set to true when a new stock location is added touches its variant","suite":"Spree::StockItem at ./spec/models/spree/stock_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2:3:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_item_spec.rb"},{"name":"#after_touch touches its variant","suite":"Spree::StockItem at ./spec/models/spree/stock_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_item_spec.rb"},{"name":"variant can be found even if the variant is deleted","suite":"Spree::StockItem at ./spec/models/spree/stock_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_item_spec.rb"},{"name":"validations count_on_hand when count_on_hand not changed when not backorderable behaves like valid count_on_hand has :no errors_on","suite":"Spree::StockItem at ./spec/models/spree/stock_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:1:1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_item_spec.rb"},{"name":"validations count_on_hand when count_on_hand not changed when backorderable behaves like valid count_on_hand has :no errors_on","suite":"Spree::StockItem at ./spec/models/spree/stock_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:1:1:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_item_spec.rb"},{"name":"validations count_on_hand when count_on_hand changed when backorderable when both count_on_hand and count_on_hand_was are positive when count_on_hand is greater than count_on_hand_was behaves like valid count_on_hand has :no errors_on","suite":"Spree::StockItem at ./spec/models/spree/stock_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:1:2:1:1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_item_spec.rb"},{"name":"validations count_on_hand when count_on_hand changed when backorderable when both count_on_hand and count_on_hand_was are positive when count_on_hand is smaller than count_on_hand_was behaves like valid count_on_hand has :no errors_on","suite":"Spree::StockItem at ./spec/models/spree/stock_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:1:2:1:1:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_item_spec.rb"},{"name":"validations count_on_hand when count_on_hand changed when backorderable when both count_on_hand and count_on_hand_was are negative when count_on_hand is greater than count_on_hand_was behaves like valid count_on_hand has :no errors_on","suite":"Spree::StockItem at ./spec/models/spree/stock_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:1:2:1:2:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_item_spec.rb"},{"name":"validations count_on_hand when count_on_hand changed when backorderable when both count_on_hand and count_on_hand_was are negative when count_on_hand is smaller than count_on_hand_was behaves like valid count_on_hand has :no errors_on","suite":"Spree::StockItem at ./spec/models/spree/stock_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:1:2:1:2:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_item_spec.rb"},{"name":"validations count_on_hand when count_on_hand changed when backorderable when both count_on_hand is positive and count_on_hand_was is negative when count_on_hand is greater than count_on_hand_was behaves like valid count_on_hand has :no errors_on","suite":"Spree::StockItem at ./spec/models/spree/stock_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:1:2:1:3:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_item_spec.rb"},{"name":"validations count_on_hand when count_on_hand changed when backorderable when both count_on_hand is negative and count_on_hand_was is positive when count_on_hand is greater than count_on_hand_was behaves like valid count_on_hand has :no errors_on","suite":"Spree::StockItem at ./spec/models/spree/stock_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:1:2:1:4:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_item_spec.rb"},{"name":"validations count_on_hand when count_on_hand changed when not backorderable when both count_on_hand and count_on_hand_was are positive when count_on_hand is greater than count_on_hand_was behaves like valid count_on_hand has :no errors_on","suite":"Spree::StockItem at ./spec/models/spree/stock_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:1:2:2:1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_item_spec.rb"},{"name":"validations count_on_hand when count_on_hand changed when not backorderable when both count_on_hand and count_on_hand_was are positive when count_on_hand is smaller than count_on_hand_was behaves like valid count_on_hand has :no errors_on","suite":"Spree::StockItem at ./spec/models/spree/stock_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:1:2:2:1:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_item_spec.rb"},{"name":"validations count_on_hand when count_on_hand changed when not backorderable when both count_on_hand and count_on_hand_was are negative when count_on_hand is greater than count_on_hand_was behaves like valid count_on_hand has :no errors_on","suite":"Spree::StockItem at ./spec/models/spree/stock_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:1:2:2:2:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_item_spec.rb"},{"name":"validations count_on_hand when count_on_hand changed when not backorderable when both count_on_hand and count_on_hand_was are negative when count_on_hand is smaller than count_on_hand_was behaves like not valid count_on_hand has 1 error on count_on_hand","suite":"Spree::StockItem at ./spec/models/spree/stock_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:1:2:2:2:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_item_spec.rb"},{"name":"validations count_on_hand when count_on_hand changed when not backorderable when both count_on_hand and count_on_hand_was are negative when count_on_hand is smaller than count_on_hand_was behaves like not valid count_on_hand example at ./spec/models/spree/stock_item_spec.rb:302","suite":"Spree::StockItem at ./spec/models/spree/stock_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:1:2:2:2:2:1:2\"}}","suiteSourceFile":"core/spec/models/spree/stock_item_spec.rb"},{"name":"validations count_on_hand when count_on_hand changed when not backorderable when both count_on_hand is positive and count_on_hand_was is negative when count_on_hand is greater than count_on_hand_was behaves like valid count_on_hand has :no errors_on","suite":"Spree::StockItem at ./spec/models/spree/stock_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:1:2:2:3:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_item_spec.rb"},{"name":"validations count_on_hand when count_on_hand changed when not backorderable when both count_on_hand is negative and count_on_hand_was is positive when count_on_hand is greater than count_on_hand_was behaves like not valid count_on_hand has 1 error on count_on_hand","suite":"Spree::StockItem at ./spec/models/spree/stock_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:1:2:2:4:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_item_spec.rb"},{"name":"validations count_on_hand when count_on_hand changed when not backorderable when both count_on_hand is negative and count_on_hand_was is positive when count_on_hand is greater than count_on_hand_was behaves like not valid count_on_hand example at ./spec/models/spree/stock_item_spec.rb:302","suite":"Spree::StockItem at ./spec/models/spree/stock_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:1:2:2:4:1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/stock_item_spec.rb"},{"name":"scopes .with_active_stock_location when stock location is active example at ./spec/models/spree/stock_item_spec.rb:470","suite":"Spree::StockItem at ./spec/models/spree/stock_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_item_spec.rb"},{"name":"scopes .with_active_stock_location when stock location is inactive example at ./spec/models/spree/stock_item_spec.rb:476","suite":"Spree::StockItem at ./spec/models/spree/stock_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_item_spec.rb"},{"name":"validates uniqueness","suite":"Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2\"}}","suiteSourceFile":"core/spec/models/spree/stock_location_spec.rb"},{"name":"finds a stock_item for a variant","suite":"Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4\"}}","suiteSourceFile":"core/spec/models/spree/stock_location_spec.rb"},{"name":"finds a stock_item for a variant by id","suite":"Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5\"}}","suiteSourceFile":"core/spec/models/spree/stock_location_spec.rb"},{"name":"returns nil when stock_item is not found for variant","suite":"Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6\"}}","suiteSourceFile":"core/spec/models/spree/stock_location_spec.rb"},{"name":"finds a count_on_hand for a variant","suite":"Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8\"}}","suiteSourceFile":"core/spec/models/spree/stock_location_spec.rb"},{"name":"finds determines if you a variant is backorderable","suite":"Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9\"}}","suiteSourceFile":"core/spec/models/spree/stock_location_spec.rb"},{"name":"restocks a variant with a positive stock movement","suite":"Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10\"}}","suiteSourceFile":"core/spec/models/spree/stock_location_spec.rb"},{"name":"unstocks a variant with a negative stock movement","suite":"Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11\"}}","suiteSourceFile":"core/spec/models/spree/stock_location_spec.rb"},{"name":"creates a stock_movement","suite":"Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12\"}}","suiteSourceFile":"core/spec/models/spree/stock_location_spec.rb"},{"name":"can be deactivated","suite":"Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13\"}}","suiteSourceFile":"core/spec/models/spree/stock_location_spec.rb"},{"name":"ensures only one stock location is default at a time","suite":"Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14\"}}","suiteSourceFile":"core/spec/models/spree/stock_location_spec.rb"},{"name":"handling the stock items creation after create creates stock_items for all variants","suite":"Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_location_spec.rb"},{"name":"handling stock items given a variant set up creates stock item","suite":"Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_location_spec.rb"},{"name":"handling stock items given a variant set up stock item exists returns existing stock item","suite":"Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_location_spec.rb"},{"name":"handling stock items given a variant propagate variants creates a new stock item","suite":"Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_location_spec.rb"},{"name":"handling stock items given a variant propagate variants passes backorderable default config true example at ./spec/models/spree/stock_location_spec.rb:70","suite":"Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:2:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_location_spec.rb"},{"name":"handling stock items given a variant propagate variants passes backorderable default config false example at ./spec/models/spree/stock_location_spec.rb:76","suite":"Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:2:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_location_spec.rb"},{"name":"handling stock items given a variant propagate all variants true example at ./spec/models/spree/stock_location_spec.rb:87","suite":"Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:3:1:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_location_spec.rb"},{"name":"handling stock items given a variant propagate all variants false example at ./spec/models/spree/stock_location_spec.rb:99","suite":"Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:3:2:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_location_spec.rb"},{"name":"#stock_item_or_create without stock item variant instance passed creates a stock_item if not found for a variant","suite":"Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_location_spec.rb"},{"name":"#stock_item_or_create without stock item variant instance passed example at ./spec/models/spree/stock_location_spec.rb:136","suite":"Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/stock_location_spec.rb"},{"name":"#stock_item_or_create without stock item variant ID passed creates a stock_item if not found for a variant","suite":"Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_location_spec.rb"},{"name":"#stock_item_or_create without stock item variant ID passed example at ./spec/models/spree/stock_location_spec.rb:145","suite":"Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1:2:2\"}}","suiteSourceFile":"core/spec/models/spree/stock_location_spec.rb"},{"name":"#stock_item_or_create with stock item variant instance passed example at ./spec/models/spree/stock_location_spec.rb:154","suite":"Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_location_spec.rb"},{"name":"#stock_item_or_create with stock item variant instance passed example at ./spec/models/spree/stock_location_spec.rb:155","suite":"Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2:1:2\"}}","suiteSourceFile":"core/spec/models/spree/stock_location_spec.rb"},{"name":"#stock_item_or_create with stock item variant ID passed example at ./spec/models/spree/stock_location_spec.rb:159","suite":"Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_location_spec.rb"},{"name":"#stock_item_or_create with stock item variant ID passed example at ./spec/models/spree/stock_location_spec.rb:160","suite":"Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2:2:2\"}}","suiteSourceFile":"core/spec/models/spree/stock_location_spec.rb"},{"name":"fill_status all on_hand with no backordered","suite":"Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_location_spec.rb"},{"name":"fill_status some on_hand with some backordered","suite":"Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:2\"}}","suiteSourceFile":"core/spec/models/spree/stock_location_spec.rb"},{"name":"fill_status zero on_hand with all backordered","suite":"Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:3\"}}","suiteSourceFile":"core/spec/models/spree/stock_location_spec.rb"},{"name":"fill_status when backordering is not allowed all on_hand","suite":"Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:4:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_location_spec.rb"},{"name":"fill_status when backordering is not allowed some on_hand","suite":"Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:4:2\"}}","suiteSourceFile":"core/spec/models/spree/stock_location_spec.rb"},{"name":"fill_status when backordering is not allowed zero on_hand","suite":"Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:4:3\"}}","suiteSourceFile":"core/spec/models/spree/stock_location_spec.rb"},{"name":"fill_status without stock_items zero on_hand and one backordered","suite":"Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:5:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_location_spec.rb"},{"name":"#state_text state is blank example at ./spec/models/spree/stock_location_spec.rb:286","suite":"Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:1:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_location_spec.rb"},{"name":"#state_text both name and abbr is present example at ./spec/models/spree/stock_location_spec.rb:294","suite":"Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:2:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_location_spec.rb"},{"name":"#state_text only name is present example at ./spec/models/spree/stock_location_spec.rb:302","suite":"Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:3:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_location_spec.rb"},{"name":"#conditionally_touch_records active has changed example at ./spec/models/spree/stock_location_spec.rb:311","suite":"Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:17:1:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_location_spec.rb"},{"name":"#conditionally_touch_records active has changed example at ./spec/models/spree/stock_location_spec.rb:312","suite":"Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:17:1:2\"}}","suiteSourceFile":"core/spec/models/spree/stock_location_spec.rb"},{"name":"#conditionally_touch_records active has not changed example at ./spec/models/spree/stock_location_spec.rb:316","suite":"Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:17:2:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_location_spec.rb"},{"name":"#address returns Spree::Address instance","suite":"Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_location_spec.rb"},{"name":"#display_name returns the name","suite":"Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_location_spec.rb"},{"name":"#display_name with admin name set returns the admin name","suite":"Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:2:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_location_spec.rb"},{"name":"#country_name returns the country name","suite":"Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:20:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_location_spec.rb"},{"name":"product.out_of_stock event publishes product.out_of_stock when product goes out of stock","suite":"Spree::StockMovement::CustomEvents at ./spec/models/spree/stock_movement/custom_events_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_movement/custom_events_spec.rb"},{"name":"product.out_of_stock event does not publish when product still has stock","suite":"Spree::StockMovement::CustomEvents at ./spec/models/spree/stock_movement/custom_events_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/stock_movement/custom_events_spec.rb"},{"name":"product.out_of_stock event does not publish when product was already out of stock","suite":"Spree::StockMovement::CustomEvents at ./spec/models/spree/stock_movement/custom_events_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/models/spree/stock_movement/custom_events_spec.rb"},{"name":"product.back_in_stock event publishes product.back_in_stock when product comes back in stock","suite":"Spree::StockMovement::CustomEvents at ./spec/models/spree/stock_movement/custom_events_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_movement/custom_events_spec.rb"},{"name":"product.back_in_stock event does not publish when product was already in stock","suite":"Spree::StockMovement::CustomEvents at ./spec/models/spree/stock_movement/custom_events_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","suiteSourceFile":"core/spec/models/spree/stock_movement/custom_events_spec.rb"},{"name":"when events are disabled does not publish any events","suite":"Spree::StockMovement::CustomEvents at ./spec/models/spree/stock_movement/custom_events_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_movement/custom_events_spec.rb"},{"name":"lifecycle events stock_movement.created publishes created event when record is created","suite":"Spree::StockMovement at ./spec/models/spree/stock_movement_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_movement_spec.rb"},{"name":"Constants QUANTITY_LIMITS[:max] return 2**31 - 1","suite":"Spree::StockMovement at ./spec/models/spree/stock_movement_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_movement_spec.rb"},{"name":"Constants QUANTITY_LIMITS[:min] return -2**31","suite":"Spree::StockMovement at ./spec/models/spree/stock_movement_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_movement_spec.rb"},{"name":"validations does not allow quantity that is less than the stock item's count on hand","suite":"Spree::StockMovement at ./spec/models/spree/stock_movement_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_movement_spec.rb"},{"name":"validations allows the negative quantity for a backorderable stock item","suite":"Spree::StockMovement at ./spec/models/spree/stock_movement_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","suiteSourceFile":"core/spec/models/spree/stock_movement_spec.rb"},{"name":"Scope .recent orders chronologically by created at","suite":"Spree::StockMovement at ./spec/models/spree/stock_movement_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_movement_spec.rb"},{"name":"whitelisted ransackable attributes returns amount attribute","suite":"Spree::StockMovement at ./spec/models/spree/stock_movement_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_movement_spec.rb"},{"name":"Instance Methods .product example at ./spec/models/spree/stock_movement_spec.rb:69","suite":"Spree::StockMovement at ./spec/models/spree/stock_movement_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_movement_spec.rb"},{"name":"Instance Methods .variant example at ./spec/models/spree/stock_movement_spec.rb:73","suite":"Spree::StockMovement at ./spec/models/spree/stock_movement_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_movement_spec.rb"},{"name":"Instance Methods #readonly? does not update a persisted record","suite":"Spree::StockMovement at ./spec/models/spree/stock_movement_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:3:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_movement_spec.rb"},{"name":"Instance Methods #update_stock_item_quantity when track inventory levels is false does not update count on hand","suite":"Spree::StockMovement at ./spec/models/spree/stock_movement_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:4:1:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_movement_spec.rb"},{"name":"Instance Methods #update_stock_item_quantity when track inventory tracking is off does not update count on hand","suite":"Spree::StockMovement at ./spec/models/spree/stock_movement_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:4:2:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_movement_spec.rb"},{"name":"Instance Methods #update_stock_item_quantity when quantity is negative decrements the stock item count on hand","suite":"Spree::StockMovement at ./spec/models/spree/stock_movement_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:4:3:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_movement_spec.rb"},{"name":"Instance Methods #update_stock_item_quantity when quantity is positive increments the stock item count on hand","suite":"Spree::StockMovement at ./spec/models/spree/stock_movement_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:4:4:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_movement_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:4","suite":"Spree::StockTransfer at ./spec/models/spree/stock_transfer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_transfer_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:5","suite":"Spree::StockTransfer at ./spec/models/spree/stock_transfer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/stock_transfer_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:7","suite":"Spree::StockTransfer at ./spec/models/spree/stock_transfer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/models/spree/stock_transfer_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:8","suite":"Spree::StockTransfer at ./spec/models/spree/stock_transfer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","suiteSourceFile":"core/spec/models/spree/stock_transfer_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:10","suite":"Spree::StockTransfer at ./spec/models/spree/stock_transfer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","suiteSourceFile":"core/spec/models/spree/stock_transfer_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:11","suite":"Spree::StockTransfer at ./spec/models/spree/stock_transfer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","suiteSourceFile":"core/spec/models/spree/stock_transfer_spec.rb"},{"name":"behaves like metadata reads data as symbolized keys","suite":"Spree::StockTransfer at ./spec/models/spree/stock_transfer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7\"}}","suiteSourceFile":"core/spec/models/spree/stock_transfer_spec.rb"},{"name":"behaves like metadata reads data as not symbolized keys","suite":"Spree::StockTransfer at ./spec/models/spree/stock_transfer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8\"}}","suiteSourceFile":"core/spec/models/spree/stock_transfer_spec.rb"},{"name":"behaves like metadata can query records by metadata properties","suite":"Spree::StockTransfer at ./spec/models/spree/stock_transfer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:10\"}}","suiteSourceFile":"core/spec/models/spree/stock_transfer_spec.rb"},{"name":"behaves like lifecycle events lifecycle events stock_transfer.created publishes created event when record is created","suite":"Spree::StockTransfer at ./spec/models/spree/stock_transfer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_transfer_spec.rb"},{"name":"behaves like lifecycle events lifecycle events stock_transfer.updated publishes updated event when record is updated","suite":"Spree::StockTransfer at ./spec/models/spree/stock_transfer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_transfer_spec.rb"},{"name":"behaves like lifecycle events lifecycle events stock_transfer.deleted publishes deleted event when record is deleted","suite":"Spree::StockTransfer at ./spec/models/spree/stock_transfer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_transfer_spec.rb"},{"name":"#reference example at ./spec/models/spree/stock_transfer_spec.rb:25","suite":"Spree::StockTransfer at ./spec/models/spree/stock_transfer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_transfer_spec.rb"},{"name":"#to_param example at ./spec/models/spree/stock_transfer_spec.rb:31","suite":"Spree::StockTransfer at ./spec/models/spree/stock_transfer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_transfer_spec.rb"},{"name":"#transfer transfers variants between 2 locations","suite":"Spree::StockTransfer at ./spec/models/spree/stock_transfer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_transfer_spec.rb"},{"name":"#transfer when variants are not available in the source location does not transfer the variants","suite":"Spree::StockTransfer at ./spec/models/spree/stock_transfer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_transfer_spec.rb"},{"name":"#transfer when variants are empty does not transfer the variants","suite":"Spree::StockTransfer at ./spec/models/spree/stock_transfer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_transfer_spec.rb"},{"name":"#transfer when variants are nil does not transfer the variants","suite":"Spree::StockTransfer at ./spec/models/spree/stock_transfer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:4:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_transfer_spec.rb"},{"name":"#receive receives new inventory (from a vendor)","suite":"Spree::StockTransfer at ./spec/models/spree/stock_transfer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_transfer_spec.rb"},{"name":"#validations checks if source location and destination location are the same","suite":"Spree::StockTransfer at ./spec/models/spree/stock_transfer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","suiteSourceFile":"core/spec/models/spree/stock_transfer_spec.rb"},{"name":"callbacks store credit category is not used in store credit can delete store credit category","suite":"StoreCreditCategory at ./spec/models/spree/store_credit_category_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_category_spec.rb"},{"name":"callbacks store credit category is used in store credit can not delete store credit category","suite":"StoreCreditCategory at ./spec/models/spree/store_credit_category_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_category_spec.rb"},{"name":"#display_amount returns a Spree::Money instance","suite":"StoreCreditEvent at ./spec/models/spree/store_credit_event_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_event_spec.rb"},{"name":"#display_amount uses the events amount attribute","suite":"StoreCreditEvent at ./spec/models/spree/store_credit_event_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_event_spec.rb"},{"name":"#display_user_total_amount returns a Spree::Money instance","suite":"StoreCreditEvent at ./spec/models/spree/store_credit_event_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_event_spec.rb"},{"name":"#display_user_total_amount uses the events user_total_amount attribute","suite":"StoreCreditEvent at ./spec/models/spree/store_credit_event_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_event_spec.rb"},{"name":"#display_action capture event returns used","suite":"StoreCreditEvent at ./spec/models/spree/store_credit_event_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_event_spec.rb"},{"name":"#display_action authorize event returns authorized","suite":"StoreCreditEvent at ./spec/models/spree/store_credit_event_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_event_spec.rb"},{"name":"#display_action allocation event returns added","suite":"StoreCreditEvent at ./spec/models/spree/store_credit_event_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_event_spec.rb"},{"name":"#display_action void event returns credit","suite":"StoreCreditEvent at ./spec/models/spree/store_credit_event_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_event_spec.rb"},{"name":"#display_action credit event returns credit","suite":"StoreCreditEvent at ./spec/models/spree/store_credit_event_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:5:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_event_spec.rb"},{"name":"#order there is no associated payment with the event returns nil","suite":"StoreCreditEvent at ./spec/models/spree/store_credit_event_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_event_spec.rb"},{"name":"#order there is an associated payment with the event returns the order associated with the payment","suite":"StoreCreditEvent at ./spec/models/spree/store_credit_event_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_event_spec.rb"},{"name":"#store example at ./spec/models/spree/store_credit_event_spec.rb:112","suite":"StoreCreditEvent at ./spec/models/spree/store_credit_event_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_event_spec.rb"},{"name":"#allocation? action is allocation example at ./spec/models/spree/store_credit_event_spec.rb:122","suite":"StoreCreditEvent at ./spec/models/spree/store_credit_event_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_event_spec.rb"},{"name":"#allocation? action is not allocation example at ./spec/models/spree/store_credit_event_spec.rb:127","suite":"StoreCreditEvent at ./spec/models/spree/store_credit_event_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_event_spec.rb"},{"name":"#credit? action is credit example at ./spec/models/spree/store_credit_event_spec.rb:138","suite":"StoreCreditEvent at ./spec/models/spree/store_credit_event_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_event_spec.rb"},{"name":"#credit? action is not credit example at ./spec/models/spree/store_credit_event_spec.rb:143","suite":"StoreCreditEvent at ./spec/models/spree/store_credit_event_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_event_spec.rb"},{"name":"#captured? action is capture example at ./spec/models/spree/store_credit_event_spec.rb:154","suite":"StoreCreditEvent at ./spec/models/spree/store_credit_event_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_event_spec.rb"},{"name":"#captured? action is not capture example at ./spec/models/spree/store_credit_event_spec.rb:159","suite":"StoreCreditEvent at ./spec/models/spree/store_credit_event_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_event_spec.rb"},{"name":"#voided? action is void example at ./spec/models/spree/store_credit_event_spec.rb:170","suite":"StoreCreditEvent at ./spec/models/spree/store_credit_event_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_event_spec.rb"},{"name":"#voided? action is not void example at ./spec/models/spree/store_credit_event_spec.rb:175","suite":"StoreCreditEvent at ./spec/models/spree/store_credit_event_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:2:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_event_spec.rb"},{"name":"#authorized? action is authorize example at ./spec/models/spree/store_credit_event_spec.rb:186","suite":"StoreCreditEvent at ./spec/models/spree/store_credit_event_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_event_spec.rb"},{"name":"#authorized? action is not authorize example at ./spec/models/spree/store_credit_event_spec.rb:191","suite":"StoreCreditEvent at ./spec/models/spree/store_credit_event_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:2:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_event_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:4","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:5","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:7","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:8","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:10","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:11","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"behaves like metadata reads data as symbolized keys","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"behaves like metadata reads data as not symbolized keys","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"behaves like metadata can query records by metadata properties","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:10\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"behaves like lifecycle events lifecycle events store_credit.created publishes created event when record is created","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"behaves like lifecycle events lifecycle events store_credit.updated publishes updated event when record is updated","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"behaves like lifecycle events lifecycle events store_credit.deleted publishes deleted event when record is deleted","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"callbacks amount used is greater than zero can not delete the store credit","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"validations used amount should not be greater than the credited amount the used amount is defined is not valid","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"validations used amount should not be greater than the credited amount the used amount is defined sets the correct error message","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"validations used amount should not be greater than the credited amount the used amount is not defined yet is valid","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"validations amount used less than or equal to amount is not valid","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"validations amount used less than or equal to amount adds an error message about the invalid amount used","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:2\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"validations amount authorized less than or equal to amount is not valid","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"validations amount authorized less than or equal to amount adds an error message about the invalid authorized amount","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3:2\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"#display_amount returns a Spree::Money instance","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"#display_amount_used returns a Spree::Money instance","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"#amount_remaining the amount_used is not defined the authorized amount is not defined returns the credited amount","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"#amount_remaining the amount_used is not defined the authorized amount is defined subtracts the authorized amount from the credited amount","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"#amount_remaining the amount_used is defined the authorized amount is not defined subtracts the amount used from the credited amount","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"#amount_remaining the amount_used is defined the authorized amount is defined subtracts the amount used and the authorized amount from the credited amount","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"#authorize amount is valid amount has not been authorized yet returns true","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"#authorize amount is valid amount has not been authorized yet adds the new amount to authorized amount","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"#authorize amount is valid amount has not been authorized yet originator is present records the originator","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"#authorize amount is valid authorization has already happened returns true","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"#authorize amount is invalid returns false","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"#validate_authorization insufficient funds returns false","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"#validate_authorization insufficient funds adds an error to the model","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1:2\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"#validate_authorization currency mismatch returns false","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:2:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"#validate_authorization currency mismatch adds an error to the model","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:2:2\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"#validate_authorization valid authorization returns true","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:3:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"#validate_authorization troublesome floats returns true","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:4:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"#capture insufficient funds returns false","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"#capture insufficient funds adds an error to the model","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1:2\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"#capture insufficient funds does not update the store credit model","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1:3\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"#capture currency mismatch returns false","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:2:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"#capture currency mismatch adds an error to the model","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:2:2\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"#capture currency mismatch does not update the store credit model","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:2:3\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"#capture valid capture returns true","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:3:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"#capture valid capture updates the authorized amount to the difference between the captured amount and the authorized amount","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:3:2\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"#capture valid capture updates the used amount to the current used amount plus the captured amount","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:3:3\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"#capture valid capture originator is present records the originator","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:3:4:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"#void no event found for auth_code returns false","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"#void no event found for auth_code adds an error to the model","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1:2\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"#void capture event found for auth_code returns false","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"#void capture event found for auth_code does not change the amount used on the store credit","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2:2\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"#void auth event found for auth_code returns true","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:3:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"#void auth event found for auth_code returns the capture amount to the store credit","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:3:2\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"#void auth event found for auth_code originator is present records the originator","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:3:3:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"#credit currency does not match returns false","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:1:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"#credit currency does not match adds an error message about the currency mismatch","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:1:2\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"#credit unable to find capture event returns false","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:2:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"#credit unable to find capture event adds an error message about the currency mismatch","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:2:2\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"#credit amount is more than what is captured returns false","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:3:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"#credit amount is more than what is captured adds an error message about the currency mismatch","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:3:2\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"#credit amount is successfully credited credit_to_new_allocation is set returns true","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:4:1:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"#credit amount is successfully credited credit_to_new_allocation is set creates a new store credit record","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:4:1:2\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"#credit amount is successfully credited credit_to_new_allocation is set does not create a new store credit event on the parent store credit","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:4:1:3\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"#credit amount is successfully credited credit_to_new_allocation is set credits the passed amount to a new store credit record does not set the amount used on the originating store credit","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:4:1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"#credit amount is successfully credited credit_to_new_allocation is set credits the passed amount to a new store credit record sets the correct amount on the new store credit","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:4:1:4:2\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"#credit amount is successfully credited credit_to_new_allocation is set credits the passed amount to a new store credit record sets attribute user_id inherited from the originating store credit","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:4:1:4:3\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"#credit amount is successfully credited credit_to_new_allocation is set credits the passed amount to a new store credit record sets attribute category_id inherited from the originating store credit","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:4:1:4:4\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"#credit amount is successfully credited credit_to_new_allocation is set credits the passed amount to a new store credit record sets attribute created_by_id inherited from the originating store credit","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:4:1:4:5\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"#credit amount is successfully credited credit_to_new_allocation is set credits the passed amount to a new store credit record sets attribute currency inherited from the originating store credit","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:4:1:4:6\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"#credit amount is successfully credited credit_to_new_allocation is set credits the passed amount to a new store credit record sets attribute type_id inherited from the originating store credit","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:4:1:4:7\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"#credit amount is successfully credited credit_to_new_allocation is set credits the passed amount to a new store credit record sets a memo","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:4:1:4:8\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"#credit amount is successfully credited credit_to_new_allocation is set originator is present records the originator","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:4:1:5:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"#credit amount is successfully credited credit_to_new_allocation is not set returns true","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:4:2:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"#credit amount is successfully credited credit_to_new_allocation is not set credits the passed amount to the store credit amount used","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:4:2:2\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"#credit amount is successfully credited credit_to_new_allocation is not set creates a new store credit event","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:4:2:3\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"#amount_used amount used is not defined returns zero","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:1:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"#amount_used amount used is defined returns the attribute value","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:2:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"#amount_authorized amount authorized is not defined returns zero","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:1:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"#amount_authorized amount authorized is defined returns the attribute value","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:2:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"#can_capture? pending payment returns true","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:1:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"#can_capture? checkout payment returns true","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:2:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"#can_capture? void payment returns false","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:3:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"#can_capture? invalid payment returns false","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:4:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"#can_capture? complete payment returns false","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:5:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"#can_void? pending payment returns true","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:1:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"#can_void? remove store credits when payment is in checkout and order is not completed example at ./spec/models/spree/store_credit_spec.rb:633","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"#can_void? remove store credits when order is completed example at ./spec/models/spree/store_credit_spec.rb:639","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"#can_void? remove store credits when payment is completed example at ./spec/models/spree/store_credit_spec.rb:645","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:2:3:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"#can_void? void payment returns false","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:3:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"#can_void? invalid payment returns false","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:4:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"#can_void? complete payment returns false","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:5:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"#can_credit? payment is not completed returns false","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:17:1:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"#can_credit? payment is completed credit is owed on the order payment doesn't have allowed credit returns false","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:17:2:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"#can_credit? payment is completed credit is owed on the order payment has allowed credit returns true","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:17:2:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"#can_credit? #store_events create user has one store credit creates a store credit event","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:17:3:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"#can_credit? #store_events create user has one store credit makes the store credit event an allocation event","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:17:3:1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"#can_credit? #store_events create user has one store credit saves the user's total store credit in the event","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:17:3:1:1:3\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"#can_credit? #store_events create user has multiple store credits saves the user's total store credit in the event","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:17:3:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"#can_credit? #store_events create an action is specified creates an event with the set action","suite":"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:17:3:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/store_credit_spec.rb"},{"name":"validations validates image properties","suite":"Spree::StoreFaviconImage at ./spec/models/spree/store_favicon_image_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/store_favicon_image_spec.rb"},{"name":"validations file size when size is 1 megabyte is valid","suite":"Spree::StoreFaviconImage at ./spec/models/spree/store_favicon_image_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/store_favicon_image_spec.rb"},{"name":"validations file size when size is over 1 megabyte is invalid","suite":"Spree::StoreFaviconImage at ./spec/models/spree/store_favicon_image_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/store_favicon_image_spec.rb"},{"name":"#refresh_metrics! when there are no completed orders sets statistics to zero","suite":"Spree::StoreProduct at ./spec/models/spree/store_product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/store_product_spec.rb"},{"name":"#refresh_metrics! when there are completed orders calculates units_sold_count from line item quantities","suite":"Spree::StoreProduct at ./spec/models/spree/store_product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/store_product_spec.rb"},{"name":"#refresh_metrics! when there are completed orders calculates revenue from line item pre_tax_amount","suite":"Spree::StoreProduct at ./spec/models/spree/store_product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2\"}}","suiteSourceFile":"core/spec/models/spree/store_product_spec.rb"},{"name":"#refresh_metrics! when orders are from different stores only counts statistics from the specific store","suite":"Spree::StoreProduct at ./spec/models/spree/store_product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/store_product_spec.rb"},{"name":"#refresh_metrics! when orders have multiple line items with different quantities sums quantities for units_sold_count","suite":"Spree::StoreProduct at ./spec/models/spree/store_product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/store_product_spec.rb"},{"name":"#refresh_metrics! when orders have multiple line items with different quantities uses pre_tax_amount for revenue","suite":"Spree::StoreProduct at ./spec/models/spree/store_product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:2\"}}","suiteSourceFile":"core/spec/models/spree/store_product_spec.rb"},{"name":"#refresh_metrics! when product has variants includes orders with product variants in statistics","suite":"Spree::StoreProduct at ./spec/models/spree/store_product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5:1\"}}","suiteSourceFile":"core/spec/models/spree/store_product_spec.rb"},{"name":"#refresh_metrics! when there are multiple line items across orders sums all quantities across orders","suite":"Spree::StoreProduct at ./spec/models/spree/store_product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6:1\"}}","suiteSourceFile":"core/spec/models/spree/store_product_spec.rb"},{"name":"#refresh_metrics! when there are multiple line items across orders sums all pre_tax_amounts across orders","suite":"Spree::StoreProduct at ./spec/models/spree/store_product_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6:2\"}}","suiteSourceFile":"core/spec/models/spree/store_product_spec.rb"},{"name":"Associations #products example at ./spec/models/spree/store_spec.rb:19","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":"Associations #products #product_properties example at ./spec/models/spree/store_spec.rb:25","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":"Associations #products #variants example at ./spec/models/spree/store_spec.rb:32","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":"Associations #products #variants #stock_items example at ./spec/models/spree/store_spec.rb:38","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:2:1\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":"Associations #products #variants #stock_items example at ./spec/models/spree/store_spec.rb:39","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:2:2\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":"Associations #products #variants #stock_items example at ./spec/models/spree/store_spec.rb:40","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:2:3\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":"Associations #payment_methods example at ./spec/models/spree/store_spec.rb:49","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":"Associations #orders example at ./spec/models/spree/store_spec.rb:56","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":"Associations #orders #line_items example at ./spec/models/spree/store_spec.rb:62","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:2:1\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":"Associations #orders #payments example at ./spec/models/spree/store_spec.rb:69","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:3:1\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":"Associations #orders #shipments example at ./spec/models/spree/store_spec.rb:76","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:4:1\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":"Associations #orders #return_authorizations example at ./spec/models/spree/store_spec.rb:85","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:5:1\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":"Associations #orders #inventory_units example at ./spec/models/spree/store_spec.rb:94","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:6:1\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":"Associations #store_credits example at ./spec/models/spree/store_spec.rb:102","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":"Associations #store_credits #store_credit_events example at ./spec/models/spree/store_spec.rb:108","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:2:1\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":"Associations #store_credits #store_credit_events example at ./spec/models/spree/store_spec.rb:109","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:2:2\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":"Associations #store_credits #store_credit_events example at ./spec/models/spree/store_spec.rb:110","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:2:3\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":"Associations #promotions example at ./spec/models/spree/store_spec.rb:118","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5:1\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":"Callbacks #set_code sets the code","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":"Callbacks #set_code when code is already set does not change the code","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":"Callbacks #set_code when name is not set does not set the code","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":"Callbacks #set_code when code is already taken generates a new code","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":"Callbacks #set_code #create_default_policies creates default policies","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:5:1\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":"Callbacks #set_code #create_default_policies is idempotent - does not create duplicates when called multiple times","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:5:2\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":"Callbacks #set_code #create_default_policies with non-English store locale creates policies with translated names in store locale","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:5:3:1\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":"Callbacks #set_url on create sets url","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":"Callbacks #set_url on update code change update url updates url but keep old one","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":"Callbacks #ensure_default_taxonomies_are_created creates default taxonomies","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:1\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":"Callbacks #ensure_default_taxonomies_are_created is idempotent - does not create duplicates when called multiple times","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:2\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":"Callbacks #ensure_default_taxonomies_are_created with non-English store locale creates taxonomies with translated names in store locale","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:3:1\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":"Callbacks #ensure_default_taxonomies_are_created with non-English store locale falls back to English when translation is missing","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:3:2\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":"Callbacks #ensure_default_automatic_taxons creates automatic taxons on the collections taxonomy","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:4:1\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":"Callbacks #ensure_default_automatic_taxons is idempotent - does not create duplicates when called multiple times","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:4:2\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":"Callbacks #ensure_default_post_categories_are_created creates default post categories","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:5:1\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":"Callbacks #ensure_default_post_categories_are_created is idempotent - does not create duplicates when called multiple times","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:5:2\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":"Callbacks #import_products_from_store imports products from other store","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:6:1\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":"Callbacks #import_payment_methods_from_store imports payment methods from other store","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:7:1\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":"Validations #code cannot create 2 stores with the same code","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":"Validations #code cannot create a store with reserved code","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:2\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":"Translations translates store fields","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":".by_url finds stores by url","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":".current returns default when no domain","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":".current returns store for domain","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":".default when a default store is already present returns the already existing default store","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1:1\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":".default when a default store is already present ensures there is a default if one doesn't exist yet","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1:2\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":".default when a default store is already present ensures there is only one default","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1:3\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":".default when a default store is already present when store is not saved ensure old default location still default","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":".default when a default store is not present builds a new default store","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2:1\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":".default when a default store is not present does not persist the original default store","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2:2\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":".available_locales example at ./spec/models/spree/store_spec.rb:479","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":"#countries_available_for_checkout returns country list for checkout zone","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1:1\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":"#countries_available_for_checkout returns list of all countries","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:2:1\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":"#states_available_for_checkout returns states list for checkout zone","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1:1\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":"#states_available_for_checkout returns list of states associated to country","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":"#ensure_default_country checkout zone not set example at ./spec/models/spree/store_spec.rb:572","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1:2\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":"#ensure_default_country checkout zone not set with default country example at ./spec/models/spree/store_spec.rb:569","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":"#ensure_default_country checkout zone set with default country set no zone members example at ./spec/models/spree/store_spec.rb:592","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":"#ensure_default_country checkout zone set with default country set default country is a zone member example at ./spec/models/spree/store_spec.rb:601","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":"#ensure_default_country checkout zone set with default country set default country is not a zone member example at ./spec/models/spree/store_spec.rb:607","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":"#ensure_default_country checkout zone set without default country set no zone members example at ./spec/models/spree/store_spec.rb:618","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":"#ensure_default_country checkout zone set without default country set with zone members example at ./spec/models/spree/store_spec.rb:624","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":"#default_country_iso= when country is not found sets the default country","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:1:1\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":"#default_country_iso= when country is found sets the default country","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:2:1\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":"#unique_name returns the Store Name followed by the Store Code in parentheses","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:1\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":"#supported_currencies_list with supported currencies set returns supported currencies list","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:1:1\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":"#supported_currencies_list without supported currencies set returns supported currencies list","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:2:1\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":"#supported_locales_list with supported locale set returns supported currencies list","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:1:1\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":"#supported_locales_list without supported currencies set returns supported currencies list","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:2:1\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":"#ensure_supported_locales store with default_locale example at ./spec/models/spree/store_spec.rb:709","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:1:1\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":"#ensure_supported_locales store without default locale example at ./spec/models/spree/store_spec.rb:715","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:2:1\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":"#ensure_supported_locales store with supported locales example at ./spec/models/spree/store_spec.rb:721","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:3:1\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":"#ensure_supported_currencies store with default_currency example at ./spec/models/spree/store_spec.rb:729","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:17:1:1\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":"#ensure_supported_currencies store with supported currencies example at ./spec/models/spree/store_spec.rb:735","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:17:2:1\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":"#favicon with an attached favicon image returns a resized favicon","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:1:1\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":"#favicon without an attached favicon image returns a blank favicon","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:2:1\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":"#can_be_deleted? cannot delete the only store","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:1\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":"#can_be_deleted? can delete when there are more than 1 stores","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:2\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":"soft deletion default store with multiple stores can be deleted","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:20:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":"soft deletion default store with multiple stores passes default flag to other store","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:20:1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":"soft deletion default store single store cannot be deleted","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:20:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":"soft deletion another store soft-deletes when destroy is called","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:20:2:1\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":"#default_stock_location with default stock location returns the default stock location","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:21:1:1\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":"#default_stock_location without default stock location creates a new default stock location","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:21:2:1\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":"#supported_shipping_zones with checkout zone set returns the checkout zone","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:22:1:1\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":"#supported_shipping_zones when checkout zone not set returns all shipping zones","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:22:2:1\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":"#formatted_url example at ./spec/models/spree/store_spec.rb:853","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:23:1\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":"#formatted_url url with port example at ./spec/models/spree/store_spec.rb:858","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:23:2:1\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":"#formatted_url on production example at ./spec/models/spree/store_spec.rb:864","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:23:3:1\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":"#formatted_url_or_custom_domain without custom domain example at ./spec/models/spree/store_spec.rb:872","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:24:1:1\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":"#formatted_url_or_custom_domain with custom domain example at ./spec/models/spree/store_spec.rb:878","suite":"Spree::Store at ./spec/models/spree/store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:24:2:1\"}}","suiteSourceFile":"core/spec/models/spree/store_spec.rb"},{"name":".subscribes_to registers subscription patterns","suite":"Spree::Subscriber at ./spec/models/spree/subscriber_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/subscriber_spec.rb"},{"name":".subscribes_to accepts multiple patterns","suite":"Spree::Subscriber at ./spec/models/spree/subscriber_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/subscriber_spec.rb"},{"name":".subscribes_to stores subscription options","suite":"Spree::Subscriber at ./spec/models/spree/subscriber_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/models/spree/subscriber_spec.rb"},{"name":".subscribes_to accumulates patterns from multiple calls","suite":"Spree::Subscriber at ./spec/models/spree/subscriber_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","suiteSourceFile":"core/spec/models/spree/subscriber_spec.rb"},{"name":".on maps events to methods","suite":"Spree::Subscriber at ./spec/models/spree/subscriber_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/subscriber_spec.rb"},{"name":"#call without event handlers calls the handle method","suite":"Spree::Subscriber at ./spec/models/spree/subscriber_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","suiteSourceFile":"core/spec/models/spree/subscriber_spec.rb"},{"name":"#call with event handlers routes to the correct handler","suite":"Spree::Subscriber at ./spec/models/spree/subscriber_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","suiteSourceFile":"core/spec/models/spree/subscriber_spec.rb"},{"name":"#call with event handlers falls back to handle when no matching handler","suite":"Spree::Subscriber at ./spec/models/spree/subscriber_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:2\"}}","suiteSourceFile":"core/spec/models/spree/subscriber_spec.rb"},{"name":".call creates an instance and calls it","suite":"Spree::Subscriber at ./spec/models/spree/subscriber_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/subscriber_spec.rb"},{"name":"integration receives events when registered","suite":"Spree::Subscriber at ./spec/models/spree/subscriber_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","suiteSourceFile":"core/spec/models/spree/subscriber_spec.rb"},{"name":"default tax category undefaults the previous default tax category","suite":"Spree::TaxCategory at ./spec/models/spree/tax_category_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/tax_category_spec.rb"},{"name":"default tax category undefaults the previous default tax category except when updating the existing default tax category","suite":"Spree::TaxCategory at ./spec/models/spree/tax_category_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/tax_category_spec.rb"},{"name":".default returns the default tax category","suite":"Spree::TaxCategory at ./spec/models/spree/tax_category_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/tax_category_spec.rb"},{"name":"#destroy removes all tax rates","suite":"Spree::TaxCategory at ./spec/models/spree/tax_category_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/tax_category_spec.rb"},{"name":"#destroy nullifies all products and variants","suite":"Spree::TaxCategory at ./spec/models/spree/tax_category_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","suiteSourceFile":"core/spec/models/spree/tax_category_spec.rb"},{"name":"match returns an empty array when tax_zone is nil","suite":"Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/tax_rate_spec.rb"},{"name":"match when no rate zones match the tax zone when there is no default tax zone returns an empty array","suite":"Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/tax_rate_spec.rb"},{"name":"match when no rate zones match the tax zone when there is no default tax zone returns the rate that matches the rate zone","suite":"Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1:2\"}}","suiteSourceFile":"core/spec/models/spree/tax_rate_spec.rb"},{"name":"match when no rate zones match the tax zone when there is no default tax zone returns all rates that match the rate zone","suite":"Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1:3\"}}","suiteSourceFile":"core/spec/models/spree/tax_rate_spec.rb"},{"name":"match when no rate zones match the tax zone when there is no default tax zone when the tax_zone is contained within a rate zone returns the rate zone","suite":"Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/tax_rate_spec.rb"},{"name":"match when no rate zones match the tax zone when there is a default tax zone when the order has the same tax zone when the tax is not a VAT example at ./spec/models/spree/tax_rate_spec.rb:109","suite":"Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/tax_rate_spec.rb"},{"name":"match when no rate zones match the tax zone when there is a default tax zone when the order has the same tax zone when the tax is a VAT example at ./spec/models/spree/tax_rate_spec.rb:115","suite":"Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/tax_rate_spec.rb"},{"name":"match when no rate zones match the tax zone when there is a default tax zone when the order has a different tax zone when the tax is a VAT return no tax rate","suite":"Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/tax_rate_spec.rb"},{"name":"match when no rate zones match the tax zone when there is a default tax zone when the order has a different tax zone when the tax is not VAT returns no tax rate","suite":"Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/tax_rate_spec.rb"},{"name":".adjust with line items applies adjustments for two tax rates to the order","suite":"Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/tax_rate_spec.rb"},{"name":".adjust without tax rates updates pre_tax_total to match line item cost if no taxes","suite":"Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/tax_rate_spec.rb"},{"name":".adjust with shipments applies adjustments for two tax rates to the order","suite":"Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:1\"}}","suiteSourceFile":"core/spec/models/spree/tax_rate_spec.rb"},{"name":".adjust for MOSS taxation in Europe a download without an address costs 100 euros including tax","suite":"Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:4:1:1\"}}","suiteSourceFile":"core/spec/models/spree/tax_rate_spec.rb"},{"name":".adjust for MOSS taxation in Europe a download to germany costs 100 euros including tax","suite":"Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:4:1:2\"}}","suiteSourceFile":"core/spec/models/spree/tax_rate_spec.rb"},{"name":".adjust for MOSS taxation in Europe a download to france costs more including tax","suite":"Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:4:1:3\"}}","suiteSourceFile":"core/spec/models/spree/tax_rate_spec.rb"},{"name":".adjust for MOSS taxation in Europe a download to somewhere else costs the net amount","suite":"Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:4:1:4\"}}","suiteSourceFile":"core/spec/models/spree/tax_rate_spec.rb"},{"name":".adjust for MOSS taxation in Europe a t-shirt to germany costs 100 euros including tax","suite":"Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:4:2:1\"}}","suiteSourceFile":"core/spec/models/spree/tax_rate_spec.rb"},{"name":".adjust for MOSS taxation in Europe a t-shirt to france costs 100 euros including tax","suite":"Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:4:2:2\"}}","suiteSourceFile":"core/spec/models/spree/tax_rate_spec.rb"},{"name":".adjust for MOSS taxation in Europe a t-shirt to somewhere else costs the net amount","suite":"Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:4:2:3\"}}","suiteSourceFile":"core/spec/models/spree/tax_rate_spec.rb"},{"name":".included_tax_amount_for will only get me tax amounts from tax_rates that match","suite":"Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/tax_rate_spec.rb"},{"name":"#adjust not taxable line item does not create a tax adjustment","suite":"Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1\"}}","suiteSourceFile":"core/spec/models/spree/tax_rate_spec.rb"},{"name":"#adjust not taxable line item does not create a refund","suite":"Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:2\"}}","suiteSourceFile":"core/spec/models/spree/tax_rate_spec.rb"},{"name":"#adjust taxable line item when price includes tax when zone is contained by default tax zone creates two adjustments, one for each tax rate","suite":"Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/tax_rate_spec.rb"},{"name":"#adjust taxable line item when price includes tax when zone is contained by default tax zone does not create a tax refund","suite":"Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/tax_rate_spec.rb"},{"name":"#adjust taxable line item when price includes tax when order's zone is neither the default zone, or included in the default zone, but matches the rate's zone creates an adjustment","suite":"Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/tax_rate_spec.rb"},{"name":"#adjust taxable line item when price includes tax when order's zone is neither the default zone, or included in the default zone, but matches the rate's zone does not create a tax refund for each tax rate","suite":"Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1:2:2\"}}","suiteSourceFile":"core/spec/models/spree/tax_rate_spec.rb"},{"name":"#adjust taxable line item when price includes tax when order's zone does not match default zone, is not included in the default zone, AND does not match the rate's zone does not create positive adjustments","suite":"Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/tax_rate_spec.rb"},{"name":"#adjust taxable line item when price includes tax when order's zone does not match default zone, is not included in the default zone, AND does not match the rate's zone does not create a tax refund for each tax rate","suite":"Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1:3:2\"}}","suiteSourceFile":"core/spec/models/spree/tax_rate_spec.rb"},{"name":"#adjust taxable line item when price includes tax when price does not include tax deletes adjustments for open order when taxrate is deleted","suite":"Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/tax_rate_spec.rb"},{"name":"#adjust taxable line item when price includes tax when price does not include tax does not delete adjustments for complete order when taxrate is deleted","suite":"Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1:4:2\"}}","suiteSourceFile":"core/spec/models/spree/tax_rate_spec.rb"},{"name":"#adjust taxable line item when price includes tax when price does not include tax creates an adjustment","suite":"Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1:4:3\"}}","suiteSourceFile":"core/spec/models/spree/tax_rate_spec.rb"},{"name":"#adjust taxable line item when price includes tax when price does not include tax does not create a tax refund","suite":"Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1:4:4\"}}","suiteSourceFile":"core/spec/models/spree/tax_rate_spec.rb"},{"name":"#adjust taxable line item when price includes tax when price does not include tax tax adjustments applies adjustments when a tax zone is present","suite":"Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1:4:5:1\"}}","suiteSourceFile":"core/spec/models/spree/tax_rate_spec.rb"},{"name":"#adjust taxable line item when price includes tax when price does not include tax tax adjustments when the tax zone is removed does not apply any adjustments","suite":"Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1:4:5:2:1\"}}","suiteSourceFile":"core/spec/models/spree/tax_rate_spec.rb"},{"name":"#adjust taxable line item when price includes tax when two rates apply creates two price adjustments","suite":"Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1:5:1\"}}","suiteSourceFile":"core/spec/models/spree/tax_rate_spec.rb"},{"name":"#adjust taxable line item when price includes tax when two rates apply price adjustments should be accurate","suite":"Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1:5:2\"}}","suiteSourceFile":"core/spec/models/spree/tax_rate_spec.rb"},{"name":"#label returns the name and amount for the tax rate","suite":"Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","suiteSourceFile":"core/spec/models/spree/tax_rate_spec.rb"},{"name":"#amount_for_label returns an empty string when the amount is 0","suite":"Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","suiteSourceFile":"core/spec/models/spree/tax_rate_spec.rb"},{"name":"#amount_for_label returns a string with the percentage when the amount is not 0","suite":"Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2\"}}","suiteSourceFile":"core/spec/models/spree/tax_rate_spec.rb"},{"name":"percentage conversion #amount_percentage converts decimal amount to percentage","suite":"Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1:1\"}}","suiteSourceFile":"core/spec/models/spree/tax_rate_spec.rb"},{"name":"percentage conversion #amount_percentage returns nil when amount is nil","suite":"Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1:2\"}}","suiteSourceFile":"core/spec/models/spree/tax_rate_spec.rb"},{"name":"percentage conversion #amount_percentage handles zero amount","suite":"Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1:3\"}}","suiteSourceFile":"core/spec/models/spree/tax_rate_spec.rb"},{"name":"percentage conversion #amount_percentage rounds to 2 decimal places","suite":"Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1:4\"}}","suiteSourceFile":"core/spec/models/spree/tax_rate_spec.rb"},{"name":"percentage conversion #amount_percentage= converts percentage to decimal amount","suite":"Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2:1\"}}","suiteSourceFile":"core/spec/models/spree/tax_rate_spec.rb"},{"name":"percentage conversion #amount_percentage= sets amount to nil when percentage is nil","suite":"Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2:2\"}}","suiteSourceFile":"core/spec/models/spree/tax_rate_spec.rb"},{"name":"percentage conversion #amount_percentage= sets amount to nil when percentage is empty string","suite":"Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2:3\"}}","suiteSourceFile":"core/spec/models/spree/tax_rate_spec.rb"},{"name":"percentage conversion #amount_percentage= handles zero percentage","suite":"Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2:4\"}}","suiteSourceFile":"core/spec/models/spree/tax_rate_spec.rb"},{"name":"percentage conversion #amount_percentage= handles string percentage values","suite":"Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2:5\"}}","suiteSourceFile":"core/spec/models/spree/tax_rate_spec.rb"},{"name":"validation has allowed attachment content type","suite":"Spree::TaxonImage at ./spec/models/spree/taxon_image_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/taxon_image_spec.rb"},{"name":"validation has no allowed attachment content type","suite":"Spree::TaxonImage at ./spec/models/spree/taxon_image_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/taxon_image_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:4","suite":"Spree::Taxon at ./spec/models/spree/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/taxon_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:5","suite":"Spree::Taxon at ./spec/models/spree/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/taxon_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:7","suite":"Spree::Taxon at ./spec/models/spree/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/models/spree/taxon_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:8","suite":"Spree::Taxon at ./spec/models/spree/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","suiteSourceFile":"core/spec/models/spree/taxon_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:10","suite":"Spree::Taxon at ./spec/models/spree/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","suiteSourceFile":"core/spec/models/spree/taxon_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:11","suite":"Spree::Taxon at ./spec/models/spree/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","suiteSourceFile":"core/spec/models/spree/taxon_spec.rb"},{"name":"behaves like metadata reads data as symbolized keys","suite":"Spree::Taxon at ./spec/models/spree/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7\"}}","suiteSourceFile":"core/spec/models/spree/taxon_spec.rb"},{"name":"behaves like metadata reads data as not symbolized keys","suite":"Spree::Taxon at ./spec/models/spree/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8\"}}","suiteSourceFile":"core/spec/models/spree/taxon_spec.rb"},{"name":"behaves like metadata can query records by metadata properties","suite":"Spree::Taxon at ./spec/models/spree/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:10\"}}","suiteSourceFile":"core/spec/models/spree/taxon_spec.rb"},{"name":"#to_param example at ./spec/models/spree/taxon_spec.rb:13","suite":"Spree::Taxon at ./spec/models/spree/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/taxon_spec.rb"},{"name":"Validations #check_for_root does not validate the taxon","suite":"Spree::Taxon at ./spec/models/spree/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","suiteSourceFile":"core/spec/models/spree/taxon_spec.rb"},{"name":"Validations #check_for_root validates the taxon","suite":"Spree::Taxon at ./spec/models/spree/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:2\"}}","suiteSourceFile":"core/spec/models/spree/taxon_spec.rb"},{"name":"Validations #parent_belongs_to_same_taxonomy does not validate the taxon","suite":"Spree::Taxon at ./spec/models/spree/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","suiteSourceFile":"core/spec/models/spree/taxon_spec.rb"},{"name":"Validations #parent_belongs_to_same_taxonomy validates the taxon","suite":"Spree::Taxon at ./spec/models/spree/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:2\"}}","suiteSourceFile":"core/spec/models/spree/taxon_spec.rb"},{"name":"Scopes .for_taxonomy when translations are disabled returns the correct taxon","suite":"Spree::Taxon at ./spec/models/spree/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/taxon_spec.rb"},{"name":"Scopes .for_taxonomy when translations are enabled returns the correct taxon","suite":"Spree::Taxon at ./spec/models/spree/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/taxon_spec.rb"},{"name":"Scopes .with_matching_name returns the taxon with the matching name","suite":"Spree::Taxon at ./spec/models/spree/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1\"}}","suiteSourceFile":"core/spec/models/spree/taxon_spec.rb"},{"name":"Scopes .with_matching_name with translations returns the taxon with the matching name","suite":"Spree::Taxon at ./spec/models/spree/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/taxon_spec.rb"},{"name":"callbacks regenerate_taxon_products when taxon's rules_match_policy changes calls #regenerate_taxon_products","suite":"Spree::Taxon at ./spec/models/spree/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/taxon_spec.rb"},{"name":"callbacks regenerate_taxon_products when taxon's rule changes calls #regenerate_taxon_products","suite":"Spree::Taxon at ./spec/models/spree/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/taxon_spec.rb"},{"name":"callbacks regenerate_taxon_products when rule is destroyed calls #regenerate_taxon_products","suite":"Spree::Taxon at ./spec/models/spree/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/taxon_spec.rb"},{"name":"callbacks regenerate_taxon_products when rule is created calls #regenerate_taxon_products","suite":"Spree::Taxon at ./spec/models/spree/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/taxon_spec.rb"},{"name":"when using another locale translates taxon fields","suite":"Spree::Taxon at ./spec/models/spree/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","suiteSourceFile":"core/spec/models/spree/taxon_spec.rb"},{"name":"set_permalink sets permalink correctly when no parent present","suite":"Spree::Taxon at ./spec/models/spree/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","suiteSourceFile":"core/spec/models/spree/taxon_spec.rb"},{"name":"set_permalink supports Chinese characters","suite":"Spree::Taxon at ./spec/models/spree/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2\"}}","suiteSourceFile":"core/spec/models/spree/taxon_spec.rb"},{"name":"set_permalink stores old slugs in FriendlyIds history","suite":"Spree::Taxon at ./spec/models/spree/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:3\"}}","suiteSourceFile":"core/spec/models/spree/taxon_spec.rb"},{"name":"set_permalink with parent taxon sets permalink correctly when taxon has parent","suite":"Spree::Taxon at ./spec/models/spree/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:4:1\"}}","suiteSourceFile":"core/spec/models/spree/taxon_spec.rb"},{"name":"set_permalink with parent taxon sets permalink correctly with existing permalink present","suite":"Spree::Taxon at ./spec/models/spree/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:4:2\"}}","suiteSourceFile":"core/spec/models/spree/taxon_spec.rb"},{"name":"set_permalink with parent taxon supports Chinese characters","suite":"Spree::Taxon at ./spec/models/spree/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:4:3\"}}","suiteSourceFile":"core/spec/models/spree/taxon_spec.rb"},{"name":"set_permalink with parent taxon setting a new node sibling position via :child_index= taxon is not new passes the desired index move_to_child_with_index of :parent","suite":"Spree::Taxon at ./spec/models/spree/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:4:4:1:1\"}}","suiteSourceFile":"core/spec/models/spree/taxon_spec.rb"},{"name":"creating a child node using first_or_create does not error out","suite":"Spree::Taxon at ./spec/models/spree/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1\"}}","suiteSourceFile":"core/spec/models/spree/taxon_spec.rb"},{"name":"ransackable_associations example at ./spec/models/spree/taxon_spec.rb:266","suite":"Spree::Taxon at ./spec/models/spree/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1\"}}","suiteSourceFile":"core/spec/models/spree/taxon_spec.rb"},{"name":"#cached_self_and_descendants_ids example at ./spec/models/spree/taxon_spec.rb:270","suite":"Spree::Taxon at ./spec/models/spree/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1\"}}","suiteSourceFile":"core/spec/models/spree/taxon_spec.rb"},{"name":"#copy_taxonomy_from_parent example at ./spec/models/spree/taxon_spec.rb:277","suite":"Spree::Taxon at ./spec/models/spree/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1\"}}","suiteSourceFile":"core/spec/models/spree/taxon_spec.rb"},{"name":"#copy_taxonomy_from_parent example at ./spec/models/spree/taxon_spec.rb:278","suite":"Spree::Taxon at ./spec/models/spree/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2\"}}","suiteSourceFile":"core/spec/models/spree/taxon_spec.rb"},{"name":"#sync_taxonomy_name when none root taxon name is updated does not update the taxonomy name","suite":"Spree::Taxon at ./spec/models/spree/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:1:1\"}}","suiteSourceFile":"core/spec/models/spree/taxon_spec.rb"},{"name":"#sync_taxonomy_name when root taxon name is updated updates the taxonomy name","suite":"Spree::Taxon at ./spec/models/spree/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:2:1\"}}","suiteSourceFile":"core/spec/models/spree/taxon_spec.rb"},{"name":"#sync_taxonomy_name when root taxon name is updated with special characters updates the taxonomy name","suite":"Spree::Taxon at ./spec/models/spree/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:3:1\"}}","suiteSourceFile":"core/spec/models/spree/taxon_spec.rb"},{"name":"#sync_taxonomy_name when root taxon attribute other than name is updated does not update the taxonomy","suite":"Spree::Taxon at ./spec/models/spree/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:4:1\"}}","suiteSourceFile":"core/spec/models/spree/taxon_spec.rb"},{"name":"#localized_slugs_for_store when there are slugs in locales not supported by the store returns only slugs in locales supported by the store","suite":"Spree::Taxon at ./spec/models/spree/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:1:1\"}}","suiteSourceFile":"core/spec/models/spree/taxon_spec.rb"},{"name":"#localized_slugs_for_store when one of the supported locales does not have a translation falls back to store's default locale","suite":"Spree::Taxon at ./spec/models/spree/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:2:1\"}}","suiteSourceFile":"core/spec/models/spree/taxon_spec.rb"},{"name":"#localized_slugs_for_store when setting the slug translations for taxonomy sets the slugs in slug format","suite":"Spree::Taxon at ./spec/models/spree/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:3:1\"}}","suiteSourceFile":"core/spec/models/spree/taxon_spec.rb"},{"name":"#localized_slugs_for_store when setting the slugs in taxon under taxomony with different parent slug sets the slug in valid format","suite":"Spree::Taxon at ./spec/models/spree/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:4:1\"}}","suiteSourceFile":"core/spec/models/spree/taxon_spec.rb"},{"name":"#regenerate_pretty_name_and_permalink regenerates pretty name and permalink","suite":"Spree::Taxon at ./spec/models/spree/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:1\"}}","suiteSourceFile":"core/spec/models/spree/taxon_spec.rb"},{"name":"#regenerate_pretty_name_and_permalink when parent's permalink is changed updates the pretty name and permalink","suite":"Spree::Taxon at ./spec/models/spree/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:2:1\"}}","suiteSourceFile":"core/spec/models/spree/taxon_spec.rb"},{"name":"#regenerate_pretty_name_and_permalink when parent name is changed updates the pretty name and permalink","suite":"Spree::Taxon at ./spec/models/spree/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:3:1\"}}","suiteSourceFile":"core/spec/models/spree/taxon_spec.rb"},{"name":"#regenerate_pretty_name_and_permalink with translations updates the pretty name and permalink for translations as well","suite":"Spree::Taxon at ./spec/models/spree/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:4:1\"}}","suiteSourceFile":"core/spec/models/spree/taxon_spec.rb"},{"name":"#regenerate_pretty_name_and_permalink when taxon is moved updates the pretty name and permalink","suite":"Spree::Taxon at ./spec/models/spree/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:5:1\"}}","suiteSourceFile":"core/spec/models/spree/taxon_spec.rb"},{"name":"#regenerate_pretty_name_and_permalink when taxon is moved updates the pretty name and permalink when move is done inside different locales","suite":"Spree::Taxon at ./spec/models/spree/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:5:2\"}}","suiteSourceFile":"core/spec/models/spree/taxon_spec.rb"},{"name":"#pretty_name 1 lvl deep returns taxonomy name and taxon name","suite":"Spree::Taxon at ./spec/models/spree/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:1:1\"}}","suiteSourceFile":"core/spec/models/spree/taxon_spec.rb"},{"name":"#pretty_name 2+ lvl deep returns parent name and taxon name","suite":"Spree::Taxon at ./spec/models/spree/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:2:1\"}}","suiteSourceFile":"core/spec/models/spree/taxon_spec.rb"},{"name":"#pretty_name 2+ lvl deep when name is updated returns the updated pretty name","suite":"Spree::Taxon at ./spec/models/spree/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/taxon_spec.rb"},{"name":"#pretty_name 2+ lvl deep when parent name is updated returns the updated pretty name","suite":"Spree::Taxon at ./spec/models/spree/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:2:3:1\"}}","suiteSourceFile":"core/spec/models/spree/taxon_spec.rb"},{"name":"#pretty_name when `always_use_translations` is disabled sets the pretty name","suite":"Spree::Taxon at ./spec/models/spree/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:3:1\"}}","suiteSourceFile":"core/spec/models/spree/taxon_spec.rb"},{"name":"#pretty_name when `always_use_translations` is enabled sets the pretty name","suite":"Spree::Taxon at ./spec/models/spree/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:4:1\"}}","suiteSourceFile":"core/spec/models/spree/taxon_spec.rb"},{"name":"#store returns the store from the taxonomy","suite":"Spree::Taxon at ./spec/models/spree/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:1\"}}","suiteSourceFile":"core/spec/models/spree/taxon_spec.rb"},{"name":"#active_products_with_descendants when category has products returns true","suite":"Spree::Taxon at ./spec/models/spree/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:17:1:1\"}}","suiteSourceFile":"core/spec/models/spree/taxon_spec.rb"},{"name":"#active_products_with_descendants when category has products returns true when products aren't active","suite":"Spree::Taxon at ./spec/models/spree/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:17:1:2\"}}","suiteSourceFile":"core/spec/models/spree/taxon_spec.rb"},{"name":"#active_products_with_descendants when only children categories have products returns true","suite":"Spree::Taxon at ./spec/models/spree/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:17:2:1\"}}","suiteSourceFile":"core/spec/models/spree/taxon_spec.rb"},{"name":"#active_products_with_descendants when only children categories have products returns false when products aren't active","suite":"Spree::Taxon at ./spec/models/spree/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:17:2:2\"}}","suiteSourceFile":"core/spec/models/spree/taxon_spec.rb"},{"name":"#active_products_with_descendants when category has no products returns false","suite":"Spree::Taxon at ./spec/models/spree/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:17:3:1\"}}","suiteSourceFile":"core/spec/models/spree/taxon_spec.rb"},{"name":"#active_products_with_descendants when category has products but children categories have no products returns true","suite":"Spree::Taxon at ./spec/models/spree/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:17:4:1\"}}","suiteSourceFile":"core/spec/models/spree/taxon_spec.rb"},{"name":"#active_products_with_descendants when category has products but children categories have no products returns false when products aren't active","suite":"Spree::Taxon at ./spec/models/spree/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:17:4:2\"}}","suiteSourceFile":"core/spec/models/spree/taxon_spec.rb"},{"name":"#active_products_with_descendants when children categories also have no products returns false","suite":"Spree::Taxon at ./spec/models/spree/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:17:5:1\"}}","suiteSourceFile":"core/spec/models/spree/taxon_spec.rb"},{"name":"#products_matching_rules when the taxon is manual returns an empty taxon","suite":"Spree::Taxon at ./spec/models/spree/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:1:1\"}}","suiteSourceFile":"core/spec/models/spree/taxon_spec.rb"},{"name":"#products_matching_rules when the taxon is automatic when the taxon has no rules returns an empty taxon","suite":"Spree::Taxon at ./spec/models/spree/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/taxon_spec.rb"},{"name":"#products_matching_rules when the taxon is automatic when the taxon has rules when the rule is a tag rule when the match policy is is_equal_to returns products that match cruelty-free tag","suite":"Spree::Taxon at ./spec/models/spree/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:2:2:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/taxon_spec.rb"},{"name":"#products_matching_rules when the taxon is automatic when the taxon has rules when the rule is a tag rule when the match policy is is_equal_to returns products that match discounted tag","suite":"Spree::Taxon at ./spec/models/spree/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:2:2:1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/taxon_spec.rb"},{"name":"#products_matching_rules when the taxon is automatic when the taxon has rules when the rule is a tag rule when the match policy is is_equal_to with all rules match policy returns products that match both tags","suite":"Spree::Taxon at ./spec/models/spree/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:2:2:1:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/taxon_spec.rb"},{"name":"#products_matching_rules when the taxon is automatic when the taxon has rules when the rule is a tag rule when the match policy is is_equal_to with any rules match policy returns products that match any tag","suite":"Spree::Taxon at ./spec/models/spree/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:2:2:1:1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/taxon_spec.rb"},{"name":"#products_matching_rules when the taxon is automatic when the taxon has rules when the rule is a tag rule when the match policy is is_not_equal_to returns products that do not match cruelty-free tag","suite":"Spree::Taxon at ./spec/models/spree/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:2:2:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/taxon_spec.rb"},{"name":"#products_matching_rules when the taxon is automatic when the taxon has rules when the rule is a tag rule when the match policy is is_not_equal_to returns products that do not match discounted tag","suite":"Spree::Taxon at ./spec/models/spree/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:2:2:1:2:2\"}}","suiteSourceFile":"core/spec/models/spree/taxon_spec.rb"},{"name":"#products_matching_rules when the taxon is automatic when the taxon has rules when the rule is a tag rule when the match policy is is_not_equal_to with all rules match policy returns products that do not match both tags","suite":"Spree::Taxon at ./spec/models/spree/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:2:2:1:2:3:1\"}}","suiteSourceFile":"core/spec/models/spree/taxon_spec.rb"},{"name":"#products_matching_rules when the taxon is automatic when the taxon has rules when the rule is a tag rule when the match policy is is_not_equal_to with any rules match policy returns products that do not match any tag","suite":"Spree::Taxon at ./spec/models/spree/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:2:2:1:2:4:1\"}}","suiteSourceFile":"core/spec/models/spree/taxon_spec.rb"},{"name":"#products_matching_rules when the taxon is automatic when the taxon has rules when the rule is a sale rule when the match policy is is_equal_to matches products that are on sale in store's currency","suite":"Spree::Taxon at ./spec/models/spree/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:2:2:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/taxon_spec.rb"},{"name":"#products_matching_rules when the taxon is automatic when the taxon has rules when the rule is a sale rule when the match policy is in_not_equal_to matches products that aren't on sale and have price in store's currency","suite":"Spree::Taxon at ./spec/models/spree/taxon_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:2:2:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/taxon_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:4","suite":"Spree::Taxonomy at ./spec/models/spree/taxonomy_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/taxonomy_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:5","suite":"Spree::Taxonomy at ./spec/models/spree/taxonomy_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/taxonomy_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:7","suite":"Spree::Taxonomy at ./spec/models/spree/taxonomy_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/models/spree/taxonomy_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:8","suite":"Spree::Taxonomy at ./spec/models/spree/taxonomy_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","suiteSourceFile":"core/spec/models/spree/taxonomy_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:10","suite":"Spree::Taxonomy at ./spec/models/spree/taxonomy_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","suiteSourceFile":"core/spec/models/spree/taxonomy_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:11","suite":"Spree::Taxonomy at ./spec/models/spree/taxonomy_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","suiteSourceFile":"core/spec/models/spree/taxonomy_spec.rb"},{"name":"behaves like metadata reads data as symbolized keys","suite":"Spree::Taxonomy at ./spec/models/spree/taxonomy_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7\"}}","suiteSourceFile":"core/spec/models/spree/taxonomy_spec.rb"},{"name":"behaves like metadata reads data as not symbolized keys","suite":"Spree::Taxonomy at ./spec/models/spree/taxonomy_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8\"}}","suiteSourceFile":"core/spec/models/spree/taxonomy_spec.rb"},{"name":"behaves like metadata can query records by metadata properties","suite":"Spree::Taxonomy at ./spec/models/spree/taxonomy_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:10\"}}","suiteSourceFile":"core/spec/models/spree/taxonomy_spec.rb"},{"name":"scopes .with_matching_name returns the taxonomy with the matching name","suite":"Spree::Taxonomy at ./spec/models/spree/taxonomy_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/taxonomy_spec.rb"},{"name":"scopes .with_matching_name with translations returns the taxonomy with the matching name","suite":"Spree::Taxonomy at ./spec/models/spree/taxonomy_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/taxonomy_spec.rb"},{"name":"#destroy destroys all associated taxons","suite":"Spree::Taxonomy at ./spec/models/spree/taxonomy_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/taxonomy_spec.rb"},{"name":"#set_root_taxon_name when Taxonomy is created sets the root Taxonomy name to match","suite":"Spree::Taxonomy at ./spec/models/spree/taxonomy_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1\"}}","suiteSourceFile":"core/spec/models/spree/taxonomy_spec.rb"},{"name":"#set_root_taxon_name when Taxonomy name is updated changes the root Taxon name to match","suite":"Spree::Taxonomy at ./spec/models/spree/taxonomy_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1\"}}","suiteSourceFile":"core/spec/models/spree/taxonomy_spec.rb"},{"name":"#set_root_taxon_name when Taxonomy position is updated does not change the root Taxon name","suite":"Spree::Taxonomy at ./spec/models/spree/taxonomy_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3:1\"}}","suiteSourceFile":"core/spec/models/spree/taxonomy_spec.rb"},{"name":"behaves like lifecycle events lifecycle events legacy_user.created publishes created event when record is created","suite":"Spree::LegacyUser at ./spec/models/spree/user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/user_spec.rb"},{"name":"behaves like lifecycle events lifecycle events legacy_user.updated publishes updated event when record is updated","suite":"Spree::LegacyUser at ./spec/models/spree/user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/user_spec.rb"},{"name":"behaves like lifecycle events lifecycle events legacy_user.deleted publishes deleted event when record is deleted","suite":"Spree::LegacyUser at ./spec/models/spree/user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/user_spec.rb"},{"name":"#event_serializer_class example at ./spec/models/spree/user_spec.rb:9","suite":"Spree::LegacyUser at ./spec/models/spree/user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/user_spec.rb"},{"name":"#can_be_deleted? when user has completed orders example at ./spec/models/spree/user_spec.rb:18","suite":"Spree::LegacyUser at ./spec/models/spree/user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","suiteSourceFile":"core/spec/models/spree/user_spec.rb"},{"name":"#can_be_deleted? when user has no completed orders example at ./spec/models/spree/user_spec.rb:24","suite":"Spree::LegacyUser at ./spec/models/spree/user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","suiteSourceFile":"core/spec/models/spree/user_spec.rb"},{"name":"#full_name when names are present returns the full name of the user","suite":"Spree::LegacyUser at ./spec/models/spree/user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1\"}}","suiteSourceFile":"core/spec/models/spree/user_spec.rb"},{"name":"#full_name when both first and last names are nil does not raise error and returns nil","suite":"Spree::LegacyUser at ./spec/models/spree/user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1\"}}","suiteSourceFile":"core/spec/models/spree/user_spec.rb"},{"name":"#last_incomplete_order returns correct order","suite":"Spree::LegacyUser at ./spec/models/spree/user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","suiteSourceFile":"core/spec/models/spree/user_spec.rb"},{"name":"#last_incomplete_order persists order address copies over order addresses","suite":"Spree::LegacyUser at ./spec/models/spree/user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1\"}}","suiteSourceFile":"core/spec/models/spree/user_spec.rb"},{"name":"#last_incomplete_order persists order address doesnt create new addresses if user has already","suite":"Spree::LegacyUser at ./spec/models/spree/user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:2\"}}","suiteSourceFile":"core/spec/models/spree/user_spec.rb"},{"name":"#last_incomplete_order persists order address set both bill and ship address id on subject","suite":"Spree::LegacyUser at ./spec/models/spree/user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:3\"}}","suiteSourceFile":"core/spec/models/spree/user_spec.rb"},{"name":"#last_incomplete_order payment source has payment sources","suite":"Spree::LegacyUser at ./spec/models/spree/user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3:1\"}}","suiteSourceFile":"core/spec/models/spree/user_spec.rb"},{"name":"#last_incomplete_order payment source drops payment source","suite":"Spree::LegacyUser at ./spec/models/spree/user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3:2\"}}","suiteSourceFile":"core/spec/models/spree/user_spec.rb"},{"name":"reporting #lifetime_value with orders returns the total of completed orders for the user","suite":"Spree::LegacyUser at ./spec/models/spree/user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/user_spec.rb"},{"name":"reporting #lifetime_value without orders returns 0.00","suite":"Spree::LegacyUser at ./spec/models/spree/user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/user_spec.rb"},{"name":"reporting #display_lifetime_value returns a Spree::Money version of lifetime_value","suite":"Spree::LegacyUser at ./spec/models/spree/user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/user_spec.rb"},{"name":"reporting #order_count returns the count of completed orders for the user","suite":"Spree::LegacyUser at ./spec/models/spree/user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/user_spec.rb"},{"name":"reporting #average_order_value with orders returns the average completed order price for the user","suite":"Spree::LegacyUser at ./spec/models/spree/user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:1:4:1:1\"}}","suiteSourceFile":"core/spec/models/spree/user_spec.rb"},{"name":"reporting #average_order_value without orders returns 0.00","suite":"Spree::LegacyUser at ./spec/models/spree/user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:1:4:2:1\"}}","suiteSourceFile":"core/spec/models/spree/user_spec.rb"},{"name":"reporting #display_average_order_value returns a Spree::Money version of average_order_value","suite":"Spree::LegacyUser at ./spec/models/spree/user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:1:5:1\"}}","suiteSourceFile":"core/spec/models/spree/user_spec.rb"},{"name":"reporting #report_values_for when order purchases in other currencies exist lifetime_value returns a list of store lifetime values","suite":"Spree::LegacyUser at ./spec/models/spree/user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:1:6:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/user_spec.rb"},{"name":"reporting #report_values_for when order purchases in other currencies exist average_order_value with orders returns a list of average completed order prices for the user","suite":"Spree::LegacyUser at ./spec/models/spree/user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:1:6:1:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/user_spec.rb"},{"name":"#total_available_store_credit user does not have any associated store credits returns 0","suite":"Spree::LegacyUser at ./spec/models/spree/user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/user_spec.rb"},{"name":"#total_available_store_credit user has several associated store credits part of the store credit has been used part of the store credit has been authorized returns sum of amounts minus used amount and authorized amount","suite":"Spree::LegacyUser at ./spec/models/spree/user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:2:2:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/user_spec.rb"},{"name":"#total_available_store_credit user has several associated store credits part of the store credit has been used there are no authorized amounts on any of the store credits returns sum of amounts minus used amount","suite":"Spree::LegacyUser at ./spec/models/spree/user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:2:2:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/user_spec.rb"},{"name":"#total_available_store_credit user has several associated store credits store credits have never been used part of the store credit has been authorized returns sum of amounts minus authorized amount","suite":"Spree::LegacyUser at ./spec/models/spree/user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:2:2:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/user_spec.rb"},{"name":"#total_available_store_credit user has several associated store credits store credits have never been used there are no authorized amounts on any of the store credits returns sum of amounts","suite":"Spree::LegacyUser at ./spec/models/spree/user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:2:2:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/user_spec.rb"},{"name":"#total_available_store_credit user has several associated store credits all store credits have never been used or authorized returns sum of amounts","suite":"Spree::LegacyUser at ./spec/models/spree/user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:2:2:3:1\"}}","suiteSourceFile":"core/spec/models/spree/user_spec.rb"},{"name":"#available_store_credits user does not have any associated store credits returns empty array","suite":"Spree::LegacyUser at ./spec/models/spree/user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:3:1:1\"}}","suiteSourceFile":"core/spec/models/spree/user_spec.rb"},{"name":"#available_store_credits user has several associated store credits store credits have never been used returns store credit amount","suite":"Spree::LegacyUser at ./spec/models/spree/user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:3:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/user_spec.rb"},{"name":"#available_store_credits user has several associated store credits store credits in different currencies exits returns sum of amounts","suite":"Spree::LegacyUser at ./spec/models/spree/user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:3:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/user_spec.rb"},{"name":"address book has many addresses","suite":"Spree::LegacyUser at ./spec/models/spree/user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:4:1\"}}","suiteSourceFile":"core/spec/models/spree/user_spec.rb"},{"name":"validations #address_not_associated_with_other_user bill_address when default bill address does not belong to any user behaves like valid is valid","suite":"Spree::LegacyUser at ./spec/models/spree/user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:5:1:1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/user_spec.rb"},{"name":"validations #address_not_associated_with_other_user bill_address when default bill address belongs to user behaves like valid is valid","suite":"Spree::LegacyUser at ./spec/models/spree/user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:5:1:1:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/user_spec.rb"},{"name":"validations #address_not_associated_with_other_user bill_address when associated bill address belongs to other user assigns error to bill address","suite":"Spree::LegacyUser at ./spec/models/spree/user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:5:1:1:3:2\"}}","suiteSourceFile":"core/spec/models/spree/user_spec.rb"},{"name":"validations #address_not_associated_with_other_user bill_address when associated bill address belongs to other user behaves like invalid is invalid","suite":"Spree::LegacyUser at ./spec/models/spree/user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:5:1:1:3:1:1\"}}","suiteSourceFile":"core/spec/models/spree/user_spec.rb"},{"name":"validations #address_not_associated_with_other_user ship_address when default ship address does not belong to any user behaves like valid is valid","suite":"Spree::LegacyUser at ./spec/models/spree/user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:5:1:2:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/user_spec.rb"},{"name":"validations #address_not_associated_with_other_user ship_address when default ship address belongs to user behaves like valid is valid","suite":"Spree::LegacyUser at ./spec/models/spree/user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:5:1:2:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/user_spec.rb"},{"name":"validations #address_not_associated_with_other_user ship_address when associated ship address belongs to other user assigns error to ship address","suite":"Spree::LegacyUser at ./spec/models/spree/user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:5:1:2:3:2\"}}","suiteSourceFile":"core/spec/models/spree/user_spec.rb"},{"name":"validations #address_not_associated_with_other_user ship_address when associated ship address belongs to other user behaves like invalid is invalid","suite":"Spree::LegacyUser at ./spec/models/spree/user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:5:1:2:3:1:1\"}}","suiteSourceFile":"core/spec/models/spree/user_spec.rb"},{"name":"validations #address_not_deprecated_in_completed_order bill_address when default bill address is not associated to completed order behaves like valid is valid","suite":"Spree::LegacyUser at ./spec/models/spree/user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:5:2:1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/user_spec.rb"},{"name":"validations #address_not_deprecated_in_completed_order bill_address when default bill address is associated to uncompleted order behaves like valid is valid","suite":"Spree::LegacyUser at ./spec/models/spree/user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:5:2:1:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/user_spec.rb"},{"name":"validations #address_not_deprecated_in_completed_order bill_address when default bill address is associated to completed order when default bill address is the same as associated to order example at ./spec/models/spree/user_spec.rb:437","suite":"Spree::LegacyUser at ./spec/models/spree/user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:5:2:1:3:1:1\"}}","suiteSourceFile":"core/spec/models/spree/user_spec.rb"},{"name":"validations #address_not_deprecated_in_completed_order bill_address when default bill address is associated to completed order when default bill address is the same as associated to order behaves like valid is valid","suite":"Spree::LegacyUser at ./spec/models/spree/user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:5:2:1:3:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/user_spec.rb"},{"name":"validations #address_not_deprecated_in_completed_order bill_address when default bill address is associated to completed order when user changed bill address which was used in completed order so the old one is deprecated example at ./spec/models/spree/user_spec.rb:445","suite":"Spree::LegacyUser at ./spec/models/spree/user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:5:2:1:3:2:1\"}}","suiteSourceFile":"core/spec/models/spree/user_spec.rb"},{"name":"validations #address_not_deprecated_in_completed_order bill_address when default bill address is associated to completed order when user changed bill address which was used in completed order so the old one is deprecated assigns error to bill address","suite":"Spree::LegacyUser at ./spec/models/spree/user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:5:2:1:3:2:3\"}}","suiteSourceFile":"core/spec/models/spree/user_spec.rb"},{"name":"validations #address_not_deprecated_in_completed_order bill_address when default bill address is associated to completed order when user changed bill address which was used in completed order so the old one is deprecated behaves like invalid is invalid","suite":"Spree::LegacyUser at ./spec/models/spree/user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:5:2:1:3:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/user_spec.rb"},{"name":"validations #address_not_deprecated_in_completed_order ship_address when default ship address is not associated to completed order behaves like valid is valid","suite":"Spree::LegacyUser at ./spec/models/spree/user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:5:2:2:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/user_spec.rb"},{"name":"validations #address_not_deprecated_in_completed_order ship_address when default ship address is associated to uncompleted order behaves like valid is valid","suite":"Spree::LegacyUser at ./spec/models/spree/user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:5:2:2:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/user_spec.rb"},{"name":"validations #address_not_deprecated_in_completed_order ship_address when default ship address is associated to completed order when default ship address is the same as associated to order example at ./spec/models/spree/user_spec.rb:476","suite":"Spree::LegacyUser at ./spec/models/spree/user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:5:2:2:3:1:1\"}}","suiteSourceFile":"core/spec/models/spree/user_spec.rb"},{"name":"validations #address_not_deprecated_in_completed_order ship_address when default ship address is associated to completed order when default ship address is the same as associated to order behaves like valid is valid","suite":"Spree::LegacyUser at ./spec/models/spree/user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:5:2:2:3:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/user_spec.rb"},{"name":"validations #address_not_deprecated_in_completed_order ship_address when default ship address is associated to completed order when user changed ship address which was used in completed order so the old one is deprecated example at ./spec/models/spree/user_spec.rb:484","suite":"Spree::LegacyUser at ./spec/models/spree/user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:5:2:2:3:2:1\"}}","suiteSourceFile":"core/spec/models/spree/user_spec.rb"},{"name":"validations #address_not_deprecated_in_completed_order ship_address when default ship address is associated to completed order when user changed ship address which was used in completed order so the old one is deprecated assigns error to ship address","suite":"Spree::LegacyUser at ./spec/models/spree/user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:5:2:2:3:2:3\"}}","suiteSourceFile":"core/spec/models/spree/user_spec.rb"},{"name":"validations #address_not_deprecated_in_completed_order ship_address when default ship address is associated to completed order when user changed ship address which was used in completed order so the old one is deprecated behaves like invalid is invalid","suite":"Spree::LegacyUser at ./spec/models/spree/user_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:5:2:2:3:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/user_spec.rb"},{"name":"#product_name_or_sku_cont returns variants based on products name","suite":"Variant scopes at ./spec/models/spree/variant/scopes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/variant/scopes_spec.rb"},{"name":"#product_name_or_sku_cont returns variants based on variant sku","suite":"Variant scopes at ./spec/models/spree/variant/scopes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/variant/scopes_spec.rb"},{"name":"#product_name_or_sku_cont does not return variants of products that do not match name","suite":"Variant scopes at ./spec/models/spree/variant/scopes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/models/spree/variant/scopes_spec.rb"},{"name":"#product_name_or_sku_cont does not return variants with not matching skus","suite":"Variant scopes at ./spec/models/spree/variant/scopes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","suiteSourceFile":"core/spec/models/spree/variant/scopes_spec.rb"},{"name":"#product_name_or_sku_cont returns multiple variants based on products name","suite":"Variant scopes at ./spec/models/spree/variant/scopes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","suiteSourceFile":"core/spec/models/spree/variant/scopes_spec.rb"},{"name":"#product_name_or_sku_cont return multiple variants based on variants sku","suite":"Variant scopes at ./spec/models/spree/variant/scopes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","suiteSourceFile":"core/spec/models/spree/variant/scopes_spec.rb"},{"name":"#product_name_or_sku_cont returns no variants when products name does not match any","suite":"Variant scopes at ./spec/models/spree/variant/scopes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7\"}}","suiteSourceFile":"core/spec/models/spree/variant/scopes_spec.rb"},{"name":"#product_name_or_sku_cont returns no variants when variants sku does not match any","suite":"Variant scopes at ./spec/models/spree/variant/scopes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8\"}}","suiteSourceFile":"core/spec/models/spree/variant/scopes_spec.rb"},{"name":"#product_name_or_sku_cont when using translations returns variants based on products translated name","suite":"Variant scopes at ./spec/models/spree/variant/scopes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:9:1\"}}","suiteSourceFile":"core/spec/models/spree/variant/scopes_spec.rb"},{"name":"#product_name_or_sku_cont when using translations does not return variants of products that do not match name","suite":"Variant scopes at ./spec/models/spree/variant/scopes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:9:2\"}}","suiteSourceFile":"core/spec/models/spree/variant/scopes_spec.rb"},{"name":"#search_by_product_name_or_sku returns variants based on products name","suite":"Variant scopes at ./spec/models/spree/variant/scopes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/variant/scopes_spec.rb"},{"name":"#search_by_product_name_or_sku returns variants based on variant sku","suite":"Variant scopes at ./spec/models/spree/variant/scopes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","suiteSourceFile":"core/spec/models/spree/variant/scopes_spec.rb"},{"name":"#search_by_product_name_or_sku does not return variants of products that do not match name","suite":"Variant scopes at ./spec/models/spree/variant/scopes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3\"}}","suiteSourceFile":"core/spec/models/spree/variant/scopes_spec.rb"},{"name":"#search_by_product_name_or_sku does not return variants with not matching skus","suite":"Variant scopes at ./spec/models/spree/variant/scopes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:4\"}}","suiteSourceFile":"core/spec/models/spree/variant/scopes_spec.rb"},{"name":"#search_by_product_name_or_sku returns multiple variants based on products name","suite":"Variant scopes at ./spec/models/spree/variant/scopes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:5\"}}","suiteSourceFile":"core/spec/models/spree/variant/scopes_spec.rb"},{"name":"#search_by_product_name_or_sku return multiple variants based on variants sku","suite":"Variant scopes at ./spec/models/spree/variant/scopes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:6\"}}","suiteSourceFile":"core/spec/models/spree/variant/scopes_spec.rb"},{"name":"#search_by_product_name_or_sku returns no variants when products name does not match any","suite":"Variant scopes at ./spec/models/spree/variant/scopes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:7\"}}","suiteSourceFile":"core/spec/models/spree/variant/scopes_spec.rb"},{"name":"#search_by_product_name_or_sku returns no variants when variants sku does not match any","suite":"Variant scopes at ./spec/models/spree/variant/scopes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:8\"}}","suiteSourceFile":"core/spec/models/spree/variant/scopes_spec.rb"},{"name":"behaves like default_price example at ./spec/support/concerns/default_price.rb:36","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"behaves like default_price .has_one :default_price is a has one association","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"behaves like default_price .has_one :default_price has a dependent destroy","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"behaves like default_price .has_one :default_price has the class name of Spree::Price","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"behaves like default_price #default_price example at ./spec/support/concerns/default_price.rb:23","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"behaves like default_price #default_price delegates price","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"behaves like default_price #default_price delegates price_including_vat_for","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:3\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:4","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:5","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:7","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:8","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:4\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:10","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:5\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"behaves like metadata example at ./lib/spree/testing_support/metadata.rb:11","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:6\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"behaves like metadata reads data as symbolized keys","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:7\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"behaves like metadata reads data as not symbolized keys","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:8\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"behaves like metadata can query records by metadata properties","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:10\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"behaves like lifecycle events lifecycle events variant.created publishes created event when record is created","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"behaves like lifecycle events lifecycle events variant.updated publishes updated event when record is updated","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"behaves like lifecycle events lifecycle events variant.deleted publishes deleted event when record is deleted","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"sorting responds to set_list_position","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"validations validates price is greater than 0","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"validations validates price is 0","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"validations validates the dimensions unit","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:4\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"validations validates the weight unit","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:5\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"validations SKU normalizes strips leading and trailing whitespace","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3:1:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"validations SKU normalizes preserves empty string (does not convert to nil)","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3:1:2\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"validations SKU default behaviour invalid with the same SKU","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"validations SKU default behaviour valid with different SKU","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"validations SKU default behaviour valid without SKU","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3:2:2:2\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"validations SKU disabled validation valid with the same SKU","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3:3:1:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"validations SKU disabled validation valid without SKU","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3:3:1:2\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"after create propagate to stock items","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"after create stock location has disable propagate all variants propagate to stock items","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"after create mark_master_out_of_stock when product is created without variants but with stock example at ./spec/models/spree/variant_spec.rb:137","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:3:1:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"after create mark_master_out_of_stock when a variant is created example at ./spec/models/spree/variant_spec.rb:143","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:3:2:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"after create #create_default_stock_item when not tracking inventory creates a default stock item","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:4:1:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"after create #create_default_stock_item when not tracking inventory when variant is created along with a stock item does not create an another stock item","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:4:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"after create #create_default_stock_item when tracking inventory does not create a default stock item","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:4:2:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"after create #create_default_stock_item existing variant creates a default stock item","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:4:3:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"after_update_commit :handle_track_inventory_change when not tracking inventory updates stock item count on hand to 0","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"after_update_commit :handle_track_inventory_change when tracking inventory keeps stock items","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"after_commit :remove_prices_from_master_variant removes prices from master when variant with price is created","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"after_commit :remove_stock_items_from_master_variant removes stock items from master when variant is created","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"scope .eligible when only master variants returns all of them","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"scope .eligible when product has more than 1 variant filters master variant out","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"scope .not_discontinued when discontinued example at ./spec/models/spree/variant_spec.rb:291","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"scope .not_discontinued when not discontinued example at ./spec/models/spree/variant_spec.rb:297","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"scope .not_discontinued when discontinue_on not present example at ./spec/models/spree/variant_spec.rb:303","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:2:3:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"scope .not_deleted when deleted example at ./spec/models/spree/variant_spec.rb:311","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:3:1:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"scope .not_deleted when not deleted example at ./spec/models/spree/variant_spec.rb:317","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:3:2:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"scope .for_currency_and_available_price_amount when price with currency present when price has amount example at ./spec/models/spree/variant_spec.rb:328","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:4:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"scope .for_currency_and_available_price_amount when price with currency present when price do not have amount example at ./spec/models/spree/variant_spec.rb:338","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:4:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"scope .for_currency_and_available_price_amount when price with currency not present when price has amount example at ./spec/models/spree/variant_spec.rb:348","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:4:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"scope .for_currency_and_available_price_amount when price with currency not present when price do not have amount example at ./spec/models/spree/variant_spec.rb:358","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:4:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"scope .for_currency_and_available_price_amount when currency parameter is nil example at ./spec/models/spree/variant_spec.rb:367","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:4:3:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"scope .active finds not_discontinued variants","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:5:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"scope .active finds not_deleted variants","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:5:2\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"scope .active finds variants for_currency_and_available_price_amount","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:5:3\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"scope .active example at ./spec/models/spree/variant_spec.rb:396","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:5:4\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"product has other variants option value accessors sets option value","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"product has other variants option value accessors does not duplicate associated option values when set multiple times","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1:2\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"product has other variants product has other variants option value accessors sets option value","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"product has other variants product has other variants option value accessors does not duplicate associated option values when set multiple times","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2:1:2\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"#cost_price= uses LocalizedNumber.parse","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"#in_stock_or_backorderable? when variant has no stock items example at ./spec/models/spree/variant_spec.rb:482","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:1:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"#in_stock_or_backorderable? when variant has stock items when variant stock items count_on_hand > 0 example at ./spec/models/spree/variant_spec.rb:493","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"#in_stock_or_backorderable? when variant has stock items when variant stock items count_on_hand <= 0 example at ./spec/models/spree/variant_spec.rb:499","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"#in_stock_or_backorderable? when variant has stock items when variant stock items count_on_hand <= 0 when variant track_inventory = false example at ./spec/models/spree/variant_spec.rb:504","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:2:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"#in_stock_or_backorderable? when variant has stock items when variant stock items count_on_hand <= 0 when variant track_inventory = true example at ./spec/models/spree/variant_spec.rb:508","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:2:2:3:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"#in_stock_or_backorderable? when variant has stock items when variant stock items count_on_hand <= 0 when variant track_inventory = true with some variant stock item having backorderable = true example at ./spec/models/spree/variant_spec.rb:513","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:2:2:3:2:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"#price= uses LocalizedNumber.parse","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"#weight= uses LocalizedNumber.parse","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"#currency returns the globally configured currency","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"#display_amount returns a Spree::Money","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:17:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"#cost_currency when cost currency is nil populates cost currency with the default value on save","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:1:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"#price_in when currency is not specified returns 0","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:1:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"#price_in when currency is EUR returns the value in the EUR","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:2:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"#price_in when currency is USD returns the value in the USD","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:3:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"#price_in when there is no price with present amount in given currency returns 0","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:4:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"#price_in when price exists in a price list does not return price list price","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:5:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"#price_in when price exists in a price list when base price also exists returns the base price, not the price list price","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:5:2:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"#set_price creates a base price for the currency","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:20:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"#set_price updates existing base price","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:20:2\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"#set_price does not update price list price","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:20:3\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"#set_price sets compare_at_amount when provided","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:20:4\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"#on_sale? when existing currency is passed checks if variant is discounted in that currency","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:21:1:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"#on_sale? when existing currency is passed when variant is discounted returns true","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:21:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"#on_sale? when existing currency is passed when variant is not discounted returns false","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:21:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"#on_sale? when passed currency does not exist returns false","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:21:2:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":".amount_in when currency is not specified returns nil","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:22:1:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":".amount_in when currency is EUR returns the value in the EUR","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:22:2:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":".amount_in when currency is USD returns the value in the USD","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:22:3:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"#options returns an array of hashes with option type name, value, and presentation orderd by option type position","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:23:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"#options_text when the variant has no option values returns an empty string","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:24:1:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"#options_text when the variant has option values returns the options text of the variant","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:24:2:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"exchange_name master variant returns name","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:25:1:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"exchange_name variant returns options text","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:25:2:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"exchange_name master variant returns name","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:26:1:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"exchange_name variant returns options text","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:26:2:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"descriptive_name master variant returns name with Master identifier","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:27:1:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"descriptive_name variant returns options text with name","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:27:2:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"set_position sets variant position after creation","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:28:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"#in_stock? when stock_items are not backorderable when stock_items in stock returns true if stock_items in stock","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"#in_stock? when stock_items are not backorderable when stock_items out of stock return false if stock_items out of stock","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"#in_stock? #can_supply? calls out to quantifier","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:2:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"#in_stock? when stock_items are backorderable when stock_items out of stock in_stock? returns false","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:3:1:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"#in_stock? when stock_items are backorderable when stock_items out of stock can_supply? return true","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:3:1:2\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"#is_backorderable invokes Spree::Stock::Quantifier","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:30:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"#purchasable? when stock_items are not backorderable when stock_items in stock returns true if stock_items in stock","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:31:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"#purchasable? when stock_items are not backorderable when stock_items out of stock return false if stock_items out of stock","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:31:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"#purchasable? when stock_items are out of stock when stock item are backorderable returns true if stock_items are backorderable","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:31:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"#purchasable? when stock_items are out of stock when stock_items are not backorderable return false if stock_items are not backorderable","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:31:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"#total_on_hand is infinite if track_inventory_levels is false","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:32:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"#total_on_hand matches quantifier total_on_hand","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:32:2\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"#tax_category when tax_category is nil returns the parent products tax_category","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:33:1:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"#tax_category when tax_category is set returns the tax_category set on itself","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:33:2:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"#tax_category when tax category is deleted returns the parent products tax_category","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:33:3:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"#tax_category when tax category is deleted also in product with default tax category returns the default tax category","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:33:4:1:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"#tax_category when tax category is deleted also in product without default tax category returns nil","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:33:4:2:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"touching updates a product","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:34:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"touching clears the in_stock cache key","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:34:2\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"touching when unlinking an option value touches variant","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:34:3:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"#should_track_inventory? does not track inventory when global setting is off","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:35:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"#should_track_inventory? does not track inventory when variant is turned off","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:35:2\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"#should_track_inventory? tracks inventory when global and variant are on","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:35:3\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"deleted_at scope has a price if deleted","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:36:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"stock movements builds out collection just fine through stock items","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:37:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"in_stock scope returns all in stock variants","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:38:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"#volume is zero if any dimension parameter is zero","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:39:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"#volume return the volume if the dimension parameters are different of zero","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:39:2\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"#dimension return the dimension if the dimension parameters are different of zero","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:40:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"#discontinue! sets the discontinued","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:41:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"#discontinue! changes updated_at","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:41:2\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"#discontinued? is false","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:42:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"#discontinued? is true","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:42:2\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"#available? when discontinued when product is available example at ./spec/models/spree/variant_spec.rb:1220","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:43:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"#available? when discontinued when product is not available example at ./spec/models/spree/variant_spec.rb:1228","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:43:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"#available? when not discontinued when product is available example at ./spec/models/spree/variant_spec.rb:1242","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:43:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"#available? when not discontinued when product is not available example at ./spec/models/spree/variant_spec.rb:1250","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:43:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"validate :check_price when variant has a default price keeps the default price","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:44:1:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"validate :check_price when variant has a default price when the default price is invalid infers price from the default variant","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:44:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"validate :check_price when variant has a default price when the default price is invalid when there is no default variant adds an error","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:44:1:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"validate :check_price when variant has no default price infers price from the default variant","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:44:2:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"validate :check_price when variant has no default price when there is no default variant adds an error","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:44:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"validate :check_price when variant has prices keeps the prices","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:44:3:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"#created_at creates variant with created_at timestamp","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:45:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"#updated_at creates variant with updated_at timestamp","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:46:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"#backordered? returns true when out of stock and backorderable","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:47:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"#backordered? returns false when out of stock and not backorderable","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:47:2\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"#backordered? returns false when there is available item in stock","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:47:3\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"#ensure_not_in_complete_orders adds error on variant destroy","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:48:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"#remove_line_items_from_incomplete_orders schedules RemoveFromIncompleteOrdersJob","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:49:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"#remove_line_items_from_incomplete_orders deletes the line items from the order","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:49:2\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"#default_image when variant has images returns the first image","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:50:1:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"#default_image when variant has no images falls back to product default image","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:50:2:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"#primary_image returns the first image","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:51:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"#secondary_image returns the second image","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:52:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"#additional_images returns all images except the default","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:53:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"#has_images? when variant has no images returns false","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:54:1:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"#has_images? when variant has images returns true","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:54:2:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"#has_images? when images are preloaded uses loaded association","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:54:3:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"#has_images? when images are preloaded but empty returns false","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:54:4:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"counter cache variant_count on product increments when a variant is created","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:55:1:1\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"counter cache variant_count on product decrements when a variant is destroyed","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:55:1:2\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"counter cache variant_count on product does not count master variant","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:55:1:3\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"counter cache variant_count on product correctly counts multiple variants","suite":"Spree::Variant at ./spec/models/spree/variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:55:1:4\"}}","suiteSourceFile":"core/spec/models/spree/variant_spec.rb"},{"name":"scopes .successful returns only successful deliveries","suite":"Spree::WebhookDelivery at ./spec/models/spree/webhook_delivery_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/webhook_delivery_spec.rb"},{"name":"scopes .failed returns only failed deliveries","suite":"Spree::WebhookDelivery at ./spec/models/spree/webhook_delivery_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/webhook_delivery_spec.rb"},{"name":"scopes .pending returns only pending deliveries","suite":"Spree::WebhookDelivery at ./spec/models/spree/webhook_delivery_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/webhook_delivery_spec.rb"},{"name":"scopes .recent orders by created_at desc","suite":"Spree::WebhookDelivery at ./spec/models/spree/webhook_delivery_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/webhook_delivery_spec.rb"},{"name":"scopes .for_event returns deliveries for the specified event","suite":"Spree::WebhookDelivery at ./spec/models/spree/webhook_delivery_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5:1\"}}","suiteSourceFile":"core/spec/models/spree/webhook_delivery_spec.rb"},{"name":"#successful? returns true when success is true","suite":"Spree::WebhookDelivery at ./spec/models/spree/webhook_delivery_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/webhook_delivery_spec.rb"},{"name":"#successful? returns false when success is false","suite":"Spree::WebhookDelivery at ./spec/models/spree/webhook_delivery_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","suiteSourceFile":"core/spec/models/spree/webhook_delivery_spec.rb"},{"name":"#successful? returns false when success is nil","suite":"Spree::WebhookDelivery at ./spec/models/spree/webhook_delivery_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3\"}}","suiteSourceFile":"core/spec/models/spree/webhook_delivery_spec.rb"},{"name":"#failed? returns true when success is false","suite":"Spree::WebhookDelivery at ./spec/models/spree/webhook_delivery_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/webhook_delivery_spec.rb"},{"name":"#failed? returns false when success is true","suite":"Spree::WebhookDelivery at ./spec/models/spree/webhook_delivery_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","suiteSourceFile":"core/spec/models/spree/webhook_delivery_spec.rb"},{"name":"#failed? returns false when success is nil","suite":"Spree::WebhookDelivery at ./spec/models/spree/webhook_delivery_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3\"}}","suiteSourceFile":"core/spec/models/spree/webhook_delivery_spec.rb"},{"name":"#pending? returns true when delivered_at is nil","suite":"Spree::WebhookDelivery at ./spec/models/spree/webhook_delivery_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/models/spree/webhook_delivery_spec.rb"},{"name":"#pending? returns false when delivered_at is present","suite":"Spree::WebhookDelivery at ./spec/models/spree/webhook_delivery_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2\"}}","suiteSourceFile":"core/spec/models/spree/webhook_delivery_spec.rb"},{"name":"#complete! with successful HTTP response marks the delivery as successful","suite":"Spree::WebhookDelivery at ./spec/models/spree/webhook_delivery_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:1\"}}","suiteSourceFile":"core/spec/models/spree/webhook_delivery_spec.rb"},{"name":"#complete! with successful HTTP response marks 201 as successful","suite":"Spree::WebhookDelivery at ./spec/models/spree/webhook_delivery_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:2\"}}","suiteSourceFile":"core/spec/models/spree/webhook_delivery_spec.rb"},{"name":"#complete! with successful HTTP response marks 204 as successful","suite":"Spree::WebhookDelivery at ./spec/models/spree/webhook_delivery_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:3\"}}","suiteSourceFile":"core/spec/models/spree/webhook_delivery_spec.rb"},{"name":"#complete! with failed HTTP response marks the delivery as failed for 4xx responses","suite":"Spree::WebhookDelivery at ./spec/models/spree/webhook_delivery_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1\"}}","suiteSourceFile":"core/spec/models/spree/webhook_delivery_spec.rb"},{"name":"#complete! with failed HTTP response marks the delivery as failed for 5xx responses","suite":"Spree::WebhookDelivery at ./spec/models/spree/webhook_delivery_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:2\"}}","suiteSourceFile":"core/spec/models/spree/webhook_delivery_spec.rb"},{"name":"#complete! with timeout error records the timeout error","suite":"Spree::WebhookDelivery at ./spec/models/spree/webhook_delivery_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3:1\"}}","suiteSourceFile":"core/spec/models/spree/webhook_delivery_spec.rb"},{"name":"#complete! with connection error records the connection error","suite":"Spree::WebhookDelivery at ./spec/models/spree/webhook_delivery_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:4:1\"}}","suiteSourceFile":"core/spec/models/spree/webhook_delivery_spec.rb"},{"name":"validations url format accepts valid https urls","suite":"Spree::WebhookEndpoint at ./spec/models/spree/webhook_endpoint_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/webhook_endpoint_spec.rb"},{"name":"validations url format accepts valid http urls","suite":"Spree::WebhookEndpoint at ./spec/models/spree/webhook_endpoint_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/webhook_endpoint_spec.rb"},{"name":"validations url format rejects invalid urls","suite":"Spree::WebhookEndpoint at ./spec/models/spree/webhook_endpoint_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3\"}}","suiteSourceFile":"core/spec/models/spree/webhook_endpoint_spec.rb"},{"name":"validations url format rejects ftp urls","suite":"Spree::WebhookEndpoint at ./spec/models/spree/webhook_endpoint_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:4\"}}","suiteSourceFile":"core/spec/models/spree/webhook_endpoint_spec.rb"},{"name":"validations active inclusion accepts true","suite":"Spree::WebhookEndpoint at ./spec/models/spree/webhook_endpoint_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/webhook_endpoint_spec.rb"},{"name":"validations active inclusion accepts false","suite":"Spree::WebhookEndpoint at ./spec/models/spree/webhook_endpoint_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2\"}}","suiteSourceFile":"core/spec/models/spree/webhook_endpoint_spec.rb"},{"name":"validations active inclusion rejects nil","suite":"Spree::WebhookEndpoint at ./spec/models/spree/webhook_endpoint_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:3\"}}","suiteSourceFile":"core/spec/models/spree/webhook_endpoint_spec.rb"},{"name":"scopes .active returns only active endpoints","suite":"Spree::WebhookEndpoint at ./spec/models/spree/webhook_endpoint_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/webhook_endpoint_spec.rb"},{"name":"scopes .inactive returns only inactive endpoints","suite":"Spree::WebhookEndpoint at ./spec/models/spree/webhook_endpoint_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/webhook_endpoint_spec.rb"},{"name":"callbacks before_create :generate_secret_key generates a secret key on create","suite":"Spree::WebhookEndpoint at ./spec/models/spree/webhook_endpoint_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","suiteSourceFile":"core/spec/models/spree/webhook_endpoint_spec.rb"},{"name":"callbacks before_create :generate_secret_key does not overwrite existing secret key","suite":"Spree::WebhookEndpoint at ./spec/models/spree/webhook_endpoint_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:2\"}}","suiteSourceFile":"core/spec/models/spree/webhook_endpoint_spec.rb"},{"name":"#subscribed_to? with empty subscriptions returns true for any event","suite":"Spree::WebhookEndpoint at ./spec/models/spree/webhook_endpoint_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1\"}}","suiteSourceFile":"core/spec/models/spree/webhook_endpoint_spec.rb"},{"name":"#subscribed_to? with wildcard subscription returns true for any event","suite":"Spree::WebhookEndpoint at ./spec/models/spree/webhook_endpoint_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1\"}}","suiteSourceFile":"core/spec/models/spree/webhook_endpoint_spec.rb"},{"name":"#subscribed_to? with specific subscriptions returns true for subscribed events","suite":"Spree::WebhookEndpoint at ./spec/models/spree/webhook_endpoint_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3:1\"}}","suiteSourceFile":"core/spec/models/spree/webhook_endpoint_spec.rb"},{"name":"#subscribed_to? with specific subscriptions returns false for non-subscribed events","suite":"Spree::WebhookEndpoint at ./spec/models/spree/webhook_endpoint_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3:2\"}}","suiteSourceFile":"core/spec/models/spree/webhook_endpoint_spec.rb"},{"name":"#subscribed_to? with pattern subscriptions matches events that fit the pattern","suite":"Spree::WebhookEndpoint at ./spec/models/spree/webhook_endpoint_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:4:1\"}}","suiteSourceFile":"core/spec/models/spree/webhook_endpoint_spec.rb"},{"name":"#subscribed_to? with pattern subscriptions does not match events outside the pattern","suite":"Spree::WebhookEndpoint at ./spec/models/spree/webhook_endpoint_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:4:2\"}}","suiteSourceFile":"core/spec/models/spree/webhook_endpoint_spec.rb"},{"name":"#subscribed_to? with mixed subscriptions matches pattern events","suite":"Spree::WebhookEndpoint at ./spec/models/spree/webhook_endpoint_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:5:1\"}}","suiteSourceFile":"core/spec/models/spree/webhook_endpoint_spec.rb"},{"name":"#subscribed_to? with mixed subscriptions matches exact events","suite":"Spree::WebhookEndpoint at ./spec/models/spree/webhook_endpoint_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:5:2\"}}","suiteSourceFile":"core/spec/models/spree/webhook_endpoint_spec.rb"},{"name":"#subscribed_to? with mixed subscriptions does not match non-subscribed events","suite":"Spree::WebhookEndpoint at ./spec/models/spree/webhook_endpoint_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:5:3\"}}","suiteSourceFile":"core/spec/models/spree/webhook_endpoint_spec.rb"},{"name":"#subscribed_events with empty subscriptions returns wildcard","suite":"Spree::WebhookEndpoint at ./spec/models/spree/webhook_endpoint_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:1\"}}","suiteSourceFile":"core/spec/models/spree/webhook_endpoint_spec.rb"},{"name":"#subscribed_events with specific subscriptions returns the subscriptions","suite":"Spree::WebhookEndpoint at ./spec/models/spree/webhook_endpoint_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1\"}}","suiteSourceFile":"core/spec/models/spree/webhook_endpoint_spec.rb"},{"name":"soft delete soft deletes the record","suite":"Spree::WebhookEndpoint at ./spec/models/spree/webhook_endpoint_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","suiteSourceFile":"core/spec/models/spree/webhook_endpoint_spec.rb"},{"name":"behaves like lifecycle events lifecycle events wished_item.created publishes created event when record is created","suite":"Spree::WishedItem at ./spec/models/spree/wished_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/wished_item_spec.rb"},{"name":"behaves like lifecycle events lifecycle events wished_item.updated publishes updated event when record is updated","suite":"Spree::WishedItem at ./spec/models/spree/wished_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/wished_item_spec.rb"},{"name":"behaves like lifecycle events lifecycle events wished_item.deleted publishes deleted event when record is deleted","suite":"Spree::WishedItem at ./spec/models/spree/wished_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/wished_item_spec.rb"},{"name":".quantity example at ./spec/models/spree/wished_item_spec.rb:13","suite":"Spree::WishedItem at ./spec/models/spree/wished_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/wished_item_spec.rb"},{"name":".quantity example at ./spec/models/spree/wished_item_spec.rb:14","suite":"Spree::WishedItem at ./spec/models/spree/wished_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","suiteSourceFile":"core/spec/models/spree/wished_item_spec.rb"},{"name":".quantity validates presence of wishlist","suite":"Spree::WishedItem at ./spec/models/spree/wished_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3\"}}","suiteSourceFile":"core/spec/models/spree/wished_item_spec.rb"},{"name":".quantity validates presence of variant","suite":"Spree::WishedItem at ./spec/models/spree/wished_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:4\"}}","suiteSourceFile":"core/spec/models/spree/wished_item_spec.rb"},{"name":".quantity validates numericality of quantity","suite":"Spree::WishedItem at ./spec/models/spree/wished_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:5\"}}","suiteSourceFile":"core/spec/models/spree/wished_item_spec.rb"},{"name":".quantity validates numericality must be greater than 0","suite":"Spree::WishedItem at ./spec/models/spree/wished_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:6\"}}","suiteSourceFile":"core/spec/models/spree/wished_item_spec.rb"},{"name":".quantity when wished_item is already associated with the wishlist validates uniqueness of variant within scope of wishlist","suite":"Spree::WishedItem at ./spec/models/spree/wished_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:7:1\"}}","suiteSourceFile":"core/spec/models/spree/wished_item_spec.rb"},{"name":".quantity .price example at ./spec/models/spree/wished_item_spec.rb:44","suite":"Spree::WishedItem at ./spec/models/spree/wished_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:8:1\"}}","suiteSourceFile":"core/spec/models/spree/wished_item_spec.rb"},{"name":".quantity .total example at ./spec/models/spree/wished_item_spec.rb:48","suite":"Spree::WishedItem at ./spec/models/spree/wished_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:9:1\"}}","suiteSourceFile":"core/spec/models/spree/wished_item_spec.rb"},{"name":".quantity .display_price example at ./spec/models/spree/wished_item_spec.rb:52","suite":"Spree::WishedItem at ./spec/models/spree/wished_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:10:1\"}}","suiteSourceFile":"core/spec/models/spree/wished_item_spec.rb"},{"name":".quantity .display_total example at ./spec/models/spree/wished_item_spec.rb:56","suite":"Spree::WishedItem at ./spec/models/spree/wished_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:11:1\"}}","suiteSourceFile":"core/spec/models/spree/wished_item_spec.rb"},{"name":"has a valid factory","suite":"Spree::Wishlist at ./spec/models/spree/wishlist_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2\"}}","suiteSourceFile":"core/spec/models/spree/wishlist_spec.rb"},{"name":"validates presence of name","suite":"Spree::Wishlist at ./spec/models/spree/wishlist_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3\"}}","suiteSourceFile":"core/spec/models/spree/wishlist_spec.rb"},{"name":"validates presence of store","suite":"Spree::Wishlist at ./spec/models/spree/wishlist_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4\"}}","suiteSourceFile":"core/spec/models/spree/wishlist_spec.rb"},{"name":"validates presence of user","suite":"Spree::Wishlist at ./spec/models/spree/wishlist_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5\"}}","suiteSourceFile":"core/spec/models/spree/wishlist_spec.rb"},{"name":"lifecycle events wishlist.created publishes created event when record is created","suite":"Spree::Wishlist at ./spec/models/spree/wishlist_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/wishlist_spec.rb"},{"name":"lifecycle events wishlist.updated publishes updated event when record is updated","suite":"Spree::Wishlist at ./spec/models/spree/wishlist_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/wishlist_spec.rb"},{"name":"lifecycle events wishlist.deleted publishes deleted event when record is destroyed","suite":"Spree::Wishlist at ./spec/models/spree/wishlist_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/wishlist_spec.rb"},{"name":".ensure_default_exists_and_is_unique when user creates a new default store preserves is_default: true for new wishlist","suite":"Spree::Wishlist at ./spec/models/spree/wishlist_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1:1\"}}","suiteSourceFile":"core/spec/models/spree/wishlist_spec.rb"},{"name":".ensure_default_exists_and_is_unique when user creates a new default store sets is_default: false on the wishlist that was the previous default","suite":"Spree::Wishlist at ./spec/models/spree/wishlist_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1:2\"}}","suiteSourceFile":"core/spec/models/spree/wishlist_spec.rb"},{"name":".ensure_default_exists_and_is_unique when user creates a new default store does not alter the state of wishlist belonging to other users","suite":"Spree::Wishlist at ./spec/models/spree/wishlist_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1:3\"}}","suiteSourceFile":"core/spec/models/spree/wishlist_spec.rb"},{"name":".ensure_default_exists_and_is_unique when user creates a new default store does not alter the state of wishlist belonging to same users, but in other stores","suite":"Spree::Wishlist at ./spec/models/spree/wishlist_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1:4\"}}","suiteSourceFile":"core/spec/models/spree/wishlist_spec.rb"},{"name":".include? is true if the wishlist includes the specified variant","suite":"Spree::Wishlist at ./spec/models/spree/wishlist_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","suiteSourceFile":"core/spec/models/spree/wishlist_spec.rb"},{"name":".to_param returns the wishlists token","suite":"Spree::Wishlist at ./spec/models/spree/wishlist_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1\"}}","suiteSourceFile":"core/spec/models/spree/wishlist_spec.rb"},{"name":".get_by_param returns the wishlist of the token","suite":"Spree::Wishlist at ./spec/models/spree/wishlist_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1\"}}","suiteSourceFile":"core/spec/models/spree/wishlist_spec.rb"},{"name":".get_by_param returns nil when not found","suite":"Spree::Wishlist at ./spec/models/spree/wishlist_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:2\"}}","suiteSourceFile":"core/spec/models/spree/wishlist_spec.rb"},{"name":"#destroy deletes associated wished variants","suite":"Spree::Wishlist at ./spec/models/spree/wishlist_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1\"}}","suiteSourceFile":"core/spec/models/spree/wishlist_spec.rb"},{"name":"#product_ids returns the product ids","suite":"Spree::Wishlist at ./spec/models/spree/wishlist_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1\"}}","suiteSourceFile":"core/spec/models/spree/wishlist_spec.rb"},{"name":"#wished_items_count returns the wished items count","suite":"Spree::Wishlist at ./spec/models/spree/wishlist_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:1\"}}","suiteSourceFile":"core/spec/models/spree/wishlist_spec.rb"},{"name":"#variant_ids returns the variant ids","suite":"Spree::Wishlist at ./spec/models/spree/wishlist_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:1\"}}","suiteSourceFile":"core/spec/models/spree/wishlist_spec.rb"},{"name":"scopes .defunct_without_kind zoneable is present and is of defunct kind example at ./spec/models/spree/zone_member_spec.rb:14","suite":"Spree::ZoneMember at ./spec/models/spree/zone_member_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/zone_member_spec.rb"},{"name":"scopes .defunct_without_kind zoneable is not of defunct kind example at ./spec/models/spree/zone_member_spec.rb:20","suite":"Spree::ZoneMember at ./spec/models/spree/zone_member_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","suiteSourceFile":"core/spec/models/spree/zone_member_spec.rb"},{"name":"scopes .defunct_without_kind zoneable is absent example at ./spec/models/spree/zone_member_spec.rb:26","suite":"Spree::ZoneMember at ./spec/models/spree/zone_member_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/zone_member_spec.rb"},{"name":"#match scopes .remove_previous_default is expected to include zone with default tax","suite":"Spree::Zone at ./spec/models/spree/zone_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","suiteSourceFile":"core/spec/models/spree/zone_spec.rb"},{"name":"#match scopes .remove_previous_default is expected to not include zone with default tax","suite":"Spree::Zone at ./spec/models/spree/zone_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:2\"}}","suiteSourceFile":"core/spec/models/spree/zone_spec.rb"},{"name":"#match callbacks #remove_previous_default is expected to make previous default tax zones to non default tax zones","suite":"Spree::Zone at ./spec/models/spree/zone_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/zone_spec.rb"},{"name":"#match callbacks #nullify_checkout_zone is expected to nullify checkout zone","suite":"Spree::Zone at ./spec/models/spree/zone_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/zone_spec.rb"},{"name":"#match when there is only one qualifying zone returns the qualifying zone","suite":"Spree::Zone at ./spec/models/spree/zone_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","suiteSourceFile":"core/spec/models/spree/zone_spec.rb"},{"name":"#match when there are two qualified zones with same member type when both zones have the same number of members returns the zone that was created first","suite":"Spree::Zone at ./spec/models/spree/zone_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1:1\"}}","suiteSourceFile":"core/spec/models/spree/zone_spec.rb"},{"name":"#match when there are two qualified zones with same member type when one of the zones has fewer members returns the zone with fewer members","suite":"Spree::Zone at ./spec/models/spree/zone_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:2:1\"}}","suiteSourceFile":"core/spec/models/spree/zone_spec.rb"},{"name":"#match when there are two qualified zones with different member types returns the zone with the more specific member type","suite":"Spree::Zone at ./spec/models/spree/zone_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5:1\"}}","suiteSourceFile":"core/spec/models/spree/zone_spec.rb"},{"name":"#match when there are no qualifying zones returns nil","suite":"Spree::Zone at ./spec/models/spree/zone_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6:1\"}}","suiteSourceFile":"core/spec/models/spree/zone_spec.rb"},{"name":"#country_list when zone consists of countries returns a list of countries","suite":"Spree::Zone at ./spec/models/spree/zone_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","suiteSourceFile":"core/spec/models/spree/zone_spec.rb"},{"name":"#country_list when zone consists of states returns a list of countries","suite":"Spree::Zone at ./spec/models/spree/zone_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","suiteSourceFile":"core/spec/models/spree/zone_spec.rb"},{"name":"#include? when zone is country type is true","suite":"Spree::Zone at ./spec/models/spree/zone_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","suiteSourceFile":"core/spec/models/spree/zone_spec.rb"},{"name":"#include? when zone is state type is true","suite":"Spree::Zone at ./spec/models/spree/zone_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","suiteSourceFile":"core/spec/models/spree/zone_spec.rb"},{"name":".default_tax when there is a default tax zone specified is the correct zone","suite":"Spree::Zone at ./spec/models/spree/zone_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1\"}}","suiteSourceFile":"core/spec/models/spree/zone_spec.rb"},{"name":".default_tax when there is no default tax zone specified is nil","suite":"Spree::Zone at ./spec/models/spree/zone_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1\"}}","suiteSourceFile":"core/spec/models/spree/zone_spec.rb"},{"name":"#contains? when the target has no members is false","suite":"Spree::Zone at ./spec/models/spree/zone_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:1\"}}","suiteSourceFile":"core/spec/models/spree/zone_spec.rb"},{"name":"#contains? when the source has no members is false","suite":"Spree::Zone at ./spec/models/spree/zone_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1\"}}","suiteSourceFile":"core/spec/models/spree/zone_spec.rb"},{"name":"#contains? when both zones are the same zone is true","suite":"Spree::Zone at ./spec/models/spree/zone_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3:1\"}}","suiteSourceFile":"core/spec/models/spree/zone_spec.rb"},{"name":"#contains? when checking countries against countries when all members are included in the zone we check against is true","suite":"Spree::Zone at ./spec/models/spree/zone_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:4:1:1\"}}","suiteSourceFile":"core/spec/models/spree/zone_spec.rb"},{"name":"#contains? when checking countries against countries when some members are included in the zone we check against is false","suite":"Spree::Zone at ./spec/models/spree/zone_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:4:2:1\"}}","suiteSourceFile":"core/spec/models/spree/zone_spec.rb"},{"name":"#contains? when checking countries against countries when none of the members are included in the zone we check against is false","suite":"Spree::Zone at ./spec/models/spree/zone_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:4:3:1\"}}","suiteSourceFile":"core/spec/models/spree/zone_spec.rb"},{"name":"#contains? when checking states against states when all members are included in the zone we check against is true","suite":"Spree::Zone at ./spec/models/spree/zone_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:5:1:1\"}}","suiteSourceFile":"core/spec/models/spree/zone_spec.rb"},{"name":"#contains? when checking states against states when some members are included in the zone we check against is false","suite":"Spree::Zone at ./spec/models/spree/zone_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:5:2:1\"}}","suiteSourceFile":"core/spec/models/spree/zone_spec.rb"},{"name":"#contains? when checking states against states when none of the members are included in the zone we check against is false","suite":"Spree::Zone at ./spec/models/spree/zone_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:5:3:1\"}}","suiteSourceFile":"core/spec/models/spree/zone_spec.rb"},{"name":"#contains? when checking country against state is false","suite":"Spree::Zone at ./spec/models/spree/zone_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:6:1\"}}","suiteSourceFile":"core/spec/models/spree/zone_spec.rb"},{"name":"#contains? when checking state against country when all states contained in one of the countries we check against is true","suite":"Spree::Zone at ./spec/models/spree/zone_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:7:1:1\"}}","suiteSourceFile":"core/spec/models/spree/zone_spec.rb"},{"name":"#contains? when checking state against country when some states contained in one of the countries we check against is false","suite":"Spree::Zone at ./spec/models/spree/zone_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:7:2:1\"}}","suiteSourceFile":"core/spec/models/spree/zone_spec.rb"},{"name":"#contains? when checking state against country when none of the states contained in any of the countries we check against is false","suite":"Spree::Zone at ./spec/models/spree/zone_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:7:3:1\"}}","suiteSourceFile":"core/spec/models/spree/zone_spec.rb"},{"name":"#save when default_tax is true clears previous default tax zone","suite":"Spree::Zone at ./spec/models/spree/zone_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1:1\"}}","suiteSourceFile":"core/spec/models/spree/zone_spec.rb"},{"name":"#save when a zone member country is added to an existing zone consisting of state members removes existing country members","suite":"Spree::Zone at ./spec/models/spree/zone_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2:1\"}}","suiteSourceFile":"core/spec/models/spree/zone_spec.rb"},{"name":"#kind returns whatever value you set","suite":"Spree::Zone at ./spec/models/spree/zone_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","suiteSourceFile":"core/spec/models/spree/zone_spec.rb"},{"name":"#kind when the zone consists of country zone members returns the kind of zone member","suite":"Spree::Zone at ./spec/models/spree/zone_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2:1\"}}","suiteSourceFile":"core/spec/models/spree/zone_spec.rb"},{"name":"#potential_matching_zones finding potential matches for a country zone will find all zones with countries covered by the passed in zone","suite":"Spree::Zone at ./spec/models/spree/zone_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1:1\"}}","suiteSourceFile":"core/spec/models/spree/zone_spec.rb"},{"name":"#potential_matching_zones finding potential matches for a country zone only returns each zone once","suite":"Spree::Zone at ./spec/models/spree/zone_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1:2\"}}","suiteSourceFile":"core/spec/models/spree/zone_spec.rb"},{"name":"#potential_matching_zones finding potential matches for a state zone will find all zones which share states covered by passed in zone","suite":"Spree::Zone at ./spec/models/spree/zone_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2:1\"}}","suiteSourceFile":"core/spec/models/spree/zone_spec.rb"},{"name":"#potential_matching_zones finding potential matches for a state zone will find zones that share countries with any states of the passed in zone","suite":"Spree::Zone at ./spec/models/spree/zone_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2:2\"}}","suiteSourceFile":"core/spec/models/spree/zone_spec.rb"},{"name":"#potential_matching_zones finding potential matches for a state zone only returns each zone once","suite":"Spree::Zone at ./spec/models/spree/zone_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2:3\"}}","suiteSourceFile":"core/spec/models/spree/zone_spec.rb"},{"name":"state and country associations has countries associated can access associated countries","suite":"Spree::Zone at ./spec/models/spree/zone_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1:1\"}}","suiteSourceFile":"core/spec/models/spree/zone_spec.rb"},{"name":"state and country associations has states associated can access associated states","suite":"Spree::Zone at ./spec/models/spree/zone_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:2:1\"}}","suiteSourceFile":"core/spec/models/spree/zone_spec.rb"},{"name":"#state_list has countries associated returns states associated to that countries","suite":"Spree::Zone at ./spec/models/spree/zone_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1:1\"}}","suiteSourceFile":"core/spec/models/spree/zone_spec.rb"},{"name":"#state_list has states associated returns that states","suite":"Spree::Zone at ./spec/models/spree/zone_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:2:1\"}}","suiteSourceFile":"core/spec/models/spree/zone_spec.rb"},{"name":"#state_list_for has countries associated returns states associated with the country","suite":"Spree::Zone at ./spec/models/spree/zone_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1:1\"}}","suiteSourceFile":"core/spec/models/spree/zone_spec.rb"},{"name":"#state_list_for has states associated returns states associated with the country","suite":"Spree::Zone at ./spec/models/spree/zone_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2:1\"}}","suiteSourceFile":"core/spec/models/spree/zone_spec.rb"},{"name":"#call returns array with correct values","suite":"Spree::CSV::CustomerPresenter at ./spec/presenters/spree/csv/customer_presenter_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/presenters/spree/csv/customer_presenter_spec.rb"},{"name":"#call when customer does not accept email marketing returns say_no for email marketing","suite":"Spree::CSV::CustomerPresenter at ./spec/presenters/spree/csv/customer_presenter_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/presenters/spree/csv/customer_presenter_spec.rb"},{"name":"#call when customer has no address returns nil for address fields","suite":"Spree::CSV::CustomerPresenter at ./spec/presenters/spree/csv/customer_presenter_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","suiteSourceFile":"core/spec/presenters/spree/csv/customer_presenter_spec.rb"},{"name":"#call when customer has no orders returns zero for total orders and amount spent","suite":"Spree::CSV::CustomerPresenter at ./spec/presenters/spree/csv/customer_presenter_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1\"}}","suiteSourceFile":"core/spec/presenters/spree/csv/customer_presenter_spec.rb"},{"name":"HEADERS constant contains all expected headers","suite":"Spree::CSV::CustomerPresenter at ./spec/presenters/spree/csv/customer_presenter_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/presenters/spree/csv/customer_presenter_spec.rb"},{"name":"metafields includes metafield values at the end of the array","suite":"Spree::CSV::CustomerPresenter at ./spec/presenters/spree/csv/customer_presenter_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/presenters/spree/csv/customer_presenter_spec.rb"},{"name":"metafields when customer has no metafield value returns nil for metafield","suite":"Spree::CSV::CustomerPresenter at ./spec/presenters/spree/csv/customer_presenter_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","suiteSourceFile":"core/spec/presenters/spree/csv/customer_presenter_spec.rb"},{"name":"#call returns the correct CSV data","suite":"Spree::CSV::GiftCardPresenter at ./spec/presenters/spree/csv/gift_card_presenter_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/presenters/spree/csv/gift_card_presenter_spec.rb"},{"name":"#call when gift card has no user returns nil for customer fields","suite":"Spree::CSV::GiftCardPresenter at ./spec/presenters/spree/csv/gift_card_presenter_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/presenters/spree/csv/gift_card_presenter_spec.rb"},{"name":"#call when gift card has no expiration date returns nil for expires at","suite":"Spree::CSV::GiftCardPresenter at ./spec/presenters/spree/csv/gift_card_presenter_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","suiteSourceFile":"core/spec/presenters/spree/csv/gift_card_presenter_spec.rb"},{"name":"HEADERS has the correct headers","suite":"Spree::CSV::GiftCardPresenter at ./spec/presenters/spree/csv/gift_card_presenter_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/presenters/spree/csv/gift_card_presenter_spec.rb"},{"name":"metafields includes metafield values at the end of the array","suite":"Spree::CSV::GiftCardPresenter at ./spec/presenters/spree/csv/gift_card_presenter_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/presenters/spree/csv/gift_card_presenter_spec.rb"},{"name":"metafields when gift card has no metafield value returns nil for metafield","suite":"Spree::CSV::GiftCardPresenter at ./spec/presenters/spree/csv/gift_card_presenter_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","suiteSourceFile":"core/spec/presenters/spree/csv/gift_card_presenter_spec.rb"},{"name":"#call returns array with correct values","suite":"Spree::CSV::NewsletterSubscriberPresenter at ./spec/presenters/spree/csv/newsletter_subscriber_presenter_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/presenters/spree/csv/newsletter_subscriber_presenter_spec.rb"},{"name":"#call when subscriber is not verified returns say_no for verified and nil for verified_at","suite":"Spree::CSV::NewsletterSubscriberPresenter at ./spec/presenters/spree/csv/newsletter_subscriber_presenter_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/presenters/spree/csv/newsletter_subscriber_presenter_spec.rb"},{"name":"#call when subscriber has no user returns nil for customer name and id","suite":"Spree::CSV::NewsletterSubscriberPresenter at ./spec/presenters/spree/csv/newsletter_subscriber_presenter_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","suiteSourceFile":"core/spec/presenters/spree/csv/newsletter_subscriber_presenter_spec.rb"},{"name":"HEADERS constant contains all expected headers","suite":"Spree::CSV::NewsletterSubscriberPresenter at ./spec/presenters/spree/csv/newsletter_subscriber_presenter_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/presenters/spree/csv/newsletter_subscriber_presenter_spec.rb"},{"name":"metafields includes metafield values at the end of the array","suite":"Spree::CSV::NewsletterSubscriberPresenter at ./spec/presenters/spree/csv/newsletter_subscriber_presenter_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/presenters/spree/csv/newsletter_subscriber_presenter_spec.rb"},{"name":"metafields when subscriber has no metafield value returns nil for metafield","suite":"Spree::CSV::NewsletterSubscriberPresenter at ./spec/presenters/spree/csv/newsletter_subscriber_presenter_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","suiteSourceFile":"core/spec/presenters/spree/csv/newsletter_subscriber_presenter_spec.rb"},{"name":"#call returns array with correct values","suite":"Spree::CSV::OrderLineItemPresenter at ./spec/presenters/spree/csv/order_line_items_presenter_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/presenters/spree/csv/order_line_items_presenter_spec.rb"},{"name":"#call when index is not zero returns nil for order-level fields","suite":"Spree::CSV::OrderLineItemPresenter at ./spec/presenters/spree/csv/order_line_items_presenter_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/presenters/spree/csv/order_line_items_presenter_spec.rb"},{"name":"#call when index is not zero returns line item specific fields","suite":"Spree::CSV::OrderLineItemPresenter at ./spec/presenters/spree/csv/order_line_items_presenter_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2\"}}","suiteSourceFile":"core/spec/presenters/spree/csv/order_line_items_presenter_spec.rb"},{"name":"#taxon_dict splits taxon pretty name into array","suite":"Spree::CSV::OrderLineItemPresenter at ./spec/presenters/spree/csv/order_line_items_presenter_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/presenters/spree/csv/order_line_items_presenter_spec.rb"},{"name":"#taxon_dict returns empty array for nil taxon","suite":"Spree::CSV::OrderLineItemPresenter at ./spec/presenters/spree/csv/order_line_items_presenter_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","suiteSourceFile":"core/spec/presenters/spree/csv/order_line_items_presenter_spec.rb"},{"name":"#format_date formats date according to store timezone","suite":"Spree::CSV::OrderLineItemPresenter at ./spec/presenters/spree/csv/order_line_items_presenter_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/presenters/spree/csv/order_line_items_presenter_spec.rb"},{"name":"#format_date returns nil for blank date","suite":"Spree::CSV::OrderLineItemPresenter at ./spec/presenters/spree/csv/order_line_items_presenter_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","suiteSourceFile":"core/spec/presenters/spree/csv/order_line_items_presenter_spec.rb"},{"name":"metafields when index is zero includes metafields at the end of the array","suite":"Spree::CSV::OrderLineItemPresenter at ./spec/presenters/spree/csv/order_line_items_presenter_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1\"}}","suiteSourceFile":"core/spec/presenters/spree/csv/order_line_items_presenter_spec.rb"},{"name":"metafields when index is not zero does not include metafields","suite":"Spree::CSV::OrderLineItemPresenter at ./spec/presenters/spree/csv/order_line_items_presenter_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1\"}}","suiteSourceFile":"core/spec/presenters/spree/csv/order_line_items_presenter_spec.rb"},{"name":"#call returns array with correct values","suite":"Spree::CSV::ProductVariantPresenter at ./spec/presenters/spree/csv/product_variant_presenter_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/presenters/spree/csv/product_variant_presenter_spec.rb"},{"name":"#call when index is not zero returns nil for product-level fields","suite":"Spree::CSV::ProductVariantPresenter at ./spec/presenters/spree/csv/product_variant_presenter_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/presenters/spree/csv/product_variant_presenter_spec.rb"},{"name":"#call when index is not zero returns variant specific fields","suite":"Spree::CSV::ProductVariantPresenter at ./spec/presenters/spree/csv/product_variant_presenter_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2\"}}","suiteSourceFile":"core/spec/presenters/spree/csv/product_variant_presenter_spec.rb"},{"name":"#call images host when default host is set returns images with default host","suite":"Spree::CSV::ProductVariantPresenter at ./spec/presenters/spree/csv/product_variant_presenter_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1:1\"}}","suiteSourceFile":"core/spec/presenters/spree/csv/product_variant_presenter_spec.rb"},{"name":"#call images host when there is no default host returns images with the store url","suite":"Spree::CSV::ProductVariantPresenter at ./spec/presenters/spree/csv/product_variant_presenter_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:2:1\"}}","suiteSourceFile":"core/spec/presenters/spree/csv/product_variant_presenter_spec.rb"},{"name":"#call images host when there is no default host when custom domain is set returns images with the custom domain","suite":"Spree::CSV::ProductVariantPresenter at ./spec/presenters/spree/csv/product_variant_presenter_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:2:2:1\"}}","suiteSourceFile":"core/spec/presenters/spree/csv/product_variant_presenter_spec.rb"},{"name":"#option_type returns option type at given index","suite":"Spree::CSV::ProductVariantPresenter at ./spec/presenters/spree/csv/product_variant_presenter_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/presenters/spree/csv/product_variant_presenter_spec.rb"},{"name":"#option_type returns nil for non-existent index","suite":"Spree::CSV::ProductVariantPresenter at ./spec/presenters/spree/csv/product_variant_presenter_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","suiteSourceFile":"core/spec/presenters/spree/csv/product_variant_presenter_spec.rb"},{"name":"#option_value returns option value presentation for given option type","suite":"Spree::CSV::ProductVariantPresenter at ./spec/presenters/spree/csv/product_variant_presenter_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/presenters/spree/csv/product_variant_presenter_spec.rb"},{"name":"#option_value returns nil for option type without value","suite":"Spree::CSV::ProductVariantPresenter at ./spec/presenters/spree/csv/product_variant_presenter_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","suiteSourceFile":"core/spec/presenters/spree/csv/product_variant_presenter_spec.rb"},{"name":"metafields when index is zero includes metafields at the end of the array","suite":"Spree::CSV::ProductVariantPresenter at ./spec/presenters/spree/csv/product_variant_presenter_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1\"}}","suiteSourceFile":"core/spec/presenters/spree/csv/product_variant_presenter_spec.rb"},{"name":"metafields when index is not zero does not include metafields","suite":"Spree::CSV::ProductVariantPresenter at ./spec/presenters/spree/csv/product_variant_presenter_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1\"}}","suiteSourceFile":"core/spec/presenters/spree/csv/product_variant_presenter_spec.rb"},{"name":"shipping_category when product has shipping category exports shipping category name","suite":"Spree::CSV::ProductVariantPresenter at ./spec/presenters/spree/csv/product_variant_presenter_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:1\"}}","suiteSourceFile":"core/spec/presenters/spree/csv/product_variant_presenter_spec.rb"},{"name":"shipping_category when product has no shipping category explicitly set exports the assigned shipping category","suite":"Spree::CSV::ProductVariantPresenter at ./spec/presenters/spree/csv/product_variant_presenter_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1\"}}","suiteSourceFile":"core/spec/presenters/spree/csv/product_variant_presenter_spec.rb"},{"name":"#to_a returns filterable Option Types and Values","suite":"Spree::Filters::OptionsPresenter at ./spec/presenters/spree/filters/options_presenter_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/presenters/spree/filters/options_presenter_spec.rb"},{"name":"#to_i returns price amount","suite":"Spree::Filters::PricePresenter at ./spec/presenters/spree/filters/price_presenter_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/presenters/spree/filters/price_presenter_spec.rb"},{"name":"#to_s returns a formatted price","suite":"Spree::Filters::PricePresenter at ./spec/presenters/spree/filters/price_presenter_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/presenters/spree/filters/price_presenter_spec.rb"},{"name":".from_param builds a price range based on a param","suite":"Spree::Filters::PriceRangePresenter at ./spec/presenters/spree/filters/price_range_presenter_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/presenters/spree/filters/price_range_presenter_spec.rb"},{"name":"#to_param returns price range as param","suite":"Spree::Filters::PriceRangePresenter at ./spec/presenters/spree/filters/price_range_presenter_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/presenters/spree/filters/price_range_presenter_spec.rb"},{"name":"#to_s returns a formatted price range","suite":"Spree::Filters::PriceRangePresenter at ./spec/presenters/spree/filters/price_range_presenter_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/presenters/spree/filters/price_range_presenter_spec.rb"},{"name":"#to_a returns filterable Product Properties","suite":"Spree::Filters::PropertiesPresenter at ./spec/presenters/spree/filters/properties_presenter_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/presenters/spree/filters/properties_presenter_spec.rb"},{"name":"#uniq_values returns unique Product Properties values for a given list of Product Properties","suite":"Spree::Filters::PropertyPresenter at ./spec/presenters/spree/filters/property_presenter_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/presenters/spree/filters/property_presenter_spec.rb"},{"name":"when the quantifier is less_than #to_param returns price range as param","suite":"Spree::Filters::QuantifiedPriceRangePresenter at ./spec/presenters/spree/filters/quantified_price_range_presenter_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/presenters/spree/filters/quantified_price_range_presenter_spec.rb"},{"name":"when the quantifier is less_than #to_s returns a formatted price range","suite":"Spree::Filters::QuantifiedPriceRangePresenter at ./spec/presenters/spree/filters/quantified_price_range_presenter_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/presenters/spree/filters/quantified_price_range_presenter_spec.rb"},{"name":"when the quantifier is more_than #to_param returns price range as param","suite":"Spree::Filters::QuantifiedPriceRangePresenter at ./spec/presenters/spree/filters/quantified_price_range_presenter_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","suiteSourceFile":"core/spec/presenters/spree/filters/quantified_price_range_presenter_spec.rb"},{"name":"when the quantifier is more_than #to_s returns a formatted price range","suite":"Spree::Filters::QuantifiedPriceRangePresenter at ./spec/presenters/spree/filters/quantified_price_range_presenter_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","suiteSourceFile":"core/spec/presenters/spree/filters/quantified_price_range_presenter_spec.rb"},{"name":"#call returns an array of variant with option_values and images","suite":"Spree::VariantPresenter at ./spec/presenters/spree/variant_presenter_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/presenters/spree/variant_presenter_spec.rb"},{"name":"#call generates request body without raising any errors","suite":"Spree::VariantPresenter at ./spec/presenters/spree/variant_presenter_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/presenters/spree/variant_presenter_spec.rb"},{"name":"#default_variant returns first Variant of first Option Value of first Option Type","suite":"Spree::Variants::OptionTypesPresenter at ./spec/presenters/spree/variants/option_types_presenter_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/presenters/spree/variants/option_types_presenter_spec.rb"},{"name":"#default_variant default variant of product backorderable returns the same Variant as Product#default_variant","suite":"Spree::Variants::OptionTypesPresenter at ./spec/presenters/spree/variants/option_types_presenter_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","suiteSourceFile":"core/spec/presenters/spree/variants/option_types_presenter_spec.rb"},{"name":"#default_variant default variant of product in stock returns the same Variant as Product#default_variant","suite":"Spree::Variants::OptionTypesPresenter at ./spec/presenters/spree/variants/option_types_presenter_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","suiteSourceFile":"core/spec/presenters/spree/variants/option_types_presenter_spec.rb"},{"name":"#default_variant with in-stock Variant returns first in-stock Variant","suite":"Spree::Variants::OptionTypesPresenter at ./spec/presenters/spree/variants/option_types_presenter_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","suiteSourceFile":"core/spec/presenters/spree/variants/option_types_presenter_spec.rb"},{"name":"#default_variant with backorderable Variant returns first backorderable Variant","suite":"Spree::Variants::OptionTypesPresenter at ./spec/presenters/spree/variants/option_types_presenter_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1\"}}","suiteSourceFile":"core/spec/presenters/spree/variants/option_types_presenter_spec.rb"},{"name":"#default_variant without Option Types example at ./spec/presenters/spree/variants/option_types_presenter_spec.rb:85","suite":"Spree::Variants::OptionTypesPresenter at ./spec/presenters/spree/variants/option_types_presenter_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5:1\"}}","suiteSourceFile":"core/spec/presenters/spree/variants/option_types_presenter_spec.rb"},{"name":"#options returns serialized options for Option Types and Option Values","suite":"Spree::Variants::OptionTypesPresenter at ./spec/presenters/spree/variants/option_types_presenter_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/presenters/spree/variants/option_types_presenter_spec.rb"},{"name":"#options without Option Types example at ./spec/presenters/spree/variants/option_types_presenter_spec.rb:166","suite":"Spree::Variants::OptionTypesPresenter at ./spec/presenters/spree/variants/option_types_presenter_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","suiteSourceFile":"core/spec/presenters/spree/variants/option_types_presenter_spec.rb"},{"name":"#to_sentence orders by bar than foo","suite":"Spree::Variants::OptionsPresenter at ./spec/presenters/spree/variants/options_presenter_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/presenters/spree/variants/options_presenter_spec.rb"},{"name":"#to_hash when variant has option values returns valid hash","suite":"Spree::Variants::OptionsPresenter at ./spec/presenters/spree/variants/options_presenter_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","suiteSourceFile":"core/spec/presenters/spree/variants/options_presenter_spec.rb"},{"name":"#to_hash when variant has no option values returns empty hash","suite":"Spree::Variants::OptionsPresenter at ./spec/presenters/spree/variants/options_presenter_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","suiteSourceFile":"core/spec/presenters/spree/variants/options_presenter_spec.rb"},{"name":"#as_json includes identity attributes","suite":"Spree::Events::AssetSerializer at ./spec/serializers/spree/events/asset_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/serializers/spree/events/asset_serializer_spec.rb"},{"name":"#as_json includes viewable polymorphic reference","suite":"Spree::Events::AssetSerializer at ./spec/serializers/spree/events/asset_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/serializers/spree/events/asset_serializer_spec.rb"},{"name":"#as_json includes position","suite":"Spree::Events::AssetSerializer at ./spec/serializers/spree/events/asset_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/serializers/spree/events/asset_serializer_spec.rb"},{"name":"#as_json includes alt text","suite":"Spree::Events::AssetSerializer at ./spec/serializers/spree/events/asset_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","suiteSourceFile":"core/spec/serializers/spree/events/asset_serializer_spec.rb"},{"name":"#as_json includes timestamps","suite":"Spree::Events::AssetSerializer at ./spec/serializers/spree/events/asset_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","suiteSourceFile":"core/spec/serializers/spree/events/asset_serializer_spec.rb"},{"name":"#as_json returns a hash with attributes","suite":"Spree::Events::BaseSerializer at ./spec/serializers/spree/events/base_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/serializers/spree/events/base_serializer_spec.rb"},{"name":"#as_json formats timestamps as ISO8601","suite":"Spree::Events::BaseSerializer at ./spec/serializers/spree/events/base_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/serializers/spree/events/base_serializer_spec.rb"},{"name":".serialize creates an instance and calls as_json","suite":"Spree::Events::BaseSerializer at ./spec/serializers/spree/events/base_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/serializers/spree/events/base_serializer_spec.rb"},{"name":"#timestamp returns nil for nil values","suite":"Spree::Events::BaseSerializer at ./spec/serializers/spree/events/base_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/serializers/spree/events/base_serializer_spec.rb"},{"name":"#timestamp returns ISO8601 formatted string","suite":"Spree::Events::BaseSerializer at ./spec/serializers/spree/events/base_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","suiteSourceFile":"core/spec/serializers/spree/events/base_serializer_spec.rb"},{"name":"#money returns nil for nil values","suite":"Spree::Events::BaseSerializer at ./spec/serializers/spree/events/base_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/serializers/spree/events/base_serializer_spec.rb"},{"name":"#money returns decimal value for numbers","suite":"Spree::Events::BaseSerializer at ./spec/serializers/spree/events/base_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2\"}}","suiteSourceFile":"core/spec/serializers/spree/events/base_serializer_spec.rb"},{"name":"#money returns decimal value for BigDecimal","suite":"Spree::Events::BaseSerializer at ./spec/serializers/spree/events/base_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3\"}}","suiteSourceFile":"core/spec/serializers/spree/events/base_serializer_spec.rb"},{"name":"#event_name returns the event name from context","suite":"Spree::Events::BaseSerializer at ./spec/serializers/spree/events/base_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","suiteSourceFile":"core/spec/serializers/spree/events/base_serializer_spec.rb"},{"name":"#attribute returns the attribute value if it exists","suite":"Spree::Events::BaseSerializer at ./spec/serializers/spree/events/base_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","suiteSourceFile":"core/spec/serializers/spree/events/base_serializer_spec.rb"},{"name":"#attribute returns nil if the attribute does not exist","suite":"Spree::Events::BaseSerializer at ./spec/serializers/spree/events/base_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2\"}}","suiteSourceFile":"core/spec/serializers/spree/events/base_serializer_spec.rb"},{"name":"#as_json includes identity attributes","suite":"Spree::Events::CustomerReturnSerializer at ./spec/serializers/spree/events/customer_return_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/serializers/spree/events/customer_return_serializer_spec.rb"},{"name":"#as_json includes foreign keys","suite":"Spree::Events::CustomerReturnSerializer at ./spec/serializers/spree/events/customer_return_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/serializers/spree/events/customer_return_serializer_spec.rb"},{"name":"#as_json includes timestamps","suite":"Spree::Events::CustomerReturnSerializer at ./spec/serializers/spree/events/customer_return_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/serializers/spree/events/customer_return_serializer_spec.rb"},{"name":"#as_json includes identity attributes","suite":"Spree::Events::DigitalLinkSerializer at ./spec/serializers/spree/events/digital_link_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/serializers/spree/events/digital_link_serializer_spec.rb"},{"name":"#as_json includes foreign keys","suite":"Spree::Events::DigitalLinkSerializer at ./spec/serializers/spree/events/digital_link_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/serializers/spree/events/digital_link_serializer_spec.rb"},{"name":"#as_json includes access_counter","suite":"Spree::Events::DigitalLinkSerializer at ./spec/serializers/spree/events/digital_link_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/serializers/spree/events/digital_link_serializer_spec.rb"},{"name":"#as_json includes timestamps","suite":"Spree::Events::DigitalLinkSerializer at ./spec/serializers/spree/events/digital_link_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","suiteSourceFile":"core/spec/serializers/spree/events/digital_link_serializer_spec.rb"},{"name":"#as_json includes identity attributes","suite":"Spree::Events::DigitalSerializer at ./spec/serializers/spree/events/digital_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/serializers/spree/events/digital_serializer_spec.rb"},{"name":"#as_json includes variant_id","suite":"Spree::Events::DigitalSerializer at ./spec/serializers/spree/events/digital_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/serializers/spree/events/digital_serializer_spec.rb"},{"name":"#as_json includes timestamps","suite":"Spree::Events::DigitalSerializer at ./spec/serializers/spree/events/digital_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/serializers/spree/events/digital_serializer_spec.rb"},{"name":"#as_json includes identity attributes","suite":"Spree::Events::ExportSerializer at ./spec/serializers/spree/events/export_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/serializers/spree/events/export_serializer_spec.rb"},{"name":"#as_json includes type","suite":"Spree::Events::ExportSerializer at ./spec/serializers/spree/events/export_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/serializers/spree/events/export_serializer_spec.rb"},{"name":"#as_json includes format","suite":"Spree::Events::ExportSerializer at ./spec/serializers/spree/events/export_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/serializers/spree/events/export_serializer_spec.rb"},{"name":"#as_json includes foreign keys","suite":"Spree::Events::ExportSerializer at ./spec/serializers/spree/events/export_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","suiteSourceFile":"core/spec/serializers/spree/events/export_serializer_spec.rb"},{"name":"#as_json includes timestamps","suite":"Spree::Events::ExportSerializer at ./spec/serializers/spree/events/export_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","suiteSourceFile":"core/spec/serializers/spree/events/export_serializer_spec.rb"},{"name":"#as_json includes identity attributes","suite":"Spree::Events::GiftCardBatchSerializer at ./spec/serializers/spree/events/gift_card_batch_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/serializers/spree/events/gift_card_batch_serializer_spec.rb"},{"name":"#as_json includes codes_count","suite":"Spree::Events::GiftCardBatchSerializer at ./spec/serializers/spree/events/gift_card_batch_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/serializers/spree/events/gift_card_batch_serializer_spec.rb"},{"name":"#as_json includes amount fields","suite":"Spree::Events::GiftCardBatchSerializer at ./spec/serializers/spree/events/gift_card_batch_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/serializers/spree/events/gift_card_batch_serializer_spec.rb"},{"name":"#as_json includes prefix","suite":"Spree::Events::GiftCardBatchSerializer at ./spec/serializers/spree/events/gift_card_batch_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","suiteSourceFile":"core/spec/serializers/spree/events/gift_card_batch_serializer_spec.rb"},{"name":"#as_json includes expires_at","suite":"Spree::Events::GiftCardBatchSerializer at ./spec/serializers/spree/events/gift_card_batch_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","suiteSourceFile":"core/spec/serializers/spree/events/gift_card_batch_serializer_spec.rb"},{"name":"#as_json includes foreign keys","suite":"Spree::Events::GiftCardBatchSerializer at ./spec/serializers/spree/events/gift_card_batch_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","suiteSourceFile":"core/spec/serializers/spree/events/gift_card_batch_serializer_spec.rb"},{"name":"#as_json includes timestamps","suite":"Spree::Events::GiftCardBatchSerializer at ./spec/serializers/spree/events/gift_card_batch_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7\"}}","suiteSourceFile":"core/spec/serializers/spree/events/gift_card_batch_serializer_spec.rb"},{"name":"#as_json includes identity attributes","suite":"Spree::Events::GiftCardSerializer at ./spec/serializers/spree/events/gift_card_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/serializers/spree/events/gift_card_serializer_spec.rb"},{"name":"#as_json includes state as string","suite":"Spree::Events::GiftCardSerializer at ./spec/serializers/spree/events/gift_card_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/serializers/spree/events/gift_card_serializer_spec.rb"},{"name":"#as_json includes amount fields","suite":"Spree::Events::GiftCardSerializer at ./spec/serializers/spree/events/gift_card_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/serializers/spree/events/gift_card_serializer_spec.rb"},{"name":"#as_json includes currency","suite":"Spree::Events::GiftCardSerializer at ./spec/serializers/spree/events/gift_card_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","suiteSourceFile":"core/spec/serializers/spree/events/gift_card_serializer_spec.rb"},{"name":"#as_json includes foreign keys","suite":"Spree::Events::GiftCardSerializer at ./spec/serializers/spree/events/gift_card_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","suiteSourceFile":"core/spec/serializers/spree/events/gift_card_serializer_spec.rb"},{"name":"#as_json includes dates","suite":"Spree::Events::GiftCardSerializer at ./spec/serializers/spree/events/gift_card_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","suiteSourceFile":"core/spec/serializers/spree/events/gift_card_serializer_spec.rb"},{"name":"#as_json includes timestamps","suite":"Spree::Events::GiftCardSerializer at ./spec/serializers/spree/events/gift_card_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7\"}}","suiteSourceFile":"core/spec/serializers/spree/events/gift_card_serializer_spec.rb"},{"name":"#as_json includes identity attributes","suite":"Spree::Events::ImportRowSerializer at ./spec/serializers/spree/events/import_row_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/serializers/spree/events/import_row_serializer_spec.rb"},{"name":"#as_json includes import reference","suite":"Spree::Events::ImportRowSerializer at ./spec/serializers/spree/events/import_row_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/serializers/spree/events/import_row_serializer_spec.rb"},{"name":"#as_json includes row_number","suite":"Spree::Events::ImportRowSerializer at ./spec/serializers/spree/events/import_row_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/serializers/spree/events/import_row_serializer_spec.rb"},{"name":"#as_json includes status","suite":"Spree::Events::ImportRowSerializer at ./spec/serializers/spree/events/import_row_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","suiteSourceFile":"core/spec/serializers/spree/events/import_row_serializer_spec.rb"},{"name":"#as_json includes validation_errors","suite":"Spree::Events::ImportRowSerializer at ./spec/serializers/spree/events/import_row_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","suiteSourceFile":"core/spec/serializers/spree/events/import_row_serializer_spec.rb"},{"name":"#as_json includes item polymorphic reference","suite":"Spree::Events::ImportRowSerializer at ./spec/serializers/spree/events/import_row_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","suiteSourceFile":"core/spec/serializers/spree/events/import_row_serializer_spec.rb"},{"name":"#as_json includes timestamps","suite":"Spree::Events::ImportRowSerializer at ./spec/serializers/spree/events/import_row_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7\"}}","suiteSourceFile":"core/spec/serializers/spree/events/import_row_serializer_spec.rb"},{"name":"#as_json with validation errors includes validation error message","suite":"Spree::Events::ImportRowSerializer at ./spec/serializers/spree/events/import_row_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8:1\"}}","suiteSourceFile":"core/spec/serializers/spree/events/import_row_serializer_spec.rb"},{"name":"#as_json includes identity attributes","suite":"Spree::Events::ImportSerializer at ./spec/serializers/spree/events/import_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/serializers/spree/events/import_serializer_spec.rb"},{"name":"#as_json includes type","suite":"Spree::Events::ImportSerializer at ./spec/serializers/spree/events/import_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/serializers/spree/events/import_serializer_spec.rb"},{"name":"#as_json includes status as string","suite":"Spree::Events::ImportSerializer at ./spec/serializers/spree/events/import_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/serializers/spree/events/import_serializer_spec.rb"},{"name":"#as_json includes owner polymorphic reference","suite":"Spree::Events::ImportSerializer at ./spec/serializers/spree/events/import_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","suiteSourceFile":"core/spec/serializers/spree/events/import_serializer_spec.rb"},{"name":"#as_json includes user_id","suite":"Spree::Events::ImportSerializer at ./spec/serializers/spree/events/import_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","suiteSourceFile":"core/spec/serializers/spree/events/import_serializer_spec.rb"},{"name":"#as_json includes rows_count","suite":"Spree::Events::ImportSerializer at ./spec/serializers/spree/events/import_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","suiteSourceFile":"core/spec/serializers/spree/events/import_serializer_spec.rb"},{"name":"#as_json includes timestamps","suite":"Spree::Events::ImportSerializer at ./spec/serializers/spree/events/import_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7\"}}","suiteSourceFile":"core/spec/serializers/spree/events/import_serializer_spec.rb"},{"name":"#as_json includes identity attributes","suite":"Spree::Events::InvitationSerializer at ./spec/serializers/spree/events/invitation_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/serializers/spree/events/invitation_serializer_spec.rb"},{"name":"#as_json includes status as string","suite":"Spree::Events::InvitationSerializer at ./spec/serializers/spree/events/invitation_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/serializers/spree/events/invitation_serializer_spec.rb"},{"name":"#as_json includes resource polymorphic reference","suite":"Spree::Events::InvitationSerializer at ./spec/serializers/spree/events/invitation_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/serializers/spree/events/invitation_serializer_spec.rb"},{"name":"#as_json includes inviter polymorphic reference","suite":"Spree::Events::InvitationSerializer at ./spec/serializers/spree/events/invitation_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","suiteSourceFile":"core/spec/serializers/spree/events/invitation_serializer_spec.rb"},{"name":"#as_json includes invitee polymorphic reference","suite":"Spree::Events::InvitationSerializer at ./spec/serializers/spree/events/invitation_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","suiteSourceFile":"core/spec/serializers/spree/events/invitation_serializer_spec.rb"},{"name":"#as_json includes role_id","suite":"Spree::Events::InvitationSerializer at ./spec/serializers/spree/events/invitation_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","suiteSourceFile":"core/spec/serializers/spree/events/invitation_serializer_spec.rb"},{"name":"#as_json includes dates","suite":"Spree::Events::InvitationSerializer at ./spec/serializers/spree/events/invitation_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7\"}}","suiteSourceFile":"core/spec/serializers/spree/events/invitation_serializer_spec.rb"},{"name":"#as_json includes timestamps","suite":"Spree::Events::InvitationSerializer at ./spec/serializers/spree/events/invitation_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8\"}}","suiteSourceFile":"core/spec/serializers/spree/events/invitation_serializer_spec.rb"},{"name":"#as_json includes identity attributes","suite":"Spree::Events::LineItemSerializer at ./spec/serializers/spree/events/line_item_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/serializers/spree/events/line_item_serializer_spec.rb"},{"name":"#as_json includes quantity","suite":"Spree::Events::LineItemSerializer at ./spec/serializers/spree/events/line_item_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/serializers/spree/events/line_item_serializer_spec.rb"},{"name":"#as_json includes price fields","suite":"Spree::Events::LineItemSerializer at ./spec/serializers/spree/events/line_item_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/serializers/spree/events/line_item_serializer_spec.rb"},{"name":"#as_json includes adjustment totals","suite":"Spree::Events::LineItemSerializer at ./spec/serializers/spree/events/line_item_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","suiteSourceFile":"core/spec/serializers/spree/events/line_item_serializer_spec.rb"},{"name":"#as_json includes foreign keys","suite":"Spree::Events::LineItemSerializer at ./spec/serializers/spree/events/line_item_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","suiteSourceFile":"core/spec/serializers/spree/events/line_item_serializer_spec.rb"},{"name":"#as_json includes timestamps","suite":"Spree::Events::LineItemSerializer at ./spec/serializers/spree/events/line_item_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","suiteSourceFile":"core/spec/serializers/spree/events/line_item_serializer_spec.rb"},{"name":"#as_json includes identity attributes","suite":"Spree::Events::NewsletterSubscriberSerializer at ./spec/serializers/spree/events/newsletter_subscriber_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/serializers/spree/events/newsletter_subscriber_serializer_spec.rb"},{"name":"#as_json includes verified status","suite":"Spree::Events::NewsletterSubscriberSerializer at ./spec/serializers/spree/events/newsletter_subscriber_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/serializers/spree/events/newsletter_subscriber_serializer_spec.rb"},{"name":"#as_json includes user_id","suite":"Spree::Events::NewsletterSubscriberSerializer at ./spec/serializers/spree/events/newsletter_subscriber_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/serializers/spree/events/newsletter_subscriber_serializer_spec.rb"},{"name":"#as_json includes timestamps","suite":"Spree::Events::NewsletterSubscriberSerializer at ./spec/serializers/spree/events/newsletter_subscriber_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","suiteSourceFile":"core/spec/serializers/spree/events/newsletter_subscriber_serializer_spec.rb"},{"name":"#as_json when not verified returns verified as false","suite":"Spree::Events::NewsletterSubscriberSerializer at ./spec/serializers/spree/events/newsletter_subscriber_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5:1\"}}","suiteSourceFile":"core/spec/serializers/spree/events/newsletter_subscriber_serializer_spec.rb"},{"name":"#as_json includes identity attributes","suite":"Spree::Events::OrderSerializer at ./spec/serializers/spree/events/order_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/serializers/spree/events/order_serializer_spec.rb"},{"name":"#as_json includes state attributes as strings","suite":"Spree::Events::OrderSerializer at ./spec/serializers/spree/events/order_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/serializers/spree/events/order_serializer_spec.rb"},{"name":"#as_json includes totals","suite":"Spree::Events::OrderSerializer at ./spec/serializers/spree/events/order_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/serializers/spree/events/order_serializer_spec.rb"},{"name":"#as_json includes tax totals","suite":"Spree::Events::OrderSerializer at ./spec/serializers/spree/events/order_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","suiteSourceFile":"core/spec/serializers/spree/events/order_serializer_spec.rb"},{"name":"#as_json includes item count and currency","suite":"Spree::Events::OrderSerializer at ./spec/serializers/spree/events/order_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","suiteSourceFile":"core/spec/serializers/spree/events/order_serializer_spec.rb"},{"name":"#as_json includes email","suite":"Spree::Events::OrderSerializer at ./spec/serializers/spree/events/order_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","suiteSourceFile":"core/spec/serializers/spree/events/order_serializer_spec.rb"},{"name":"#as_json includes foreign keys","suite":"Spree::Events::OrderSerializer at ./spec/serializers/spree/events/order_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7\"}}","suiteSourceFile":"core/spec/serializers/spree/events/order_serializer_spec.rb"},{"name":"#as_json includes timestamps","suite":"Spree::Events::OrderSerializer at ./spec/serializers/spree/events/order_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8\"}}","suiteSourceFile":"core/spec/serializers/spree/events/order_serializer_spec.rb"},{"name":"#as_json does not include associations","suite":"Spree::Events::OrderSerializer at ./spec/serializers/spree/events/order_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:9\"}}","suiteSourceFile":"core/spec/serializers/spree/events/order_serializer_spec.rb"},{"name":"#as_json includes identity attributes","suite":"Spree::Events::PaymentSerializer at ./spec/serializers/spree/events/payment_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/serializers/spree/events/payment_serializer_spec.rb"},{"name":"#as_json includes state as string","suite":"Spree::Events::PaymentSerializer at ./spec/serializers/spree/events/payment_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/serializers/spree/events/payment_serializer_spec.rb"},{"name":"#as_json includes amount","suite":"Spree::Events::PaymentSerializer at ./spec/serializers/spree/events/payment_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/serializers/spree/events/payment_serializer_spec.rb"},{"name":"#as_json includes foreign keys","suite":"Spree::Events::PaymentSerializer at ./spec/serializers/spree/events/payment_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","suiteSourceFile":"core/spec/serializers/spree/events/payment_serializer_spec.rb"},{"name":"#as_json includes source polymorphic reference","suite":"Spree::Events::PaymentSerializer at ./spec/serializers/spree/events/payment_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","suiteSourceFile":"core/spec/serializers/spree/events/payment_serializer_spec.rb"},{"name":"#as_json includes timestamps","suite":"Spree::Events::PaymentSerializer at ./spec/serializers/spree/events/payment_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","suiteSourceFile":"core/spec/serializers/spree/events/payment_serializer_spec.rb"},{"name":"#as_json does not include associations","suite":"Spree::Events::PaymentSerializer at ./spec/serializers/spree/events/payment_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7\"}}","suiteSourceFile":"core/spec/serializers/spree/events/payment_serializer_spec.rb"},{"name":"#as_json includes identity attributes","suite":"Spree::Events::PostCategorySerializer at ./spec/serializers/spree/events/post_category_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/serializers/spree/events/post_category_serializer_spec.rb"},{"name":"#as_json includes store_id","suite":"Spree::Events::PostCategorySerializer at ./spec/serializers/spree/events/post_category_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/serializers/spree/events/post_category_serializer_spec.rb"},{"name":"#as_json includes timestamps","suite":"Spree::Events::PostCategorySerializer at ./spec/serializers/spree/events/post_category_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/serializers/spree/events/post_category_serializer_spec.rb"},{"name":"#as_json includes identity attributes","suite":"Spree::Events::PostSerializer at ./spec/serializers/spree/events/post_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/serializers/spree/events/post_serializer_spec.rb"},{"name":"#as_json includes meta fields","suite":"Spree::Events::PostSerializer at ./spec/serializers/spree/events/post_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/serializers/spree/events/post_serializer_spec.rb"},{"name":"#as_json includes published_at","suite":"Spree::Events::PostSerializer at ./spec/serializers/spree/events/post_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/serializers/spree/events/post_serializer_spec.rb"},{"name":"#as_json includes deleted_at","suite":"Spree::Events::PostSerializer at ./spec/serializers/spree/events/post_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","suiteSourceFile":"core/spec/serializers/spree/events/post_serializer_spec.rb"},{"name":"#as_json includes foreign keys","suite":"Spree::Events::PostSerializer at ./spec/serializers/spree/events/post_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","suiteSourceFile":"core/spec/serializers/spree/events/post_serializer_spec.rb"},{"name":"#as_json includes timestamps","suite":"Spree::Events::PostSerializer at ./spec/serializers/spree/events/post_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","suiteSourceFile":"core/spec/serializers/spree/events/post_serializer_spec.rb"},{"name":"#as_json includes identity attributes","suite":"Spree::Events::PriceSerializer at ./spec/serializers/spree/events/price_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/serializers/spree/events/price_serializer_spec.rb"},{"name":"#as_json includes amount fields","suite":"Spree::Events::PriceSerializer at ./spec/serializers/spree/events/price_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/serializers/spree/events/price_serializer_spec.rb"},{"name":"#as_json includes variant_id","suite":"Spree::Events::PriceSerializer at ./spec/serializers/spree/events/price_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/serializers/spree/events/price_serializer_spec.rb"},{"name":"#as_json includes deleted_at","suite":"Spree::Events::PriceSerializer at ./spec/serializers/spree/events/price_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","suiteSourceFile":"core/spec/serializers/spree/events/price_serializer_spec.rb"},{"name":"#as_json includes timestamps","suite":"Spree::Events::PriceSerializer at ./spec/serializers/spree/events/price_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","suiteSourceFile":"core/spec/serializers/spree/events/price_serializer_spec.rb"},{"name":"#as_json includes identity attributes","suite":"Spree::Events::ProductSerializer at ./spec/serializers/spree/events/product_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/serializers/spree/events/product_serializer_spec.rb"},{"name":"#as_json includes status as string","suite":"Spree::Events::ProductSerializer at ./spec/serializers/spree/events/product_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/serializers/spree/events/product_serializer_spec.rb"},{"name":"#as_json includes availability timestamps","suite":"Spree::Events::ProductSerializer at ./spec/serializers/spree/events/product_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/serializers/spree/events/product_serializer_spec.rb"},{"name":"#as_json includes timestamps","suite":"Spree::Events::ProductSerializer at ./spec/serializers/spree/events/product_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","suiteSourceFile":"core/spec/serializers/spree/events/product_serializer_spec.rb"},{"name":"#as_json does not include associations","suite":"Spree::Events::ProductSerializer at ./spec/serializers/spree/events/product_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","suiteSourceFile":"core/spec/serializers/spree/events/product_serializer_spec.rb"},{"name":"#as_json includes identity attributes","suite":"Spree::Events::PromotionSerializer at ./spec/serializers/spree/events/promotion_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/serializers/spree/events/promotion_serializer_spec.rb"},{"name":"#as_json includes code","suite":"Spree::Events::PromotionSerializer at ./spec/serializers/spree/events/promotion_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/serializers/spree/events/promotion_serializer_spec.rb"},{"name":"#as_json includes description","suite":"Spree::Events::PromotionSerializer at ./spec/serializers/spree/events/promotion_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/serializers/spree/events/promotion_serializer_spec.rb"},{"name":"#as_json includes type and kind","suite":"Spree::Events::PromotionSerializer at ./spec/serializers/spree/events/promotion_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","suiteSourceFile":"core/spec/serializers/spree/events/promotion_serializer_spec.rb"},{"name":"#as_json includes policy settings","suite":"Spree::Events::PromotionSerializer at ./spec/serializers/spree/events/promotion_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","suiteSourceFile":"core/spec/serializers/spree/events/promotion_serializer_spec.rb"},{"name":"#as_json includes multi-code settings","suite":"Spree::Events::PromotionSerializer at ./spec/serializers/spree/events/promotion_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","suiteSourceFile":"core/spec/serializers/spree/events/promotion_serializer_spec.rb"},{"name":"#as_json includes date range","suite":"Spree::Events::PromotionSerializer at ./spec/serializers/spree/events/promotion_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7\"}}","suiteSourceFile":"core/spec/serializers/spree/events/promotion_serializer_spec.rb"},{"name":"#as_json includes promotion_category_id","suite":"Spree::Events::PromotionSerializer at ./spec/serializers/spree/events/promotion_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8\"}}","suiteSourceFile":"core/spec/serializers/spree/events/promotion_serializer_spec.rb"},{"name":"#as_json includes timestamps","suite":"Spree::Events::PromotionSerializer at ./spec/serializers/spree/events/promotion_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:9\"}}","suiteSourceFile":"core/spec/serializers/spree/events/promotion_serializer_spec.rb"},{"name":"#as_json includes identity attributes","suite":"Spree::Events::RefundSerializer at ./spec/serializers/spree/events/refund_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/serializers/spree/events/refund_serializer_spec.rb"},{"name":"#as_json includes amount","suite":"Spree::Events::RefundSerializer at ./spec/serializers/spree/events/refund_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/serializers/spree/events/refund_serializer_spec.rb"},{"name":"#as_json includes transaction_id","suite":"Spree::Events::RefundSerializer at ./spec/serializers/spree/events/refund_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/serializers/spree/events/refund_serializer_spec.rb"},{"name":"#as_json includes foreign keys","suite":"Spree::Events::RefundSerializer at ./spec/serializers/spree/events/refund_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","suiteSourceFile":"core/spec/serializers/spree/events/refund_serializer_spec.rb"},{"name":"#as_json includes timestamps","suite":"Spree::Events::RefundSerializer at ./spec/serializers/spree/events/refund_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","suiteSourceFile":"core/spec/serializers/spree/events/refund_serializer_spec.rb"},{"name":"#as_json includes identity attributes","suite":"Spree::Events::ReimbursementSerializer at ./spec/serializers/spree/events/reimbursement_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/serializers/spree/events/reimbursement_serializer_spec.rb"},{"name":"#as_json includes reimbursement_status","suite":"Spree::Events::ReimbursementSerializer at ./spec/serializers/spree/events/reimbursement_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/serializers/spree/events/reimbursement_serializer_spec.rb"},{"name":"#as_json includes total","suite":"Spree::Events::ReimbursementSerializer at ./spec/serializers/spree/events/reimbursement_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/serializers/spree/events/reimbursement_serializer_spec.rb"},{"name":"#as_json includes foreign keys","suite":"Spree::Events::ReimbursementSerializer at ./spec/serializers/spree/events/reimbursement_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","suiteSourceFile":"core/spec/serializers/spree/events/reimbursement_serializer_spec.rb"},{"name":"#as_json includes timestamps","suite":"Spree::Events::ReimbursementSerializer at ./spec/serializers/spree/events/reimbursement_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","suiteSourceFile":"core/spec/serializers/spree/events/reimbursement_serializer_spec.rb"},{"name":"#as_json includes identity attributes","suite":"Spree::Events::ReportSerializer at ./spec/serializers/spree/events/report_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/serializers/spree/events/report_serializer_spec.rb"},{"name":"#as_json includes store reference","suite":"Spree::Events::ReportSerializer at ./spec/serializers/spree/events/report_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/serializers/spree/events/report_serializer_spec.rb"},{"name":"#as_json includes user reference","suite":"Spree::Events::ReportSerializer at ./spec/serializers/spree/events/report_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/serializers/spree/events/report_serializer_spec.rb"},{"name":"#as_json includes currency","suite":"Spree::Events::ReportSerializer at ./spec/serializers/spree/events/report_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","suiteSourceFile":"core/spec/serializers/spree/events/report_serializer_spec.rb"},{"name":"#as_json includes date range","suite":"Spree::Events::ReportSerializer at ./spec/serializers/spree/events/report_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","suiteSourceFile":"core/spec/serializers/spree/events/report_serializer_spec.rb"},{"name":"#as_json includes timestamps","suite":"Spree::Events::ReportSerializer at ./spec/serializers/spree/events/report_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","suiteSourceFile":"core/spec/serializers/spree/events/report_serializer_spec.rb"},{"name":"#as_json includes identity attributes","suite":"Spree::Events::ReturnAuthorizationSerializer at ./spec/serializers/spree/events/return_authorization_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/serializers/spree/events/return_authorization_serializer_spec.rb"},{"name":"#as_json includes state as string","suite":"Spree::Events::ReturnAuthorizationSerializer at ./spec/serializers/spree/events/return_authorization_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/serializers/spree/events/return_authorization_serializer_spec.rb"},{"name":"#as_json includes foreign keys","suite":"Spree::Events::ReturnAuthorizationSerializer at ./spec/serializers/spree/events/return_authorization_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/serializers/spree/events/return_authorization_serializer_spec.rb"},{"name":"#as_json includes timestamps","suite":"Spree::Events::ReturnAuthorizationSerializer at ./spec/serializers/spree/events/return_authorization_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","suiteSourceFile":"core/spec/serializers/spree/events/return_authorization_serializer_spec.rb"},{"name":"#as_json does not include associations","suite":"Spree::Events::ReturnAuthorizationSerializer at ./spec/serializers/spree/events/return_authorization_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","suiteSourceFile":"core/spec/serializers/spree/events/return_authorization_serializer_spec.rb"},{"name":"#as_json includes identity attributes","suite":"Spree::Events::ReturnItemSerializer at ./spec/serializers/spree/events/return_item_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/serializers/spree/events/return_item_serializer_spec.rb"},{"name":"#as_json includes status fields","suite":"Spree::Events::ReturnItemSerializer at ./spec/serializers/spree/events/return_item_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/serializers/spree/events/return_item_serializer_spec.rb"},{"name":"#as_json includes amount fields","suite":"Spree::Events::ReturnItemSerializer at ./spec/serializers/spree/events/return_item_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/serializers/spree/events/return_item_serializer_spec.rb"},{"name":"#as_json includes foreign keys","suite":"Spree::Events::ReturnItemSerializer at ./spec/serializers/spree/events/return_item_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","suiteSourceFile":"core/spec/serializers/spree/events/return_item_serializer_spec.rb"},{"name":"#as_json includes timestamps","suite":"Spree::Events::ReturnItemSerializer at ./spec/serializers/spree/events/return_item_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","suiteSourceFile":"core/spec/serializers/spree/events/return_item_serializer_spec.rb"},{"name":"#as_json includes identity attributes","suite":"Spree::Events::ShipmentSerializer at ./spec/serializers/spree/events/shipment_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/serializers/spree/events/shipment_serializer_spec.rb"},{"name":"#as_json includes state as string","suite":"Spree::Events::ShipmentSerializer at ./spec/serializers/spree/events/shipment_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/serializers/spree/events/shipment_serializer_spec.rb"},{"name":"#as_json includes tracking","suite":"Spree::Events::ShipmentSerializer at ./spec/serializers/spree/events/shipment_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/serializers/spree/events/shipment_serializer_spec.rb"},{"name":"#as_json includes cost","suite":"Spree::Events::ShipmentSerializer at ./spec/serializers/spree/events/shipment_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","suiteSourceFile":"core/spec/serializers/spree/events/shipment_serializer_spec.rb"},{"name":"#as_json includes foreign keys","suite":"Spree::Events::ShipmentSerializer at ./spec/serializers/spree/events/shipment_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","suiteSourceFile":"core/spec/serializers/spree/events/shipment_serializer_spec.rb"},{"name":"#as_json includes timestamps","suite":"Spree::Events::ShipmentSerializer at ./spec/serializers/spree/events/shipment_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","suiteSourceFile":"core/spec/serializers/spree/events/shipment_serializer_spec.rb"},{"name":"#as_json does not include associations","suite":"Spree::Events::ShipmentSerializer at ./spec/serializers/spree/events/shipment_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7\"}}","suiteSourceFile":"core/spec/serializers/spree/events/shipment_serializer_spec.rb"},{"name":"#as_json includes identity attributes","suite":"Spree::Events::StockItemSerializer at ./spec/serializers/spree/events/stock_item_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/serializers/spree/events/stock_item_serializer_spec.rb"},{"name":"#as_json includes count_on_hand","suite":"Spree::Events::StockItemSerializer at ./spec/serializers/spree/events/stock_item_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/serializers/spree/events/stock_item_serializer_spec.rb"},{"name":"#as_json includes backorderable","suite":"Spree::Events::StockItemSerializer at ./spec/serializers/spree/events/stock_item_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/serializers/spree/events/stock_item_serializer_spec.rb"},{"name":"#as_json includes foreign keys","suite":"Spree::Events::StockItemSerializer at ./spec/serializers/spree/events/stock_item_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","suiteSourceFile":"core/spec/serializers/spree/events/stock_item_serializer_spec.rb"},{"name":"#as_json includes deleted_at","suite":"Spree::Events::StockItemSerializer at ./spec/serializers/spree/events/stock_item_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","suiteSourceFile":"core/spec/serializers/spree/events/stock_item_serializer_spec.rb"},{"name":"#as_json includes timestamps","suite":"Spree::Events::StockItemSerializer at ./spec/serializers/spree/events/stock_item_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","suiteSourceFile":"core/spec/serializers/spree/events/stock_item_serializer_spec.rb"},{"name":"#as_json includes identity attributes","suite":"Spree::Events::StockMovementSerializer at ./spec/serializers/spree/events/stock_movement_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/serializers/spree/events/stock_movement_serializer_spec.rb"},{"name":"#as_json includes quantity","suite":"Spree::Events::StockMovementSerializer at ./spec/serializers/spree/events/stock_movement_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/serializers/spree/events/stock_movement_serializer_spec.rb"},{"name":"#as_json includes action","suite":"Spree::Events::StockMovementSerializer at ./spec/serializers/spree/events/stock_movement_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/serializers/spree/events/stock_movement_serializer_spec.rb"},{"name":"#as_json includes originator polymorphic reference","suite":"Spree::Events::StockMovementSerializer at ./spec/serializers/spree/events/stock_movement_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","suiteSourceFile":"core/spec/serializers/spree/events/stock_movement_serializer_spec.rb"},{"name":"#as_json includes stock_item_id","suite":"Spree::Events::StockMovementSerializer at ./spec/serializers/spree/events/stock_movement_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","suiteSourceFile":"core/spec/serializers/spree/events/stock_movement_serializer_spec.rb"},{"name":"#as_json includes timestamps","suite":"Spree::Events::StockMovementSerializer at ./spec/serializers/spree/events/stock_movement_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","suiteSourceFile":"core/spec/serializers/spree/events/stock_movement_serializer_spec.rb"},{"name":"#as_json includes identity attributes","suite":"Spree::Events::StockTransferSerializer at ./spec/serializers/spree/events/stock_transfer_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/serializers/spree/events/stock_transfer_serializer_spec.rb"},{"name":"#as_json includes type","suite":"Spree::Events::StockTransferSerializer at ./spec/serializers/spree/events/stock_transfer_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/serializers/spree/events/stock_transfer_serializer_spec.rb"},{"name":"#as_json includes reference","suite":"Spree::Events::StockTransferSerializer at ./spec/serializers/spree/events/stock_transfer_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/serializers/spree/events/stock_transfer_serializer_spec.rb"},{"name":"#as_json includes location foreign keys","suite":"Spree::Events::StockTransferSerializer at ./spec/serializers/spree/events/stock_transfer_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","suiteSourceFile":"core/spec/serializers/spree/events/stock_transfer_serializer_spec.rb"},{"name":"#as_json includes timestamps","suite":"Spree::Events::StockTransferSerializer at ./spec/serializers/spree/events/stock_transfer_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","suiteSourceFile":"core/spec/serializers/spree/events/stock_transfer_serializer_spec.rb"},{"name":"#as_json includes identity attributes","suite":"Spree::Events::StoreCreditSerializer at ./spec/serializers/spree/events/store_credit_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/serializers/spree/events/store_credit_serializer_spec.rb"},{"name":"#as_json includes amount fields","suite":"Spree::Events::StoreCreditSerializer at ./spec/serializers/spree/events/store_credit_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/serializers/spree/events/store_credit_serializer_spec.rb"},{"name":"#as_json includes memo","suite":"Spree::Events::StoreCreditSerializer at ./spec/serializers/spree/events/store_credit_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/serializers/spree/events/store_credit_serializer_spec.rb"},{"name":"#as_json includes user foreign keys","suite":"Spree::Events::StoreCreditSerializer at ./spec/serializers/spree/events/store_credit_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","suiteSourceFile":"core/spec/serializers/spree/events/store_credit_serializer_spec.rb"},{"name":"#as_json includes category and type ids","suite":"Spree::Events::StoreCreditSerializer at ./spec/serializers/spree/events/store_credit_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","suiteSourceFile":"core/spec/serializers/spree/events/store_credit_serializer_spec.rb"},{"name":"#as_json includes store_id","suite":"Spree::Events::StoreCreditSerializer at ./spec/serializers/spree/events/store_credit_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","suiteSourceFile":"core/spec/serializers/spree/events/store_credit_serializer_spec.rb"},{"name":"#as_json includes originator polymorphic reference","suite":"Spree::Events::StoreCreditSerializer at ./spec/serializers/spree/events/store_credit_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7\"}}","suiteSourceFile":"core/spec/serializers/spree/events/store_credit_serializer_spec.rb"},{"name":"#as_json includes deleted_at","suite":"Spree::Events::StoreCreditSerializer at ./spec/serializers/spree/events/store_credit_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8\"}}","suiteSourceFile":"core/spec/serializers/spree/events/store_credit_serializer_spec.rb"},{"name":"#as_json includes timestamps","suite":"Spree::Events::StoreCreditSerializer at ./spec/serializers/spree/events/store_credit_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:9\"}}","suiteSourceFile":"core/spec/serializers/spree/events/store_credit_serializer_spec.rb"},{"name":"#as_json includes identity attributes","suite":"Spree::Events::UserSerializer at ./spec/serializers/spree/events/user_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/serializers/spree/events/user_serializer_spec.rb"},{"name":"#as_json includes timestamps","suite":"Spree::Events::UserSerializer at ./spec/serializers/spree/events/user_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/serializers/spree/events/user_serializer_spec.rb"},{"name":"#as_json does not include sensitive data","suite":"Spree::Events::UserSerializer at ./spec/serializers/spree/events/user_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/serializers/spree/events/user_serializer_spec.rb"},{"name":"#as_json includes identity attributes","suite":"Spree::Events::VariantSerializer at ./spec/serializers/spree/events/variant_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/serializers/spree/events/variant_serializer_spec.rb"},{"name":"#as_json includes barcode","suite":"Spree::Events::VariantSerializer at ./spec/serializers/spree/events/variant_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/serializers/spree/events/variant_serializer_spec.rb"},{"name":"#as_json includes is_master","suite":"Spree::Events::VariantSerializer at ./spec/serializers/spree/events/variant_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/serializers/spree/events/variant_serializer_spec.rb"},{"name":"#as_json includes position","suite":"Spree::Events::VariantSerializer at ./spec/serializers/spree/events/variant_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","suiteSourceFile":"core/spec/serializers/spree/events/variant_serializer_spec.rb"},{"name":"#as_json includes dimensions","suite":"Spree::Events::VariantSerializer at ./spec/serializers/spree/events/variant_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","suiteSourceFile":"core/spec/serializers/spree/events/variant_serializer_spec.rb"},{"name":"#as_json includes cost fields","suite":"Spree::Events::VariantSerializer at ./spec/serializers/spree/events/variant_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","suiteSourceFile":"core/spec/serializers/spree/events/variant_serializer_spec.rb"},{"name":"#as_json includes track_inventory","suite":"Spree::Events::VariantSerializer at ./spec/serializers/spree/events/variant_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7\"}}","suiteSourceFile":"core/spec/serializers/spree/events/variant_serializer_spec.rb"},{"name":"#as_json includes foreign keys","suite":"Spree::Events::VariantSerializer at ./spec/serializers/spree/events/variant_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8\"}}","suiteSourceFile":"core/spec/serializers/spree/events/variant_serializer_spec.rb"},{"name":"#as_json includes discontinue_on","suite":"Spree::Events::VariantSerializer at ./spec/serializers/spree/events/variant_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:9\"}}","suiteSourceFile":"core/spec/serializers/spree/events/variant_serializer_spec.rb"},{"name":"#as_json includes deleted_at","suite":"Spree::Events::VariantSerializer at ./spec/serializers/spree/events/variant_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:10\"}}","suiteSourceFile":"core/spec/serializers/spree/events/variant_serializer_spec.rb"},{"name":"#as_json includes timestamps","suite":"Spree::Events::VariantSerializer at ./spec/serializers/spree/events/variant_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:11\"}}","suiteSourceFile":"core/spec/serializers/spree/events/variant_serializer_spec.rb"},{"name":"#as_json includes identity attributes","suite":"Spree::Events::WishedItemSerializer at ./spec/serializers/spree/events/wished_item_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/serializers/spree/events/wished_item_serializer_spec.rb"},{"name":"#as_json includes quantity","suite":"Spree::Events::WishedItemSerializer at ./spec/serializers/spree/events/wished_item_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/serializers/spree/events/wished_item_serializer_spec.rb"},{"name":"#as_json includes foreign keys","suite":"Spree::Events::WishedItemSerializer at ./spec/serializers/spree/events/wished_item_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/serializers/spree/events/wished_item_serializer_spec.rb"},{"name":"#as_json includes timestamps","suite":"Spree::Events::WishedItemSerializer at ./spec/serializers/spree/events/wished_item_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","suiteSourceFile":"core/spec/serializers/spree/events/wished_item_serializer_spec.rb"},{"name":"#as_json includes identity attributes","suite":"Spree::Events::WishlistSerializer at ./spec/serializers/spree/events/wishlist_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/serializers/spree/events/wishlist_serializer_spec.rb"},{"name":"#as_json includes privacy settings","suite":"Spree::Events::WishlistSerializer at ./spec/serializers/spree/events/wishlist_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/serializers/spree/events/wishlist_serializer_spec.rb"},{"name":"#as_json includes foreign keys","suite":"Spree::Events::WishlistSerializer at ./spec/serializers/spree/events/wishlist_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/serializers/spree/events/wishlist_serializer_spec.rb"},{"name":"#as_json includes timestamps","suite":"Spree::Events::WishlistSerializer at ./spec/serializers/spree/events/wishlist_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","suiteSourceFile":"core/spec/serializers/spree/events/wishlist_serializer_spec.rb"},{"name":"#as_json does not include token","suite":"Spree::Events::WishlistSerializer at ./spec/serializers/spree/events/wishlist_serializer_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","suiteSourceFile":"core/spec/serializers/spree/events/wishlist_serializer_spec.rb"},{"name":"#call with valid params creates address","suite":"Spree::Account::Addresses::Create at ./spec/services/spree/account/addresses/create_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/services/spree/account/addresses/create_spec.rb"},{"name":"#call with valid params without user example at ./spec/services/spree/account/addresses/create_spec.rb:38","suite":"Spree::Account::Addresses::Create at ./spec/services/spree/account/addresses/create_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","suiteSourceFile":"core/spec/services/spree/account/addresses/create_spec.rb"},{"name":"#call with valid params user default address when created address is first user address assigns created address as default user bill address","suite":"Spree::Account::Addresses::Create at ./spec/services/spree/account/addresses/create_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:1:1\"}}","suiteSourceFile":"core/spec/services/spree/account/addresses/create_spec.rb"},{"name":"#call with valid params user default address when created address is first user address assigns created address as default user ship address","suite":"Spree::Account::Addresses::Create at ./spec/services/spree/account/addresses/create_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:1:2\"}}","suiteSourceFile":"core/spec/services/spree/account/addresses/create_spec.rb"},{"name":"#call with valid params user default address when user has some address already with default bill and ship address does not assign created address as default user bill address","suite":"Spree::Account::Addresses::Create at ./spec/services/spree/account/addresses/create_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:2:1:1\"}}","suiteSourceFile":"core/spec/services/spree/account/addresses/create_spec.rb"},{"name":"#call with valid params user default address when user has some address already with default bill and ship address does not assign created address as default user ship address","suite":"Spree::Account::Addresses::Create at ./spec/services/spree/account/addresses/create_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:2:1:2\"}}","suiteSourceFile":"core/spec/services/spree/account/addresses/create_spec.rb"},{"name":"#call with valid params user default address when user has some address already without default bill and ship address does not assign created address as default user bill address","suite":"Spree::Account::Addresses::Create at ./spec/services/spree/account/addresses/create_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:2:2:1\"}}","suiteSourceFile":"core/spec/services/spree/account/addresses/create_spec.rb"},{"name":"#call with valid params user default address when user has some address already without default bill and ship address does not assign created address as default user ship address","suite":"Spree::Account::Addresses::Create at ./spec/services/spree/account/addresses/create_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:2:2:2\"}}","suiteSourceFile":"core/spec/services/spree/account/addresses/create_spec.rb"},{"name":"#call with valid params when order is passed assigns a new ship address to the order","suite":"Spree::Account::Addresses::Create at ./spec/services/spree/account/addresses/create_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:4:1\"}}","suiteSourceFile":"core/spec/services/spree/account/addresses/create_spec.rb"},{"name":"#call with valid params when order is passed updates order to address state","suite":"Spree::Account::Addresses::Create at ./spec/services/spree/account/addresses/create_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:4:2\"}}","suiteSourceFile":"core/spec/services/spree/account/addresses/create_spec.rb"},{"name":"#call with valid params when default billing is passed updates user's bill address","suite":"Spree::Account::Addresses::Create at ./spec/services/spree/account/addresses/create_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:5:1\"}}","suiteSourceFile":"core/spec/services/spree/account/addresses/create_spec.rb"},{"name":"#call with valid params when default shipping is passed updates user's ship address","suite":"Spree::Account::Addresses::Create at ./spec/services/spree/account/addresses/create_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:6:1\"}}","suiteSourceFile":"core/spec/services/spree/account/addresses/create_spec.rb"},{"name":"#call with invalid params returns errors","suite":"Spree::Account::Addresses::Create at ./spec/services/spree/account/addresses/create_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/services/spree/account/addresses/create_spec.rb"},{"name":"#call with valid params creates address","suite":"Spree::Account::Addresses::Update at ./spec/services/spree/account/addresses/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/services/spree/account/addresses/update_spec.rb"},{"name":"#call with invalid params returns errors","suite":"Spree::Account::Addresses::Update at ./spec/services/spree/account/addresses/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/services/spree/account/addresses/update_spec.rb"},{"name":"#call with valid params creates new user","suite":"Spree::Account::Create at ./spec/services/spree/account/create_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/services/spree/account/create_spec.rb"},{"name":"#call with valid params creates user with given params","suite":"Spree::Account::Create at ./spec/services/spree/account/create_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2\"}}","suiteSourceFile":"core/spec/services/spree/account/create_spec.rb"},{"name":"#call with valid params result is successful","suite":"Spree::Account::Create at ./spec/services/spree/account/create_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3\"}}","suiteSourceFile":"core/spec/services/spree/account/create_spec.rb"},{"name":"#call with valid params when all params are given behaves like user not created does not create new user","suite":"Spree::Account::Update at ./spec/services/spree/account/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1:1\"}}","suiteSourceFile":"core/spec/services/spree/account/update_spec.rb"},{"name":"#call with valid params when all params are given behaves like successful response result is successful","suite":"Spree::Account::Update at ./spec/services/spree/account/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:2:1\"}}","suiteSourceFile":"core/spec/services/spree/account/update_spec.rb"},{"name":"#call with valid params when all params are given behaves like updated attributes updates user with given params","suite":"Spree::Account::Update at ./spec/services/spree/account/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:3:1\"}}","suiteSourceFile":"core/spec/services/spree/account/update_spec.rb"},{"name":"#call with valid params when all params are given behaves like both default addresses changed changes both default bill address and ship address","suite":"Spree::Account::Update at ./spec/services/spree/account/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:4:1\"}}","suiteSourceFile":"core/spec/services/spree/account/update_spec.rb"},{"name":"#call with valid params when only address params are given behaves like user not created does not create new user","suite":"Spree::Account::Update at ./spec/services/spree/account/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1:1\"}}","suiteSourceFile":"core/spec/services/spree/account/update_spec.rb"},{"name":"#call with valid params when only address params are given behaves like successful response result is successful","suite":"Spree::Account::Update at ./spec/services/spree/account/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:2:1\"}}","suiteSourceFile":"core/spec/services/spree/account/update_spec.rb"},{"name":"#call with valid params when only address params are given behaves like updated attributes updates user with given params","suite":"Spree::Account::Update at ./spec/services/spree/account/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:3:1\"}}","suiteSourceFile":"core/spec/services/spree/account/update_spec.rb"},{"name":"#call with valid params when only address params are given behaves like both default addresses changed changes both default bill address and ship address","suite":"Spree::Account::Update at ./spec/services/spree/account/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:4:1\"}}","suiteSourceFile":"core/spec/services/spree/account/update_spec.rb"},{"name":"#call with valid params when only address params are given when only bill address is given changes only user default bill address","suite":"Spree::Account::Update at ./spec/services/spree/account/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:5:4\"}}","suiteSourceFile":"core/spec/services/spree/account/update_spec.rb"},{"name":"#call with valid params when only address params are given when only bill address is given behaves like user not created does not create new user","suite":"Spree::Account::Update at ./spec/services/spree/account/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:5:1:1\"}}","suiteSourceFile":"core/spec/services/spree/account/update_spec.rb"},{"name":"#call with valid params when only address params are given when only bill address is given behaves like successful response result is successful","suite":"Spree::Account::Update at ./spec/services/spree/account/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:5:2:1\"}}","suiteSourceFile":"core/spec/services/spree/account/update_spec.rb"},{"name":"#call with valid params when only address params are given when only bill address is given behaves like updated attributes updates user with given params","suite":"Spree::Account::Update at ./spec/services/spree/account/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:5:3:1\"}}","suiteSourceFile":"core/spec/services/spree/account/update_spec.rb"},{"name":"#call with valid params when only address params are given when only ship address is given changes only user default ship address","suite":"Spree::Account::Update at ./spec/services/spree/account/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:6:4\"}}","suiteSourceFile":"core/spec/services/spree/account/update_spec.rb"},{"name":"#call with valid params when only address params are given when only ship address is given behaves like user not created does not create new user","suite":"Spree::Account::Update at ./spec/services/spree/account/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:6:1:1\"}}","suiteSourceFile":"core/spec/services/spree/account/update_spec.rb"},{"name":"#call with valid params when only address params are given when only ship address is given behaves like successful response result is successful","suite":"Spree::Account::Update at ./spec/services/spree/account/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:6:2:1\"}}","suiteSourceFile":"core/spec/services/spree/account/update_spec.rb"},{"name":"#call with valid params when only address params are given when only ship address is given behaves like updated attributes updates user with given params","suite":"Spree::Account::Update at ./spec/services/spree/account/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:6:3:1\"}}","suiteSourceFile":"core/spec/services/spree/account/update_spec.rb"},{"name":"#validate when no phone is provided behaves like does not add a phone error does not add an error","suite":"Spree::Addresses::PhoneValidator at ./spec/services/spree/addresses/phone_validator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","suiteSourceFile":"core/spec/services/spree/addresses/phone_validator_spec.rb"},{"name":"#validate when no country is provided behaves like does not add a phone error does not add an error","suite":"Spree::Addresses::PhoneValidator at ./spec/services/spree/addresses/phone_validator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1:1\"}}","suiteSourceFile":"core/spec/services/spree/addresses/phone_validator_spec.rb"},{"name":"#validate when no country iso is provided behaves like does not add a phone error does not add an error","suite":"Spree::Addresses::PhoneValidator at ./spec/services/spree/addresses/phone_validator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1:1\"}}","suiteSourceFile":"core/spec/services/spree/addresses/phone_validator_spec.rb"},{"name":"#validate when phone is provided and country is US and phone is valid without prefix behaves like does not add a phone error does not add an error","suite":"Spree::Addresses::PhoneValidator at ./spec/services/spree/addresses/phone_validator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1:1:1:1:1\"}}","suiteSourceFile":"core/spec/services/spree/addresses/phone_validator_spec.rb"},{"name":"#validate when phone is provided and country is US and phone is valid and has prefix with plus sign behaves like does not add a phone error does not add an error","suite":"Spree::Addresses::PhoneValidator at ./spec/services/spree/addresses/phone_validator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1:1:2:1:1\"}}","suiteSourceFile":"core/spec/services/spree/addresses/phone_validator_spec.rb"},{"name":"#validate when phone is provided and country is US and phone is valid and has prefix without plus sign behaves like does not add a phone error does not add an error","suite":"Spree::Addresses::PhoneValidator at ./spec/services/spree/addresses/phone_validator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1:1:3:1:1\"}}","suiteSourceFile":"core/spec/services/spree/addresses/phone_validator_spec.rb"},{"name":"#validate when phone is provided and country is US and phone is valid and has dashes behaves like does not add a phone error does not add an error","suite":"Spree::Addresses::PhoneValidator at ./spec/services/spree/addresses/phone_validator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1:1:4:1:1\"}}","suiteSourceFile":"core/spec/services/spree/addresses/phone_validator_spec.rb"},{"name":"#validate when phone is provided and country is US and phone is valid and has dashes and prefix behaves like does not add a phone error does not add an error","suite":"Spree::Addresses::PhoneValidator at ./spec/services/spree/addresses/phone_validator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1:1:5:1:1\"}}","suiteSourceFile":"core/spec/services/spree/addresses/phone_validator_spec.rb"},{"name":"#validate when phone is provided and country is US and phone is valid and has dashes and prefix without plus sign behaves like does not add a phone error does not add an error","suite":"Spree::Addresses::PhoneValidator at ./spec/services/spree/addresses/phone_validator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1:1:6:1:1\"}}","suiteSourceFile":"core/spec/services/spree/addresses/phone_validator_spec.rb"},{"name":"#validate when phone is provided and country is US and phone is valid and has dashes and prefix after dash behaves like does not add a phone error does not add an error","suite":"Spree::Addresses::PhoneValidator at ./spec/services/spree/addresses/phone_validator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1:1:7:1:1\"}}","suiteSourceFile":"core/spec/services/spree/addresses/phone_validator_spec.rb"},{"name":"#validate when phone is provided and country is US and phone is valid and has dashed and parenthesized behaves like does not add a phone error does not add an error","suite":"Spree::Addresses::PhoneValidator at ./spec/services/spree/addresses/phone_validator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1:1:8:1:1\"}}","suiteSourceFile":"core/spec/services/spree/addresses/phone_validator_spec.rb"},{"name":"#validate when phone is provided and country is US and phone is valid and has dashed and parenthesized and prefix behaves like does not add a phone error does not add an error","suite":"Spree::Addresses::PhoneValidator at ./spec/services/spree/addresses/phone_validator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1:1:9:1:1\"}}","suiteSourceFile":"core/spec/services/spree/addresses/phone_validator_spec.rb"},{"name":"#validate when phone is provided and country is US and phone is valid and has dashed and parenthesized and prefix without plus sign behaves like does not add a phone error does not add an error","suite":"Spree::Addresses::PhoneValidator at ./spec/services/spree/addresses/phone_validator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1:1:10:1:1\"}}","suiteSourceFile":"core/spec/services/spree/addresses/phone_validator_spec.rb"},{"name":"#validate when phone is provided and country is US and phone is invalid and phone is from another country adds an error","suite":"Spree::Addresses::PhoneValidator at ./spec/services/spree/addresses/phone_validator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1:2:1:1\"}}","suiteSourceFile":"core/spec/services/spree/addresses/phone_validator_spec.rb"},{"name":"#validate when phone is provided and country is US and phone is invalid because not matching US area code adds an error","suite":"Spree::Addresses::PhoneValidator at ./spec/services/spree/addresses/phone_validator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1:2:2:1\"}}","suiteSourceFile":"core/spec/services/spree/addresses/phone_validator_spec.rb"},{"name":"#validate when phone is provided because country is not matching phone adds an error","suite":"Spree::Addresses::PhoneValidator at ./spec/services/spree/addresses/phone_validator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:2:1\"}}","suiteSourceFile":"core/spec/services/spree/addresses/phone_validator_spec.rb"},{"name":"#call with valid params when address is editable updates address","suite":"Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","suiteSourceFile":"core/spec/services/spree/addresses/update_spec.rb"},{"name":"#call with valid params when address is editable when user sets address as default shipping updates user's ship address","suite":"Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:2:1\"}}","suiteSourceFile":"core/spec/services/spree/addresses/update_spec.rb"},{"name":"#call with valid params when address is editable when user sets address as default billing updates user's bill address","suite":"Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:3:1\"}}","suiteSourceFile":"core/spec/services/spree/addresses/update_spec.rb"},{"name":"#call with valid params when address is editable when order is passed updates order to address state","suite":"Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:4:1\"}}","suiteSourceFile":"core/spec/services/spree/addresses/update_spec.rb"},{"name":"#call with valid params when address is editable behaves like updating with same params when params are the same does not update address","suite":"Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:5:1:1\"}}","suiteSourceFile":"core/spec/services/spree/addresses/update_spec.rb"},{"name":"#call with valid params when address is editable behaves like updating with same params when params are the same does not create new address","suite":"Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:5:1:2\"}}","suiteSourceFile":"core/spec/services/spree/addresses/update_spec.rb"},{"name":"#call with valid params when address is editable behaves like updating with same params when params are the same returns success","suite":"Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:5:1:3\"}}","suiteSourceFile":"core/spec/services/spree/addresses/update_spec.rb"},{"name":"#call with valid params when address is editable behaves like updating with same params when params are the same does not update address nor create when attribute changed from nil to blank string","suite":"Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:5:1:4\"}}","suiteSourceFile":"core/spec/services/spree/addresses/update_spec.rb"},{"name":"#call with valid params when address is editable behaves like updating with same params when params are the same does not update address nor create when attribute changed only in case","suite":"Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:5:1:5\"}}","suiteSourceFile":"core/spec/services/spree/addresses/update_spec.rb"},{"name":"#call with valid params when address is editable behaves like updating with same params when params are the same when setting the create_new_address_on_update param to true does not create new address","suite":"Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:5:1:6:1\"}}","suiteSourceFile":"core/spec/services/spree/addresses/update_spec.rb"},{"name":"#call with valid params when address is editable behaves like updating with same params when user only sets the address as default shipping updates user's ship address","suite":"Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:5:2:1\"}}","suiteSourceFile":"core/spec/services/spree/addresses/update_spec.rb"},{"name":"#call with valid params when address is editable behaves like updating with same params when user only sets the address as default billing updates user's bill address","suite":"Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:5:3:1\"}}","suiteSourceFile":"core/spec/services/spree/addresses/update_spec.rb"},{"name":"#call with valid params when address is editable when the create_new_address_on_update param is set to true creates a new address and keeps the previous one","suite":"Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:6:1\"}}","suiteSourceFile":"core/spec/services/spree/addresses/update_spec.rb"},{"name":"#call with valid params when address is editable when the create_new_address_on_update param is set to true with a user doesn't change the user's bill and ship addresses by default","suite":"Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:6:2:1\"}}","suiteSourceFile":"core/spec/services/spree/addresses/update_spec.rb"},{"name":"#call with valid params when address is editable when the create_new_address_on_update param is set to true with a user when the default_billing param is set to true changes user's bill address","suite":"Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:6:2:2:1\"}}","suiteSourceFile":"core/spec/services/spree/addresses/update_spec.rb"},{"name":"#call with valid params when address is editable when the create_new_address_on_update param is set to true with a user when the default_shipping param is set to true changes user's ship address","suite":"Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:6:2:3:1\"}}","suiteSourceFile":"core/spec/services/spree/addresses/update_spec.rb"},{"name":"#call with valid params when address is editable when the create_new_address_on_update param is set to true with an order doesn't change the order addresses","suite":"Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:6:3:1\"}}","suiteSourceFile":"core/spec/services/spree/addresses/update_spec.rb"},{"name":"#call with valid params when address is uneditable when there have been created same address with new params when is not deleted takes that address","suite":"Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1:1:1\"}}","suiteSourceFile":"core/spec/services/spree/addresses/update_spec.rb"},{"name":"#call with valid params when address is uneditable when there have been created same address with new params when its soft deleted creates new address","suite":"Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1:2:1\"}}","suiteSourceFile":"core/spec/services/spree/addresses/update_spec.rb"},{"name":"#call with valid params when address is uneditable when there is no such existing address with given params creates new address and soft-deletes the previous one","suite":"Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:2:1\"}}","suiteSourceFile":"core/spec/services/spree/addresses/update_spec.rb"},{"name":"#call with valid params when address is uneditable when there is no such existing address with given params when the old address was set as default billing sets the new address as default billing","suite":"Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:2:2:1\"}}","suiteSourceFile":"core/spec/services/spree/addresses/update_spec.rb"},{"name":"#call with valid params when address is uneditable when there is no such existing address with given params when the old address was set as default shipping sets the new address as default shipping","suite":"Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:2:3:1\"}}","suiteSourceFile":"core/spec/services/spree/addresses/update_spec.rb"},{"name":"#call with valid params when address is uneditable when user sets address as default shipping updates user's ship address","suite":"Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:3:1\"}}","suiteSourceFile":"core/spec/services/spree/addresses/update_spec.rb"},{"name":"#call with valid params when address is uneditable when user sets address as default billing updates user's bill address","suite":"Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:4:1\"}}","suiteSourceFile":"core/spec/services/spree/addresses/update_spec.rb"},{"name":"#call with valid params when address is uneditable when order with deleted address is passed updates order to address state","suite":"Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:5:1\"}}","suiteSourceFile":"core/spec/services/spree/addresses/update_spec.rb"},{"name":"#call with valid params when address is uneditable when order with deleted address is passed updates order ship address","suite":"Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:5:2\"}}","suiteSourceFile":"core/spec/services/spree/addresses/update_spec.rb"},{"name":"#call with valid params when address is uneditable when order with deleted address is passed updates order bill address","suite":"Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:5:3\"}}","suiteSourceFile":"core/spec/services/spree/addresses/update_spec.rb"},{"name":"#call with valid params when address is uneditable behaves like updating with same params when params are the same does not update address","suite":"Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:6:1:1\"}}","suiteSourceFile":"core/spec/services/spree/addresses/update_spec.rb"},{"name":"#call with valid params when address is uneditable behaves like updating with same params when params are the same does not create new address","suite":"Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:6:1:2\"}}","suiteSourceFile":"core/spec/services/spree/addresses/update_spec.rb"},{"name":"#call with valid params when address is uneditable behaves like updating with same params when params are the same returns success","suite":"Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:6:1:3\"}}","suiteSourceFile":"core/spec/services/spree/addresses/update_spec.rb"},{"name":"#call with valid params when address is uneditable behaves like updating with same params when params are the same does not update address nor create when attribute changed from nil to blank string","suite":"Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:6:1:4\"}}","suiteSourceFile":"core/spec/services/spree/addresses/update_spec.rb"},{"name":"#call with valid params when address is uneditable behaves like updating with same params when params are the same does not update address nor create when attribute changed only in case","suite":"Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:6:1:5\"}}","suiteSourceFile":"core/spec/services/spree/addresses/update_spec.rb"},{"name":"#call with valid params when address is uneditable behaves like updating with same params when params are the same when setting the create_new_address_on_update param to true does not create new address","suite":"Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:6:1:6:1\"}}","suiteSourceFile":"core/spec/services/spree/addresses/update_spec.rb"},{"name":"#call with valid params when address is uneditable behaves like updating with same params when user only sets the address as default shipping updates user's ship address","suite":"Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:6:2:1\"}}","suiteSourceFile":"core/spec/services/spree/addresses/update_spec.rb"},{"name":"#call with valid params when address is uneditable behaves like updating with same params when user only sets the address as default billing updates user's bill address","suite":"Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:6:3:1\"}}","suiteSourceFile":"core/spec/services/spree/addresses/update_spec.rb"},{"name":"#call with valid params when address is uneditable when the create_new_address_on_update param is set to true creates a new address and keeps the previous one","suite":"Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:7:1\"}}","suiteSourceFile":"core/spec/services/spree/addresses/update_spec.rb"},{"name":"#call with valid params when address is uneditable when the create_new_address_on_update param is set to true with a user doesn't change the user's bill and ship addresses by default","suite":"Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:7:2:1\"}}","suiteSourceFile":"core/spec/services/spree/addresses/update_spec.rb"},{"name":"#call with valid params when address is uneditable when the create_new_address_on_update param is set to true with a user when the default_billing param is set to true changes user's bill address","suite":"Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:7:2:2:1\"}}","suiteSourceFile":"core/spec/services/spree/addresses/update_spec.rb"},{"name":"#call with valid params when address is uneditable when the create_new_address_on_update param is set to true with a user when the default_shipping param is set to true changes user's ship address","suite":"Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:7:2:3:1\"}}","suiteSourceFile":"core/spec/services/spree/addresses/update_spec.rb"},{"name":"#call with valid params when address is uneditable when the create_new_address_on_update param is set to true with an order doesn't change the order addresses","suite":"Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:7:3:1\"}}","suiteSourceFile":"core/spec/services/spree/addresses/update_spec.rb"},{"name":"#call with invalid params returns errors","suite":"Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/services/spree/addresses/update_spec.rb"},{"name":"add line item to order change by one and recalculate amount","suite":"Spree::Cart::AddItem at ./spec/services/spree/cart/add_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/services/spree/cart/add_item_spec.rb"},{"name":"with same line item not to add","suite":"Spree::Cart::AddItem at ./spec/services/spree/cart/add_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/services/spree/cart/add_item_spec.rb"},{"name":"with given shipment ensure shipment calls update_amounts instead of order calling ensure_updated_shipments","suite":"Spree::Cart::AddItem at ./spec/services/spree/cart/add_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/services/spree/cart/add_item_spec.rb"},{"name":"not given a shipment ensures updated shipments","suite":"Spree::Cart::AddItem at ./spec/services/spree/cart/add_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/services/spree/cart/add_item_spec.rb"},{"name":"with store_credits payment example at ./spec/services/spree/cart/add_item_spec.rb:62","suite":"Spree::Cart::AddItem at ./spec/services/spree/cart/add_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","suiteSourceFile":"core/spec/services/spree/cart/add_item_spec.rb"},{"name":"running promotions one active order promotion creates valid discount on order","suite":"Spree::Cart::AddItem at ./spec/services/spree/cart/add_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1:1\"}}","suiteSourceFile":"core/spec/services/spree/cart/add_item_spec.rb"},{"name":"running promotions one active line item promotion creates valid discount on order","suite":"Spree::Cart::AddItem at ./spec/services/spree/cart/add_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2:1\"}}","suiteSourceFile":"core/spec/services/spree/cart/add_item_spec.rb"},{"name":"running promotions VAT for variant with percent promotion updates included_tax_total","suite":"Spree::Cart::AddItem at ./spec/services/spree/cart/add_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:3:1\"}}","suiteSourceFile":"core/spec/services/spree/cart/add_item_spec.rb"},{"name":"running promotions VAT for variant with percent promotion updates included_tax_total after adding two line items","suite":"Spree::Cart::AddItem at ./spec/services/spree/cart/add_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:3:2\"}}","suiteSourceFile":"core/spec/services/spree/cart/add_item_spec.rb"},{"name":"pass valid params hash in options example at ./spec/services/spree/cart/add_item_spec.rb:136","suite":"Spree::Cart::AddItem at ./spec/services/spree/cart/add_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","suiteSourceFile":"core/spec/services/spree/cart/add_item_spec.rb"},{"name":"pass invalid arguments different quantity in argument and in options take value from options","suite":"Spree::Cart::AddItem at ./spec/services/spree/cart/add_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1:1\"}}","suiteSourceFile":"core/spec/services/spree/cart/add_item_spec.rb"},{"name":"pass invalid arguments different quantity no quantity in argument and in params set default","suite":"Spree::Cart::AddItem at ./spec/services/spree/cart/add_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2:1\"}}","suiteSourceFile":"core/spec/services/spree/cart/add_item_spec.rb"},{"name":"pass invalid arguments not permitted example at ./spec/services/spree/cart/add_item_spec.rb:171","suite":"Spree::Cart::AddItem at ./spec/services/spree/cart/add_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:3:1\"}}","suiteSourceFile":"core/spec/services/spree/cart/add_item_spec.rb"},{"name":"pass invalid arguments pass non-existing variant example at ./spec/services/spree/cart/add_item_spec.rb:184","suite":"Spree::Cart::AddItem at ./spec/services/spree/cart/add_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:4:1\"}}","suiteSourceFile":"core/spec/services/spree/cart/add_item_spec.rb"},{"name":"pass invalid arguments variant have not desired quantity example at ./spec/services/spree/cart/add_item_spec.rb:196","suite":"Spree::Cart::AddItem at ./spec/services/spree/cart/add_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:5:1\"}}","suiteSourceFile":"core/spec/services/spree/cart/add_item_spec.rb"},{"name":"pass invalid arguments variant has been descontinued example at ./spec/services/spree/cart/add_item_spec.rb:207","suite":"Spree::Cart::AddItem at ./spec/services/spree/cart/add_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:6:1\"}}","suiteSourceFile":"core/spec/services/spree/cart/add_item_spec.rb"},{"name":"setting metadata private metadata example at ./spec/services/spree/cart/add_item_spec.rb:221","suite":"Spree::Cart::AddItem at ./spec/services/spree/cart/add_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1:1\"}}","suiteSourceFile":"core/spec/services/spree/cart/add_item_spec.rb"},{"name":"setting metadata public metadata example at ./spec/services/spree/cart/add_item_spec.rb:229","suite":"Spree::Cart::AddItem at ./spec/services/spree/cart/add_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:2:1\"}}","suiteSourceFile":"core/spec/services/spree/cart/add_item_spec.rb"},{"name":"when variant has price in the cart currency, but with amount set to nil does not add the item and raises error","suite":"Spree::Cart::AddItem at ./spec/services/spree/cart/add_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1\"}}","suiteSourceFile":"core/spec/services/spree/cart/add_item_spec.rb"},{"name":"when guest order is given assigns order to user","suite":"Spree::Cart::Associate at ./spec/services/spree/cart/associate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/services/spree/cart/associate_spec.rb"},{"name":"when already assigned order is given returns failure","suite":"Spree::Cart::Associate at ./spec/services/spree/cart/associate_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/services/spree/cart/associate_spec.rb"},{"name":"when switching to a supported currency when product has a price in given currency changes order and line items currency","suite":"Spree::Cart::ChangeCurrency at ./spec/services/spree/cart/change_currency_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/services/spree/cart/change_currency_spec.rb"},{"name":"when switching to a supported currency when product has a price in given currency removes the shipment and restarts the checkout flow","suite":"Spree::Cart::ChangeCurrency at ./spec/services/spree/cart/change_currency_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2\"}}","suiteSourceFile":"core/spec/services/spree/cart/change_currency_spec.rb"},{"name":"when switching to a supported currency when product has a price in given currency when the order has no shipment does not restart the checkout flow","suite":"Spree::Cart::ChangeCurrency at ./spec/services/spree/cart/change_currency_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:1\"}}","suiteSourceFile":"core/spec/services/spree/cart/change_currency_spec.rb"},{"name":"when switching to an unsupported currency returns failure","suite":"Spree::Cart::ChangeCurrency at ./spec/services/spree/cart/change_currency_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/services/spree/cart/change_currency_spec.rb"},{"name":"when there are items that are not available in the new currency removes them from the Cart","suite":"Spree::Cart::ChangeCurrency at ./spec/services/spree/cart/change_currency_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/services/spree/cart/change_currency_spec.rb"},{"name":"create an order example at ./spec/services/spree/cart/create_spec.rb:18","suite":"Spree::Cart::Create at ./spec/services/spree/cart/create_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/services/spree/cart/create_spec.rb"},{"name":"create an order with store in params example at ./spec/services/spree/cart/create_spec.rb:32","suite":"Spree::Cart::Create at ./spec/services/spree/cart/create_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/services/spree/cart/create_spec.rb"},{"name":"create an order with store currency example at ./spec/services/spree/cart/create_spec.rb:48","suite":"Spree::Cart::Create at ./spec/services/spree/cart/create_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/services/spree/cart/create_spec.rb"},{"name":"returns failure when no store is passed example at ./spec/services/spree/cart/create_spec.rb:64","suite":"Spree::Cart::Create at ./spec/services/spree/cart/create_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/services/spree/cart/create_spec.rb"},{"name":"when order is given when can be destroyed returns success","suite":"Spree::Cart::Destroy at ./spec/services/spree/cart/destroy_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/services/spree/cart/destroy_spec.rb"},{"name":"when order is given when can be destroyed voids pending payments","suite":"Spree::Cart::Destroy at ./spec/services/spree/cart/destroy_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2\"}}","suiteSourceFile":"core/spec/services/spree/cart/destroy_spec.rb"},{"name":"when order is given when can be destroyed cancel not shipped shipments","suite":"Spree::Cart::Destroy at ./spec/services/spree/cart/destroy_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3\"}}","suiteSourceFile":"core/spec/services/spree/cart/destroy_spec.rb"},{"name":"when order is given when can be destroyed destroys the order","suite":"Spree::Cart::Destroy at ./spec/services/spree/cart/destroy_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:4\"}}","suiteSourceFile":"core/spec/services/spree/cart/destroy_spec.rb"},{"name":"when order is given when can be destroyed destroys line_items, addresses, shipments and payments","suite":"Spree::Cart::Destroy at ./spec/services/spree/cart/destroy_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:5\"}}","suiteSourceFile":"core/spec/services/spree/cart/destroy_spec.rb"},{"name":"when order is given when can be destroyed when addresses are assigned to other orders destroys the order","suite":"Spree::Cart::Destroy at ./spec/services/spree/cart/destroy_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:6:1\"}}","suiteSourceFile":"core/spec/services/spree/cart/destroy_spec.rb"},{"name":"when order is given when can be destroyed when addresses are assigned to other orders destroys line_items, shipments and payments, but keeps addresses","suite":"Spree::Cart::Destroy at ./spec/services/spree/cart/destroy_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:6:2\"}}","suiteSourceFile":"core/spec/services/spree/cart/destroy_spec.rb"},{"name":"when order is given when can be destroyed when empty service is called first destroys the order","suite":"Spree::Cart::Destroy at ./spec/services/spree/cart/destroy_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:7:1\"}}","suiteSourceFile":"core/spec/services/spree/cart/destroy_spec.rb"},{"name":"when order is given when cannot be destroyed returns failure","suite":"Spree::Cart::Destroy at ./spec/services/spree/cart/destroy_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/services/spree/cart/destroy_spec.rb"},{"name":"when nil is given returns failure","suite":"Spree::Cart::Destroy at ./spec/services/spree/cart/destroy_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/services/spree/cart/destroy_spec.rb"},{"name":"when order is given completed order returns failure","suite":"Spree::Cart::Empty at ./spec/services/spree/cart/empty_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/services/spree/cart/empty_spec.rb"},{"name":"when order is given incomplete order returns success","suite":"Spree::Cart::Empty at ./spec/services/spree/cart/empty_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/services/spree/cart/empty_spec.rb"},{"name":"when order is given incomplete order clears out line items, adjustments and update totals","suite":"Spree::Cart::Empty at ./spec/services/spree/cart/empty_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2\"}}","suiteSourceFile":"core/spec/services/spree/cart/empty_spec.rb"},{"name":"when nil is given returns failure","suite":"Spree::Cart::Empty at ./spec/services/spree/cart/empty_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/services/spree/cart/empty_spec.rb"},{"name":"single line item remove item from order","suite":"Spree::Cart::RemoveItem at ./spec/services/spree/cart/remove_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/services/spree/cart/remove_item_spec.rb"},{"name":"line items with more than one quantity remove quantity from line item","suite":"Spree::Cart::RemoveItem at ./spec/services/spree/cart/remove_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/services/spree/cart/remove_item_spec.rb"},{"name":"raise error when try remove non existing item","suite":"Spree::Cart::RemoveItem at ./spec/services/spree/cart/remove_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/services/spree/cart/remove_item_spec.rb"},{"name":"given a shipment ensure shipment calls update_amounts instead of order calling ensure_updated_shipments","suite":"Spree::Cart::RemoveItem at ./spec/services/spree/cart/remove_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/services/spree/cart/remove_item_spec.rb"},{"name":"not given a shipment ensures updated shipments","suite":"Spree::Cart::RemoveItem at ./spec/services/spree/cart/remove_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","suiteSourceFile":"core/spec/services/spree/cart/remove_item_spec.rb"},{"name":"when store_credits payment example at ./spec/services/spree/cart/remove_item_spec.rb:72","suite":"Spree::Cart::RemoveItem at ./spec/services/spree/cart/remove_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","suiteSourceFile":"core/spec/services/spree/cart/remove_item_spec.rb"},{"name":"remove line item with any quantity with any quantity","suite":"Spree::Cart::RemoveLineItem at ./spec/services/spree/cart/remove_line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/services/spree/cart/remove_line_item_spec.rb"},{"name":"remove line item with many unique items from order with many unique items","suite":"Spree::Cart::RemoveLineItem at ./spec/services/spree/cart/remove_line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/services/spree/cart/remove_line_item_spec.rb"},{"name":"given a shipment ensure shipment calls update_amounts instead of order calling ensure_updated_shipments","suite":"Spree::Cart::RemoveLineItem at ./spec/services/spree/cart/remove_line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/services/spree/cart/remove_line_item_spec.rb"},{"name":"not given a shipment ensures updated shipments","suite":"Spree::Cart::RemoveLineItem at ./spec/services/spree/cart/remove_line_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/services/spree/cart/remove_line_item_spec.rb"},{"name":"evaluate service to success","suite":"Spree::Cart::RemoveOutOfStockItems at ./spec/services/spree/cart/remove_out_of_stock_items_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","suiteSourceFile":"core/spec/services/spree/cart/remove_out_of_stock_items_spec.rb"},{"name":"removes line item and render discontinued flash message","suite":"Spree::Cart::RemoveOutOfStockItems at ./spec/services/spree/cart/remove_out_of_stock_items_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2\"}}","suiteSourceFile":"core/spec/services/spree/cart/remove_out_of_stock_items_spec.rb"},{"name":"removes line item and render out of stock flash message","suite":"Spree::Cart::RemoveOutOfStockItems at ./spec/services/spree/cart/remove_out_of_stock_items_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3\"}}","suiteSourceFile":"core/spec/services/spree/cart/remove_out_of_stock_items_spec.rb"},{"name":"renders discontinued flash message when line item is deleted","suite":"Spree::Cart::RemoveOutOfStockItems at ./spec/services/spree/cart/remove_out_of_stock_items_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4\"}}","suiteSourceFile":"core/spec/services/spree/cart/remove_out_of_stock_items_spec.rb"},{"name":"renders discontinued flash message when line item is discontinued","suite":"Spree::Cart::RemoveOutOfStockItems at ./spec/services/spree/cart/remove_out_of_stock_items_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5\"}}","suiteSourceFile":"core/spec/services/spree/cart/remove_out_of_stock_items_spec.rb"},{"name":"renders discontinued flash message when a variant is discontinued","suite":"Spree::Cart::RemoveOutOfStockItems at ./spec/services/spree/cart/remove_out_of_stock_items_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6\"}}","suiteSourceFile":"core/spec/services/spree/cart/remove_out_of_stock_items_spec.rb"},{"name":"with non-backorderable item with sufficient stock quantity returns successful result","suite":"Spree::Cart::SetQuantity at ./spec/services/spree/cart/set_quantity_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/services/spree/cart/set_quantity_spec.rb"},{"name":"with non-backorderable item with insufficient stock quantity return result with success equal false","suite":"Spree::Cart::SetQuantity at ./spec/services/spree/cart/set_quantity_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/services/spree/cart/set_quantity_spec.rb"},{"name":"with backorderable item returns successful result","suite":"Spree::Cart::SetQuantity at ./spec/services/spree/cart/set_quantity_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/services/spree/cart/set_quantity_spec.rb"},{"name":"#call there is no store credit does not create a store credit payment","suite":"Spree::Checkout::AddStoreCredit at ./spec/services/spree/checkout/add_store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/services/spree/checkout/add_store_credit_spec.rb"},{"name":"#call there is no store credit returns error","suite":"Spree::Checkout::AddStoreCredit at ./spec/services/spree/checkout/add_store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2\"}}","suiteSourceFile":"core/spec/services/spree/checkout/add_store_credit_spec.rb"},{"name":"#call there is enough store credit to pay for the entire order with no amount specified creates a store credit payment for the full amount","suite":"Spree::Checkout::AddStoreCredit at ./spec/services/spree/checkout/add_store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1:1\"}}","suiteSourceFile":"core/spec/services/spree/checkout/add_store_credit_spec.rb"},{"name":"#call there is enough store credit to pay for the entire order with store credit amount specified creates a store credit payment for the specified amount","suite":"Spree::Checkout::AddStoreCredit at ./spec/services/spree/checkout/add_store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:1\"}}","suiteSourceFile":"core/spec/services/spree/checkout/add_store_credit_spec.rb"},{"name":"#call the available store credit is not enough to pay for the entire order creates a store credit payment for the available amount","suite":"Spree::Checkout::AddStoreCredit at ./spec/services/spree/checkout/add_store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","suiteSourceFile":"core/spec/services/spree/checkout/add_store_credit_spec.rb"},{"name":"#call there are multiple store credits uses the primary store credit type over the secondary","suite":"Spree::Checkout::AddStoreCredit at ./spec/services/spree/checkout/add_store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1\"}}","suiteSourceFile":"core/spec/services/spree/checkout/add_store_credit_spec.rb"},{"name":"#call with no specific target state advances the order until it cannot proceed further","suite":"Spree::Checkout::Advance at ./spec/services/spree/checkout/advance_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/services/spree/checkout/advance_spec.rb"},{"name":"#call with no specific target state updates order states after advancement","suite":"Spree::Checkout::Advance at ./spec/services/spree/checkout/advance_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2\"}}","suiteSourceFile":"core/spec/services/spree/checkout/advance_spec.rb"},{"name":"#call with no specific target state when no transition has been made responds with an error","suite":"Spree::Checkout::Advance at ./spec/services/spree/checkout/advance_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:1\"}}","suiteSourceFile":"core/spec/services/spree/checkout/advance_spec.rb"},{"name":"#call with specific target state returns failure for invalid state","suite":"Spree::Checkout::Advance at ./spec/services/spree/checkout/advance_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/services/spree/checkout/advance_spec.rb"},{"name":"#call with specific target state returns success if order already passed target state","suite":"Spree::Checkout::Advance at ./spec/services/spree/checkout/advance_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2\"}}","suiteSourceFile":"core/spec/services/spree/checkout/advance_spec.rb"},{"name":"#call with specific target state advances the order to target state","suite":"Spree::Checkout::Advance at ./spec/services/spree/checkout/advance_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:3\"}}","suiteSourceFile":"core/spec/services/spree/checkout/advance_spec.rb"},{"name":"#call with specific target state when unable to reach the targeted state responds with an error","suite":"Spree::Checkout::Advance at ./spec/services/spree/checkout/advance_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:4:1\"}}","suiteSourceFile":"core/spec/services/spree/checkout/advance_spec.rb"},{"name":"#call with shipping method selection updates shipping method during advancement","suite":"Spree::Checkout::Advance at ./spec/services/spree/checkout/advance_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","suiteSourceFile":"core/spec/services/spree/checkout/advance_spec.rb"},{"name":"#call with shipping method selection on shipping method failure keeps the old shipping method","suite":"Spree::Checkout::Advance at ./spec/services/spree/checkout/advance_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:2:1\"}}","suiteSourceFile":"core/spec/services/spree/checkout/advance_spec.rb"},{"name":"#call when next service fails returns failure result","suite":"Spree::Checkout::Advance at ./spec/services/spree/checkout/advance_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1\"}}","suiteSourceFile":"core/spec/services/spree/checkout/advance_spec.rb"},{"name":"#call when order is complete stops advancement","suite":"Spree::Checkout::Advance at ./spec/services/spree/checkout/advance_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5:1\"}}","suiteSourceFile":"core/spec/services/spree/checkout/advance_spec.rb"},{"name":"without shipping address behaves like failure returns error","suite":"Spree::Checkout::GetShippingRates at ./spec/services/spree/checkout/get_shipping_rates_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/services/spree/checkout/get_shipping_rates_spec.rb"},{"name":"without shipping address behaves like failure doesn't generate shipping rates","suite":"Spree::Checkout::GetShippingRates at ./spec/services/spree/checkout/get_shipping_rates_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2\"}}","suiteSourceFile":"core/spec/services/spree/checkout/get_shipping_rates_spec.rb"},{"name":"without line items behaves like failure returns error","suite":"Spree::Checkout::GetShippingRates at ./spec/services/spree/checkout/get_shipping_rates_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","suiteSourceFile":"core/spec/services/spree/checkout/get_shipping_rates_spec.rb"},{"name":"without line items behaves like failure doesn't generate shipping rates","suite":"Spree::Checkout::GetShippingRates at ./spec/services/spree/checkout/get_shipping_rates_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:2\"}}","suiteSourceFile":"core/spec/services/spree/checkout/get_shipping_rates_spec.rb"},{"name":"with line items and shipping address without shipments behaves like generates shipping rates returns shipping rates","suite":"Spree::Checkout::GetShippingRates at ./spec/services/spree/checkout/get_shipping_rates_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1:1\"}}","suiteSourceFile":"core/spec/services/spree/checkout/get_shipping_rates_spec.rb"},{"name":"with line items and shipping address without shipments behaves like generates shipping rates doesn't update checkout state","suite":"Spree::Checkout::GetShippingRates at ./spec/services/spree/checkout/get_shipping_rates_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1:2\"}}","suiteSourceFile":"core/spec/services/spree/checkout/get_shipping_rates_spec.rb"},{"name":"with line items and shipping address without shipments behaves like applies standard shipping costs for shipment","suite":"Spree::Checkout::GetShippingRates at ./spec/services/spree/checkout/get_shipping_rates_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:2:1\"}}","suiteSourceFile":"core/spec/services/spree/checkout/get_shipping_rates_spec.rb"},{"name":"with line items and shipping address without shipments behaves like applies standard shipping costs updates shipment total","suite":"Spree::Checkout::GetShippingRates at ./spec/services/spree/checkout/get_shipping_rates_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:2:2\"}}","suiteSourceFile":"core/spec/services/spree/checkout/get_shipping_rates_spec.rb"},{"name":"with line items and shipping address with already present shipments replaces current shipments with new ones","suite":"Spree::Checkout::GetShippingRates at ./spec/services/spree/checkout/get_shipping_rates_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:3\"}}","suiteSourceFile":"core/spec/services/spree/checkout/get_shipping_rates_spec.rb"},{"name":"with line items and shipping address with already present shipments behaves like generates shipping rates returns shipping rates","suite":"Spree::Checkout::GetShippingRates at ./spec/services/spree/checkout/get_shipping_rates_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1:1\"}}","suiteSourceFile":"core/spec/services/spree/checkout/get_shipping_rates_spec.rb"},{"name":"with line items and shipping address with already present shipments behaves like generates shipping rates doesn't update checkout state","suite":"Spree::Checkout::GetShippingRates at ./spec/services/spree/checkout/get_shipping_rates_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1:2\"}}","suiteSourceFile":"core/spec/services/spree/checkout/get_shipping_rates_spec.rb"},{"name":"with line items and shipping address with already present shipments behaves like applies standard shipping costs for shipment","suite":"Spree::Checkout::GetShippingRates at ./spec/services/spree/checkout/get_shipping_rates_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:2:1\"}}","suiteSourceFile":"core/spec/services/spree/checkout/get_shipping_rates_spec.rb"},{"name":"with line items and shipping address with already present shipments behaves like applies standard shipping costs updates shipment total","suite":"Spree::Checkout::GetShippingRates at ./spec/services/spree/checkout/get_shipping_rates_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:2:2\"}}","suiteSourceFile":"core/spec/services/spree/checkout/get_shipping_rates_spec.rb"},{"name":"with line items and shipping address with free shipping promotion applies promotion","suite":"Spree::Checkout::GetShippingRates at ./spec/services/spree/checkout/get_shipping_rates_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3:1\"}}","suiteSourceFile":"core/spec/services/spree/checkout/get_shipping_rates_spec.rb"},{"name":"#call when order is not complete example at ./spec/services/spree/checkout/remove_store_credit_spec.rb:19","suite":"Spree::Checkout::RemoveStoreCredit at ./spec/services/spree/checkout/remove_store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/services/spree/checkout/remove_store_credit_spec.rb"},{"name":"#call when order is not complete example at ./spec/services/spree/checkout/remove_store_credit_spec.rb:20","suite":"Spree::Checkout::RemoveStoreCredit at ./spec/services/spree/checkout/remove_store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2\"}}","suiteSourceFile":"core/spec/services/spree/checkout/remove_store_credit_spec.rb"},{"name":"#call when order is complete example at ./spec/services/spree/checkout/remove_store_credit_spec.rb:32","suite":"Spree::Checkout::RemoveStoreCredit at ./spec/services/spree/checkout/remove_store_credit_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/services/spree/checkout/remove_store_credit_spec.rb"},{"name":"one shipment valid shipping method example at ./spec/services/spree/checkout/select_shipping_method_spec.rb:53","suite":"Spree::Checkout::SelectShippingMethod at ./spec/services/spree/checkout/select_shipping_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/services/spree/checkout/select_shipping_method_spec.rb"},{"name":"one shipment valid shipping method example at ./spec/services/spree/checkout/select_shipping_method_spec.rb:54","suite":"Spree::Checkout::SelectShippingMethod at ./spec/services/spree/checkout/select_shipping_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2\"}}","suiteSourceFile":"core/spec/services/spree/checkout/select_shipping_method_spec.rb"},{"name":"one shipment valid shipping method example at ./spec/services/spree/checkout/select_shipping_method_spec.rb:55","suite":"Spree::Checkout::SelectShippingMethod at ./spec/services/spree/checkout/select_shipping_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3\"}}","suiteSourceFile":"core/spec/services/spree/checkout/select_shipping_method_spec.rb"},{"name":"one shipment valid shipping method sets selected shipping method for shipment","suite":"Spree::Checkout::SelectShippingMethod at ./spec/services/spree/checkout/select_shipping_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:4\"}}","suiteSourceFile":"core/spec/services/spree/checkout/select_shipping_method_spec.rb"},{"name":"one shipment missing shipping method example at ./spec/services/spree/checkout/select_shipping_method_spec.rb:71","suite":"Spree::Checkout::SelectShippingMethod at ./spec/services/spree/checkout/select_shipping_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/services/spree/checkout/select_shipping_method_spec.rb"},{"name":"one shipment missing shipping method example at ./spec/services/spree/checkout/select_shipping_method_spec.rb:72","suite":"Spree::Checkout::SelectShippingMethod at ./spec/services/spree/checkout/select_shipping_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2\"}}","suiteSourceFile":"core/spec/services/spree/checkout/select_shipping_method_spec.rb"},{"name":"one shipment missing shipping method example at ./spec/services/spree/checkout/select_shipping_method_spec.rb:73","suite":"Spree::Checkout::SelectShippingMethod at ./spec/services/spree/checkout/select_shipping_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:3\"}}","suiteSourceFile":"core/spec/services/spree/checkout/select_shipping_method_spec.rb"},{"name":"multiple shipments update selected shipment example at ./spec/services/spree/checkout/select_shipping_method_spec.rb:97","suite":"Spree::Checkout::SelectShippingMethod at ./spec/services/spree/checkout/select_shipping_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","suiteSourceFile":"core/spec/services/spree/checkout/select_shipping_method_spec.rb"},{"name":"multiple shipments update selected shipment sets selected shipping method for the specified shipment","suite":"Spree::Checkout::SelectShippingMethod at ./spec/services/spree/checkout/select_shipping_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:2\"}}","suiteSourceFile":"core/spec/services/spree/checkout/select_shipping_method_spec.rb"},{"name":"multiple shipments update all shipments example at ./spec/services/spree/checkout/select_shipping_method_spec.rb:110","suite":"Spree::Checkout::SelectShippingMethod at ./spec/services/spree/checkout/select_shipping_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","suiteSourceFile":"core/spec/services/spree/checkout/select_shipping_method_spec.rb"},{"name":"multiple shipments update all shipments sets selected shipping method for all shipments","suite":"Spree::Checkout::SelectShippingMethod at ./spec/services/spree/checkout/select_shipping_method_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:2\"}}","suiteSourceFile":"core/spec/services/spree/checkout/select_shipping_method_spec.rb"},{"name":"#transform_address_params with ship_address order params will return hash contain country_id","suite":"Spree::Checkout::Update at ./spec/services/spree/checkout/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/services/spree/checkout/update_spec.rb"},{"name":"#transform_address_params with ship_address order params will return hash without country_iso","suite":"Spree::Checkout::Update at ./spec/services/spree/checkout/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2\"}}","suiteSourceFile":"core/spec/services/spree/checkout/update_spec.rb"},{"name":"#transform_address_params with bill_address order params will return hash contain country_id","suite":"Spree::Checkout::Update at ./spec/services/spree/checkout/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/services/spree/checkout/update_spec.rb"},{"name":"#transform_address_params with bill_address order params will return hash without country_iso","suite":"Spree::Checkout::Update at ./spec/services/spree/checkout/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2\"}}","suiteSourceFile":"core/spec/services/spree/checkout/update_spec.rb"},{"name":"update address at cart state should set order back to address state","suite":"Spree::Checkout::Update at ./spec/services/spree/checkout/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","suiteSourceFile":"core/spec/services/spree/checkout/update_spec.rb"},{"name":"update address at cart state should not set order back to address state if do_not_change_state is true","suite":"Spree::Checkout::Update at ./spec/services/spree/checkout/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:2\"}}","suiteSourceFile":"core/spec/services/spree/checkout/update_spec.rb"},{"name":"update address at cart state should set order back to address state if quick checkout cancelled","suite":"Spree::Checkout::Update at ./spec/services/spree/checkout/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:3\"}}","suiteSourceFile":"core/spec/services/spree/checkout/update_spec.rb"},{"name":"update address at address state when address did not change does not change order addresses","suite":"Spree::Checkout::Update at ./spec/services/spree/checkout/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1:3\"}}","suiteSourceFile":"core/spec/services/spree/checkout/update_spec.rb"},{"name":"update address at address state when address did not change behaves like user default addresses did not change does not change user default addresses","suite":"Spree::Checkout::Update at ./spec/services/spree/checkout/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1:1:1\"}}","suiteSourceFile":"core/spec/services/spree/checkout/update_spec.rb"},{"name":"update address at address state when address did not change behaves like checkout is in address step keeps checkout in address step","suite":"Spree::Checkout::Update at ./spec/services/spree/checkout/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1:2:1\"}}","suiteSourceFile":"core/spec/services/spree/checkout/update_spec.rb"},{"name":"update address at address state when ship address changed should update order ship address","suite":"Spree::Checkout::Update at ./spec/services/spree/checkout/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:2:3\"}}","suiteSourceFile":"core/spec/services/spree/checkout/update_spec.rb"},{"name":"update address at address state when ship address changed behaves like user default addresses did not change does not change user default addresses","suite":"Spree::Checkout::Update at ./spec/services/spree/checkout/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:2:1:1\"}}","suiteSourceFile":"core/spec/services/spree/checkout/update_spec.rb"},{"name":"update address at address state when ship address changed behaves like checkout is in address step keeps checkout in address step","suite":"Spree::Checkout::Update at ./spec/services/spree/checkout/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:2:2:1\"}}","suiteSourceFile":"core/spec/services/spree/checkout/update_spec.rb"},{"name":"update address at address state when bill address changed should update order bill address","suite":"Spree::Checkout::Update at ./spec/services/spree/checkout/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:3:3\"}}","suiteSourceFile":"core/spec/services/spree/checkout/update_spec.rb"},{"name":"update address at address state when bill address changed behaves like user default addresses did not change does not change user default addresses","suite":"Spree::Checkout::Update at ./spec/services/spree/checkout/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:3:1:1\"}}","suiteSourceFile":"core/spec/services/spree/checkout/update_spec.rb"},{"name":"update address at address state when bill address changed behaves like checkout is in address step keeps checkout in address step","suite":"Spree::Checkout::Update at ./spec/services/spree/checkout/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:3:2:1\"}}","suiteSourceFile":"core/spec/services/spree/checkout/update_spec.rb"},{"name":"update address at address state when ship and bill address changed should update both order addresses","suite":"Spree::Checkout::Update at ./spec/services/spree/checkout/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:4:3\"}}","suiteSourceFile":"core/spec/services/spree/checkout/update_spec.rb"},{"name":"update address at address state when ship and bill address changed behaves like user default addresses did not change does not change user default addresses","suite":"Spree::Checkout::Update at ./spec/services/spree/checkout/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:4:1:1\"}}","suiteSourceFile":"core/spec/services/spree/checkout/update_spec.rb"},{"name":"update address at address state when ship and bill address changed behaves like checkout is in address step keeps checkout in address step","suite":"Spree::Checkout::Update at ./spec/services/spree/checkout/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:4:2:1\"}}","suiteSourceFile":"core/spec/services/spree/checkout/update_spec.rb"},{"name":"address ownership validation when bill_address_attributes contains id of another user address returns failure","suite":"Spree::Checkout::Update at ./spec/services/spree/checkout/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","suiteSourceFile":"core/spec/services/spree/checkout/update_spec.rb"},{"name":"address ownership validation when bill_address_attributes contains id of another user address does not associate the other user address with the order","suite":"Spree::Checkout::Update at ./spec/services/spree/checkout/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:2\"}}","suiteSourceFile":"core/spec/services/spree/checkout/update_spec.rb"},{"name":"address ownership validation when ship_address_attributes contains id of another user address returns failure","suite":"Spree::Checkout::Update at ./spec/services/spree/checkout/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","suiteSourceFile":"core/spec/services/spree/checkout/update_spec.rb"},{"name":"address ownership validation when ship_address_attributes contains id of another user address does not associate the other user address with the order","suite":"Spree::Checkout::Update at ./spec/services/spree/checkout/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:2\"}}","suiteSourceFile":"core/spec/services/spree/checkout/update_spec.rb"},{"name":"address ownership validation when address_attributes contains id of the same user address returns success","suite":"Spree::Checkout::Update at ./spec/services/spree/checkout/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3:1\"}}","suiteSourceFile":"core/spec/services/spree/checkout/update_spec.rb"},{"name":"address ownership validation when address_attributes contains id of address with no user returns success","suite":"Spree::Checkout::Update at ./spec/services/spree/checkout/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4:1\"}}","suiteSourceFile":"core/spec/services/spree/checkout/update_spec.rb"},{"name":"address ownership validation when address_attributes does not contain id returns success","suite":"Spree::Checkout::Update at ./spec/services/spree/checkout/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:5:1\"}}","suiteSourceFile":"core/spec/services/spree/checkout/update_spec.rb"},{"name":"update selected shipping rate should set order back to delivery state","suite":"Spree::Checkout::Update at ./spec/services/spree/checkout/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/services/spree/checkout/update_spec.rb"},{"name":"success example at ./spec/services/spree/classifications/reposition_spec.rb:12","suite":"Spree::Classifications::Reposition at ./spec/services/spree/classifications/reposition_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/services/spree/classifications/reposition_spec.rb"},{"name":"success example at ./spec/services/spree/classifications/reposition_spec.rb:13","suite":"Spree::Classifications::Reposition at ./spec/services/spree/classifications/reposition_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/services/spree/classifications/reposition_spec.rb"},{"name":"success example at ./spec/services/spree/classifications/reposition_spec.rb:14","suite":"Spree::Classifications::Reposition at ./spec/services/spree/classifications/reposition_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/services/spree/classifications/reposition_spec.rb"},{"name":"failure example at ./spec/services/spree/classifications/reposition_spec.rb:20","suite":"Spree::Classifications::Reposition at ./spec/services/spree/classifications/reposition_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/services/spree/classifications/reposition_spec.rb"},{"name":"failure example at ./spec/services/spree/classifications/reposition_spec.rb:21","suite":"Spree::Classifications::Reposition at ./spec/services/spree/classifications/reposition_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","suiteSourceFile":"core/spec/services/spree/classifications/reposition_spec.rb"},{"name":"#call destroy credit_card and update payment state","suite":"Spree::CreditCards::Destroy at ./spec/services/spree/credit_cards/destroy_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/services/spree/credit_cards/destroy_spec.rb"},{"name":"#invalidate_payments destroy credit_card and invalidate valid checkout payments","suite":"Spree::CreditCards::Destroy at ./spec/services/spree/credit_cards/destroy_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/services/spree/credit_cards/destroy_spec.rb"},{"name":"#void_payments destroy credit_card and void valid payments","suite":"Spree::CreditCards::Destroy at ./spec/services/spree/credit_cards/destroy_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/services/spree/credit_cards/destroy_spec.rb"},{"name":"#destroy remove credit_card","suite":"Spree::CreditCards::Destroy at ./spec/services/spree/credit_cards/destroy_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/services/spree/credit_cards/destroy_spec.rb"},{"name":"#call does not mutate product name when generating titles for multiple variants","suite":"Spree::DataFeeds::Google::RequiredAttributes at ./spec/services/spree/data_feeds/google/required_attributes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/services/spree/data_feeds/google/required_attributes_spec.rb"},{"name":"store header is generated correctly include store name","suite":"Spree::DataFeeds::Google::Rss at ./spec/services/spree/data_feeds/google/rss_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/services/spree/data_feeds/google/rss_spec.rb"},{"name":"store header is generated correctly includes store url","suite":"Spree::DataFeeds::Google::Rss at ./spec/services/spree/data_feeds/google/rss_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/services/spree/data_feeds/google/rss_spec.rb"},{"name":"store header is generated correctly includes store description","suite":"Spree::DataFeeds::Google::Rss at ./spec/services/spree/data_feeds/google/rss_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/services/spree/data_feeds/google/rss_spec.rb"},{"name":"required item attributes are generated correctly includes id","suite":"Spree::DataFeeds::Google::Rss at ./spec/services/spree/data_feeds/google/rss_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/services/spree/data_feeds/google/rss_spec.rb"},{"name":"required item attributes are generated correctly includes product id as item_group_id","suite":"Spree::DataFeeds::Google::Rss at ./spec/services/spree/data_feeds/google/rss_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","suiteSourceFile":"core/spec/services/spree/data_feeds/google/rss_spec.rb"},{"name":"required item attributes are generated correctly includes title","suite":"Spree::DataFeeds::Google::Rss at ./spec/services/spree/data_feeds/google/rss_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3\"}}","suiteSourceFile":"core/spec/services/spree/data_feeds/google/rss_spec.rb"},{"name":"required item attributes are generated correctly includes description","suite":"Spree::DataFeeds::Google::Rss at ./spec/services/spree/data_feeds/google/rss_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:4\"}}","suiteSourceFile":"core/spec/services/spree/data_feeds/google/rss_spec.rb"},{"name":"required item attributes are generated correctly includes link","suite":"Spree::DataFeeds::Google::Rss at ./spec/services/spree/data_feeds/google/rss_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:5\"}}","suiteSourceFile":"core/spec/services/spree/data_feeds/google/rss_spec.rb"},{"name":"required item attributes are generated correctly includes image link","suite":"Spree::DataFeeds::Google::Rss at ./spec/services/spree/data_feeds/google/rss_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:6\"}}","suiteSourceFile":"core/spec/services/spree/data_feeds/google/rss_spec.rb"},{"name":"required item attributes are generated correctly includes price","suite":"Spree::DataFeeds::Google::Rss at ./spec/services/spree/data_feeds/google/rss_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:7\"}}","suiteSourceFile":"core/spec/services/spree/data_feeds/google/rss_spec.rb"},{"name":"required item attributes are generated correctly product is set to available shows that product is in stock","suite":"Spree::DataFeeds::Google::Rss at ./spec/services/spree/data_feeds/google/rss_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:8:1\"}}","suiteSourceFile":"core/spec/services/spree/data_feeds/google/rss_spec.rb"},{"name":"required item attributes are generated correctly product is set to available shows that product availability date is the same","suite":"Spree::DataFeeds::Google::Rss at ./spec/services/spree/data_feeds/google/rss_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:8:2\"}}","suiteSourceFile":"core/spec/services/spree/data_feeds/google/rss_spec.rb"},{"name":"required item attributes are generated correctly product is set to backorderable shows that product is on backorder","suite":"Spree::DataFeeds::Google::Rss at ./spec/services/spree/data_feeds/google/rss_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:9:1\"}}","suiteSourceFile":"core/spec/services/spree/data_feeds/google/rss_spec.rb"},{"name":"required item attributes are generated correctly availability date is nil shows that product is in stock","suite":"Spree::DataFeeds::Google::Rss at ./spec/services/spree/data_feeds/google/rss_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:10:1\"}}","suiteSourceFile":"core/spec/services/spree/data_feeds/google/rss_spec.rb"},{"name":"required item attributes are generated correctly availability date is nil shows that product availability date is nil","suite":"Spree::DataFeeds::Google::Rss at ./spec/services/spree/data_feeds/google/rss_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:10:2\"}}","suiteSourceFile":"core/spec/services/spree/data_feeds/google/rss_spec.rb"},{"name":"optional item attributes are generated correctly adds brand to item attributes","suite":"Spree::DataFeeds::Google::Rss at ./spec/services/spree/data_feeds/google/rss_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/services/spree/data_feeds/google/rss_spec.rb"},{"name":"applies the gift card to an order","suite":"Spree::GiftCards::Apply at ./spec/services/spree/gift_cards/apply_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","suiteSourceFile":"core/spec/services/spree/gift_cards/apply_spec.rb"},{"name":"calls update_with_updater!","suite":"Spree::GiftCards::Apply at ./spec/services/spree/gift_cards/apply_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2\"}}","suiteSourceFile":"core/spec/services/spree/gift_cards/apply_spec.rb"},{"name":"when the order has applied store credit responds with an error","suite":"Spree::GiftCards::Apply at ./spec/services/spree/gift_cards/apply_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/services/spree/gift_cards/apply_spec.rb"},{"name":"when the gift card has a different currency responds with an error","suite":"Spree::GiftCards::Apply at ./spec/services/spree/gift_cards/apply_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/services/spree/gift_cards/apply_spec.rb"},{"name":"when the gift card is assigned to a user with valid user applies the gift card to the order","suite":"Spree::GiftCards::Apply at ./spec/services/spree/gift_cards/apply_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:1\"}}","suiteSourceFile":"core/spec/services/spree/gift_cards/apply_spec.rb"},{"name":"when the gift card is assigned to a user with valid user calls update_with_updater!","suite":"Spree::GiftCards::Apply at ./spec/services/spree/gift_cards/apply_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:2\"}}","suiteSourceFile":"core/spec/services/spree/gift_cards/apply_spec.rb"},{"name":"when the gift card is assigned to a user with guest order responds with an error","suite":"Spree::GiftCards::Apply at ./spec/services/spree/gift_cards/apply_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1\"}}","suiteSourceFile":"core/spec/services/spree/gift_cards/apply_spec.rb"},{"name":"when the gift card is assigned to a user with another user order responds with an error","suite":"Spree::GiftCards::Apply at ./spec/services/spree/gift_cards/apply_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3:1\"}}","suiteSourceFile":"core/spec/services/spree/gift_cards/apply_spec.rb"},{"name":"when the gift card has no amount remaining responds with an error","suite":"Spree::GiftCards::Apply at ./spec/services/spree/gift_cards/apply_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","suiteSourceFile":"core/spec/services/spree/gift_cards/apply_spec.rb"},{"name":"when the gift card has no amount remaining calls redeem! on the gift card","suite":"Spree::GiftCards::Redeem at ./spec/services/spree/gift_cards/redeem_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/services/spree/gift_cards/redeem_spec.rb"},{"name":"when the gift card has no amount remaining returns success with the gift card","suite":"Spree::GiftCards::Redeem at ./spec/services/spree/gift_cards/redeem_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/services/spree/gift_cards/redeem_spec.rb"},{"name":"when the gift card has amount remaining calls partial_redeem! on the gift card","suite":"Spree::GiftCards::Redeem at ./spec/services/spree/gift_cards/redeem_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/services/spree/gift_cards/redeem_spec.rb"},{"name":"when the gift card has amount remaining returns success with the gift card","suite":"Spree::GiftCards::Redeem at ./spec/services/spree/gift_cards/redeem_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","suiteSourceFile":"core/spec/services/spree/gift_cards/redeem_spec.rb"},{"name":"for an order with the gift card applied removes the gift card from an order","suite":"Spree::GiftCards::Remove at ./spec/services/spree/gift_cards/remove_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/services/spree/gift_cards/remove_spec.rb"},{"name":"for an order with the gift card applied calls update_with_updater!","suite":"Spree::GiftCards::Remove at ./spec/services/spree/gift_cards/remove_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/services/spree/gift_cards/remove_spec.rb"},{"name":"for an order with the gift card applied for a completed order responds with an error","suite":"Spree::GiftCards::Remove at ./spec/services/spree/gift_cards/remove_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","suiteSourceFile":"core/spec/services/spree/gift_cards/remove_spec.rb"},{"name":"for an order without a gift card does nothing","suite":"Spree::GiftCards::Remove at ./spec/services/spree/gift_cards/remove_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/services/spree/gift_cards/remove_spec.rb"},{"name":"when importing a master variant product row creates a product and sets correct attributes","suite":"Spree::Imports::RowProcessors::ProductVariant at ./spec/services/spree/imports/row_processors/product_variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/services/spree/imports/row_processors/product_variant_spec.rb"},{"name":"when importing a master variant product row when updating an existing master variant updates inventory_count and inventory_backorderable","suite":"Spree::Imports::RowProcessors::ProductVariant at ./spec/services/spree/imports/row_processors/product_variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/services/spree/imports/row_processors/product_variant_spec.rb"},{"name":"when importing a variant row with options assigns to existing product and creates/re-uses option values","suite":"Spree::Imports::RowProcessors::ProductVariant at ./spec/services/spree/imports/row_processors/product_variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/services/spree/imports/row_processors/product_variant_spec.rb"},{"name":"when importing a variant row with options when importing a variant row for existing variant updates the variant","suite":"Spree::Imports::RowProcessors::ProductVariant at ./spec/services/spree/imports/row_processors/product_variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","suiteSourceFile":"core/spec/services/spree/imports/row_processors/product_variant_spec.rb"},{"name":"when importing a variant row with options when importing a variant row for existing variant when updating inventory values updates inventory_count and inventory_backorderable","suite":"Spree::Imports::RowProcessors::ProductVariant at ./spec/services/spree/imports/row_processors/product_variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:2:1\"}}","suiteSourceFile":"core/spec/services/spree/imports/row_processors/product_variant_spec.rb"},{"name":"when importing a variant row with a new option type/value creates a new option type and value as needed","suite":"Spree::Imports::RowProcessors::ProductVariant at ./spec/services/spree/imports/row_processors/product_variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/services/spree/imports/row_processors/product_variant_spec.rb"},{"name":"with images saves the images","suite":"Spree::Imports::RowProcessors::ProductVariant at ./spec/services/spree/imports/row_processors/product_variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/services/spree/imports/row_processors/product_variant_spec.rb"},{"name":"with taxons assigns taxons to the product","suite":"Spree::Imports::RowProcessors::ProductVariant at ./spec/services/spree/imports/row_processors/product_variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","suiteSourceFile":"core/spec/services/spree/imports/row_processors/product_variant_spec.rb"},{"name":"with taxons when the taxons already exist assigns the existing taxons to the product","suite":"Spree::Imports::RowProcessors::ProductVariant at ./spec/services/spree/imports/row_processors/product_variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1\"}}","suiteSourceFile":"core/spec/services/spree/imports/row_processors/product_variant_spec.rb"},{"name":"with taxons when taxons are not provided assigns no taxons to the product","suite":"Spree::Imports::RowProcessors::ProductVariant at ./spec/services/spree/imports/row_processors/product_variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3:1\"}}","suiteSourceFile":"core/spec/services/spree/imports/row_processors/product_variant_spec.rb"},{"name":"with taxons when taxons format is invalid skips invalid taxons","suite":"Spree::Imports::RowProcessors::ProductVariant at ./spec/services/spree/imports/row_processors/product_variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:4:1\"}}","suiteSourceFile":"core/spec/services/spree/imports/row_processors/product_variant_spec.rb"},{"name":"with taxons when importing a variant row with no taxons keeps the product taxons","suite":"Spree::Imports::RowProcessors::ProductVariant at ./spec/services/spree/imports/row_processors/product_variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:5:1\"}}","suiteSourceFile":"core/spec/services/spree/imports/row_processors/product_variant_spec.rb"},{"name":"when importing a variant with all option columns empty does not create a variant","suite":"Spree::Imports::RowProcessors::ProductVariant at ./spec/services/spree/imports/row_processors/product_variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","suiteSourceFile":"core/spec/services/spree/imports/row_processors/product_variant_spec.rb"},{"name":"when importing a variant row with options but product does not exist raises ActiveRecord::RecordNotFound","suite":"Spree::Imports::RowProcessors::ProductVariant at ./spec/services/spree/imports/row_processors/product_variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","suiteSourceFile":"core/spec/services/spree/imports/row_processors/product_variant_spec.rb"},{"name":"when importing a variant row with options but slug is missing raises ActiveRecord::RecordNotFound with descriptive message","suite":"Spree::Imports::RowProcessors::ProductVariant at ./spec/services/spree/imports/row_processors/product_variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1\"}}","suiteSourceFile":"core/spec/services/spree/imports/row_processors/product_variant_spec.rb"},{"name":"when variant row refers to missing product slug creates a new product and assigns the variant as its master if no option1_name given","suite":"Spree::Imports::RowProcessors::ProductVariant at ./spec/services/spree/imports/row_processors/product_variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1\"}}","suiteSourceFile":"core/spec/services/spree/imports/row_processors/product_variant_spec.rb"},{"name":"with metafields creates mappings for metafields automatically","suite":"Spree::Imports::RowProcessors::ProductVariant at ./spec/services/spree/imports/row_processors/product_variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1\"}}","suiteSourceFile":"core/spec/services/spree/imports/row_processors/product_variant_spec.rb"},{"name":"with metafields auto-assigns file_column for metafield mappings when CSV headers match","suite":"Spree::Imports::RowProcessors::ProductVariant at ./spec/services/spree/imports/row_processors/product_variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:2\"}}","suiteSourceFile":"core/spec/services/spree/imports/row_processors/product_variant_spec.rb"},{"name":"with metafields sets metafields on the product","suite":"Spree::Imports::RowProcessors::ProductVariant at ./spec/services/spree/imports/row_processors/product_variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:3\"}}","suiteSourceFile":"core/spec/services/spree/imports/row_processors/product_variant_spec.rb"},{"name":"with metafields when updating an existing product with metafields updates existing metafields","suite":"Spree::Imports::RowProcessors::ProductVariant at ./spec/services/spree/imports/row_processors/product_variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:4:1\"}}","suiteSourceFile":"core/spec/services/spree/imports/row_processors/product_variant_spec.rb"},{"name":"with metafields when metafield value is blank skips blank metafield values","suite":"Spree::Imports::RowProcessors::ProductVariant at ./spec/services/spree/imports/row_processors/product_variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:5:1\"}}","suiteSourceFile":"core/spec/services/spree/imports/row_processors/product_variant_spec.rb"},{"name":"with metafields when updating existing product metafields with blank values removes existing metafield when empty value is uploaded","suite":"Spree::Imports::RowProcessors::ProductVariant at ./spec/services/spree/imports/row_processors/product_variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:6:1\"}}","suiteSourceFile":"core/spec/services/spree/imports/row_processors/product_variant_spec.rb"},{"name":"with metafields when updating existing product metafields with blank values when all metafields have blank values removes all existing metafields","suite":"Spree::Imports::RowProcessors::ProductVariant at ./spec/services/spree/imports/row_processors/product_variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:6:2:1\"}}","suiteSourceFile":"core/spec/services/spree/imports/row_processors/product_variant_spec.rb"},{"name":"with metafields when processing a non-master variant row does not clear out existing metafield values","suite":"Spree::Imports::RowProcessors::ProductVariant at ./spec/services/spree/imports/row_processors/product_variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:7:1\"}}","suiteSourceFile":"core/spec/services/spree/imports/row_processors/product_variant_spec.rb"},{"name":"when importing with shipping_category when shipping_category exists assigns the shipping category to the product","suite":"Spree::Imports::RowProcessors::ProductVariant at ./spec/services/spree/imports/row_processors/product_variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1:1\"}}","suiteSourceFile":"core/spec/services/spree/imports/row_processors/product_variant_spec.rb"},{"name":"when importing with shipping_category when shipping_category does not exist assigns the default shipping category","suite":"Spree::Imports::RowProcessors::ProductVariant at ./spec/services/spree/imports/row_processors/product_variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2:1\"}}","suiteSourceFile":"core/spec/services/spree/imports/row_processors/product_variant_spec.rb"},{"name":"when importing with shipping_category when updating product with different shipping_category updates the shipping category","suite":"Spree::Imports::RowProcessors::ProductVariant at ./spec/services/spree/imports/row_processors/product_variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:3:1\"}}","suiteSourceFile":"core/spec/services/spree/imports/row_processors/product_variant_spec.rb"},{"name":"when importing with shipping_category when shipping_category is not provided assigns the default shipping category","suite":"Spree::Imports::RowProcessors::ProductVariant at ./spec/services/spree/imports/row_processors/product_variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:4:1\"}}","suiteSourceFile":"core/spec/services/spree/imports/row_processors/product_variant_spec.rb"},{"name":"when importing with tax_category when tax_category exists assigns the tax category to the variant","suite":"Spree::Imports::RowProcessors::ProductVariant at ./spec/services/spree/imports/row_processors/product_variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:1:1\"}}","suiteSourceFile":"core/spec/services/spree/imports/row_processors/product_variant_spec.rb"},{"name":"when importing with tax_category when tax_category does not exist does not assign a tax category","suite":"Spree::Imports::RowProcessors::ProductVariant at ./spec/services/spree/imports/row_processors/product_variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:2:1\"}}","suiteSourceFile":"core/spec/services/spree/imports/row_processors/product_variant_spec.rb"},{"name":"when importing with tax_category when updating variant with different tax_category updates the tax category","suite":"Spree::Imports::RowProcessors::ProductVariant at ./spec/services/spree/imports/row_processors/product_variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:3:1\"}}","suiteSourceFile":"core/spec/services/spree/imports/row_processors/product_variant_spec.rb"},{"name":"when importing with tax_category when tax_category is not provided does not assign a tax category","suite":"Spree::Imports::RowProcessors::ProductVariant at ./spec/services/spree/imports/row_processors/product_variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:4:1\"}}","suiteSourceFile":"core/spec/services/spree/imports/row_processors/product_variant_spec.rb"},{"name":"when importing with tax_category when importing a non-master variant with tax_category assigns tax category to the non-master variant","suite":"Spree::Imports::RowProcessors::ProductVariant at ./spec/services/spree/imports/row_processors/product_variant_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:5:1\"}}","suiteSourceFile":"core/spec/services/spree/imports/row_processors/product_variant_spec.rb"},{"name":"creates a line item with any quantity","suite":"Spree::LineItems::Create at ./spec/services/spree/line_items/create_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/services/spree/line_items/create_spec.rb"},{"name":"remove line item with any quantity","suite":"Spree::LineItems::Destroy at ./spec/services/spree/line_items/destroy_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/services/spree/line_items/destroy_spec.rb"},{"name":"given a shipment ensure shipment calls update_amounts instead of order calling ensure_updated_shipments","suite":"Spree::LineItems::Destroy at ./spec/services/spree/line_items/destroy_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/services/spree/line_items/destroy_spec.rb"},{"name":"not given a shipment ensures updated shipments","suite":"Spree::LineItems::Destroy at ./spec/services/spree/line_items/destroy_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/services/spree/line_items/destroy_spec.rb"},{"name":"updates line item with any quantity","suite":"Spree::LineItems::Update at ./spec/services/spree/line_items/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/services/spree/line_items/update_spec.rb"},{"name":"given a shipment ensure shipment calls update_amounts instead of order calling ensure_updated_shipments","suite":"Spree::LineItems::Update at ./spec/services/spree/line_items/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/services/spree/line_items/update_spec.rb"},{"name":"not given a shipment ensures updated shipments","suite":"Spree::LineItems::Update at ./spec/services/spree/line_items/update_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/services/spree/line_items/update_spec.rb"},{"name":"#call when translatable object does not have a translation in the requested locale sets mobility to retrieve value in the fallback locale","suite":"Spree::Locales::SetFallbackLocaleForStore at ./spec/services/spree/locales/set_fallback_locale_for_store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/services/spree/locales/set_fallback_locale_for_store_spec.rb"},{"name":"#call when translatable object has a translation in the requested locale sets mobility to retrieve value directly","suite":"Spree::Locales::SetFallbackLocaleForStore at ./spec/services/spree/locales/set_fallback_locale_for_store_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/services/spree/locales/set_fallback_locale_for_store_spec.rb"},{"name":"with invalid params returns a record with errors","suite":"Spree::Newsletter::Subscribe at ./spec/services/spree/newsletter/subscribe_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/services/spree/newsletter/subscribe_spec.rb"},{"name":"with invalid params does not send a confirmation email","suite":"Spree::Newsletter::Subscribe at ./spec/services/spree/newsletter/subscribe_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/services/spree/newsletter/subscribe_spec.rb"},{"name":"with invalid params does not create a new record","suite":"Spree::Newsletter::Subscribe at ./spec/services/spree/newsletter/subscribe_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/services/spree/newsletter/subscribe_spec.rb"},{"name":"when logged in user has the same email as inputed email returns an instance of NewsletterSubscriber","suite":"Spree::Newsletter::Subscribe at ./spec/services/spree/newsletter/subscribe_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/services/spree/newsletter/subscribe_spec.rb"},{"name":"when logged in user has the same email as inputed email does not send a confirmation email","suite":"Spree::Newsletter::Subscribe at ./spec/services/spree/newsletter/subscribe_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","suiteSourceFile":"core/spec/services/spree/newsletter/subscribe_spec.rb"},{"name":"when logged in user has the same email as inputed email creates a new verified subscriber","suite":"Spree::Newsletter::Subscribe at ./spec/services/spree/newsletter/subscribe_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3\"}}","suiteSourceFile":"core/spec/services/spree/newsletter/subscribe_spec.rb"},{"name":"when logged in user inputs another email sends a confirmation email","suite":"Spree::Newsletter::Subscribe at ./spec/services/spree/newsletter/subscribe_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/services/spree/newsletter/subscribe_spec.rb"},{"name":"when logged in user inputs another email returns an instance of NewsletterSubscriber","suite":"Spree::Newsletter::Subscribe at ./spec/services/spree/newsletter/subscribe_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","suiteSourceFile":"core/spec/services/spree/newsletter/subscribe_spec.rb"},{"name":"when logged in user inputs another email creates a new unverified subscriber","suite":"Spree::Newsletter::Subscribe at ./spec/services/spree/newsletter/subscribe_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3\"}}","suiteSourceFile":"core/spec/services/spree/newsletter/subscribe_spec.rb"},{"name":"when verified subscription already exists returns an instance of NewsletterSubscriber","suite":"Spree::Newsletter::Subscribe at ./spec/services/spree/newsletter/subscribe_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/services/spree/newsletter/subscribe_spec.rb"},{"name":"when verified subscription already exists does not create new subscriber","suite":"Spree::Newsletter::Subscribe at ./spec/services/spree/newsletter/subscribe_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2\"}}","suiteSourceFile":"core/spec/services/spree/newsletter/subscribe_spec.rb"},{"name":"when verified subscription already exists does not send a confirmation email","suite":"Spree::Newsletter::Subscribe at ./spec/services/spree/newsletter/subscribe_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3\"}}","suiteSourceFile":"core/spec/services/spree/newsletter/subscribe_spec.rb"},{"name":"when unverified subscription has been already created returns an instance of NewsletterSubscriber","suite":"Spree::Newsletter::Subscribe at ./spec/services/spree/newsletter/subscribe_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","suiteSourceFile":"core/spec/services/spree/newsletter/subscribe_spec.rb"},{"name":"when unverified subscription has been already created does not create new subscriber","suite":"Spree::Newsletter::Subscribe at ./spec/services/spree/newsletter/subscribe_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2\"}}","suiteSourceFile":"core/spec/services/spree/newsletter/subscribe_spec.rb"},{"name":"when unverified subscription has been already created sends a confirmation email","suite":"Spree::Newsletter::Subscribe at ./spec/services/spree/newsletter/subscribe_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3\"}}","suiteSourceFile":"core/spec/services/spree/newsletter/subscribe_spec.rb"},{"name":"with associated user verifies a subscription","suite":"Spree::Newsletter::Verify at ./spec/services/spree/newsletter/verify_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/services/spree/newsletter/verify_spec.rb"},{"name":"with associated user updates user email marketing attribute","suite":"Spree::Newsletter::Verify at ./spec/services/spree/newsletter/verify_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/services/spree/newsletter/verify_spec.rb"},{"name":"without user verifies a subscription","suite":"Spree::Newsletter::Verify at ./spec/services/spree/newsletter/verify_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/services/spree/newsletter/verify_spec.rb"},{"name":"custom events publishes newsletter_subscriber.verified event when verified","suite":"Spree::Newsletter::Verify at ./spec/services/spree/newsletter/verify_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/services/spree/newsletter/verify_spec.rb"},{"name":"with approver passed example at ./spec/services/spree/orders/approve_spec.rb:21","suite":"Spree::Orders::Approve at ./spec/services/spree/orders/approve_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/services/spree/orders/approve_spec.rb"},{"name":"with approver passed behaves like approves order example at ./spec/services/spree/orders/approve_spec.rb:13","suite":"Spree::Orders::Approve at ./spec/services/spree/orders/approve_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/services/spree/orders/approve_spec.rb"},{"name":"with approver passed behaves like approves order example at ./spec/services/spree/orders/approve_spec.rb:14","suite":"Spree::Orders::Approve at ./spec/services/spree/orders/approve_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2\"}}","suiteSourceFile":"core/spec/services/spree/orders/approve_spec.rb"},{"name":"with approver passed behaves like approves order example at ./spec/services/spree/orders/approve_spec.rb:15","suite":"Spree::Orders::Approve at ./spec/services/spree/orders/approve_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3\"}}","suiteSourceFile":"core/spec/services/spree/orders/approve_spec.rb"},{"name":"without approver passed behaves like approves order example at ./spec/services/spree/orders/approve_spec.rb:13","suite":"Spree::Orders::Approve at ./spec/services/spree/orders/approve_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","suiteSourceFile":"core/spec/services/spree/orders/approve_spec.rb"},{"name":"without approver passed behaves like approves order example at ./spec/services/spree/orders/approve_spec.rb:14","suite":"Spree::Orders::Approve at ./spec/services/spree/orders/approve_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:2\"}}","suiteSourceFile":"core/spec/services/spree/orders/approve_spec.rb"},{"name":"without approver passed behaves like approves order example at ./spec/services/spree/orders/approve_spec.rb:15","suite":"Spree::Orders::Approve at ./spec/services/spree/orders/approve_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:3\"}}","suiteSourceFile":"core/spec/services/spree/orders/approve_spec.rb"},{"name":"with canceler passed example at ./spec/services/spree/orders/cancel_spec.rb:30","suite":"Spree::Orders::Cancel at ./spec/services/spree/orders/cancel_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/services/spree/orders/cancel_spec.rb"},{"name":"with canceler passed behaves like tries to cancel completed order example at ./spec/services/spree/orders/cancel_spec.rb:14","suite":"Spree::Orders::Cancel at ./spec/services/spree/orders/cancel_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","suiteSourceFile":"core/spec/services/spree/orders/cancel_spec.rb"},{"name":"with canceler passed behaves like tries to cancel completed order example at ./spec/services/spree/orders/cancel_spec.rb:15","suite":"Spree::Orders::Cancel at ./spec/services/spree/orders/cancel_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:2\"}}","suiteSourceFile":"core/spec/services/spree/orders/cancel_spec.rb"},{"name":"with canceler passed behaves like tries to cancel completed order example at ./spec/services/spree/orders/cancel_spec.rb:16","suite":"Spree::Orders::Cancel at ./spec/services/spree/orders/cancel_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:3\"}}","suiteSourceFile":"core/spec/services/spree/orders/cancel_spec.rb"},{"name":"with canceler passed behaves like tries to cancel incomplete order example at ./spec/services/spree/orders/cancel_spec.rb:22","suite":"Spree::Orders::Cancel at ./spec/services/spree/orders/cancel_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","suiteSourceFile":"core/spec/services/spree/orders/cancel_spec.rb"},{"name":"with canceler passed behaves like tries to cancel incomplete order example at ./spec/services/spree/orders/cancel_spec.rb:23","suite":"Spree::Orders::Cancel at ./spec/services/spree/orders/cancel_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:2\"}}","suiteSourceFile":"core/spec/services/spree/orders/cancel_spec.rb"},{"name":"without canceler passed behaves like tries to cancel completed order example at ./spec/services/spree/orders/cancel_spec.rb:14","suite":"Spree::Orders::Cancel at ./spec/services/spree/orders/cancel_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1:1\"}}","suiteSourceFile":"core/spec/services/spree/orders/cancel_spec.rb"},{"name":"without canceler passed behaves like tries to cancel completed order example at ./spec/services/spree/orders/cancel_spec.rb:15","suite":"Spree::Orders::Cancel at ./spec/services/spree/orders/cancel_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1:2\"}}","suiteSourceFile":"core/spec/services/spree/orders/cancel_spec.rb"},{"name":"without canceler passed behaves like tries to cancel completed order example at ./spec/services/spree/orders/cancel_spec.rb:16","suite":"Spree::Orders::Cancel at ./spec/services/spree/orders/cancel_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1:3\"}}","suiteSourceFile":"core/spec/services/spree/orders/cancel_spec.rb"},{"name":"without canceler passed behaves like tries to cancel incomplete order example at ./spec/services/spree/orders/cancel_spec.rb:22","suite":"Spree::Orders::Cancel at ./spec/services/spree/orders/cancel_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:2:1\"}}","suiteSourceFile":"core/spec/services/spree/orders/cancel_spec.rb"},{"name":"without canceler passed behaves like tries to cancel incomplete order example at ./spec/services/spree/orders/cancel_spec.rb:23","suite":"Spree::Orders::Cancel at ./spec/services/spree/orders/cancel_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:2:2\"}}","suiteSourceFile":"core/spec/services/spree/orders/cancel_spec.rb"},{"name":"when order has no user creates a new user","suite":"Spree::Orders::CreateUserAccount at ./spec/services/spree/orders/create_user_account_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/services/spree/orders/create_user_account_spec.rb"},{"name":"when order has no user assigns the ship address to the user","suite":"Spree::Orders::CreateUserAccount at ./spec/services/spree/orders/create_user_account_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/services/spree/orders/create_user_account_spec.rb"},{"name":"when order has no user assigns the bill address to the user","suite":"Spree::Orders::CreateUserAccount at ./spec/services/spree/orders/create_user_account_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/services/spree/orders/create_user_account_spec.rb"},{"name":"when order has no user assigns the user to the order","suite":"Spree::Orders::CreateUserAccount at ./spec/services/spree/orders/create_user_account_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","suiteSourceFile":"core/spec/services/spree/orders/create_user_account_spec.rb"},{"name":"when user with the given email already exists does not create a new user","suite":"Spree::Orders::CreateUserAccount at ./spec/services/spree/orders/create_user_account_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/services/spree/orders/create_user_account_spec.rb"},{"name":"when user with the given email already exists assigns the user to the order","suite":"Spree::Orders::CreateUserAccount at ./spec/services/spree/orders/create_user_account_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","suiteSourceFile":"core/spec/services/spree/orders/create_user_account_spec.rb"},{"name":"when user with the given email already exists returns success with the user","suite":"Spree::Orders::CreateUserAccount at ./spec/services/spree/orders/create_user_account_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3\"}}","suiteSourceFile":"core/spec/services/spree/orders/create_user_account_spec.rb"},{"name":"valid attributes with new source attributes creates new payment record","suite":"Spree::Payments::Create at ./spec/services/spree/payments/create_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/services/spree/payments/create_spec.rb"},{"name":"valid attributes with new source attributes example at ./spec/services/spree/payments/create_spec.rb:39","suite":"Spree::Payments::Create at ./spec/services/spree/payments/create_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2\"}}","suiteSourceFile":"core/spec/services/spree/payments/create_spec.rb"},{"name":"valid attributes with new source attributes example at ./spec/services/spree/payments/create_spec.rb:40","suite":"Spree::Payments::Create at ./spec/services/spree/payments/create_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3\"}}","suiteSourceFile":"core/spec/services/spree/payments/create_spec.rb"},{"name":"valid attributes with new source attributes creates new payment source record","suite":"Spree::Payments::Create at ./spec/services/spree/payments/create_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:4\"}}","suiteSourceFile":"core/spec/services/spree/payments/create_spec.rb"},{"name":"valid attributes with new source attributes with user creates new payment record","suite":"Spree::Payments::Create at ./spec/services/spree/payments/create_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:5:1\"}}","suiteSourceFile":"core/spec/services/spree/payments/create_spec.rb"},{"name":"valid attributes with new source attributes with user example at ./spec/services/spree/payments/create_spec.rb:39","suite":"Spree::Payments::Create at ./spec/services/spree/payments/create_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:5:2\"}}","suiteSourceFile":"core/spec/services/spree/payments/create_spec.rb"},{"name":"valid attributes with new source attributes with user example at ./spec/services/spree/payments/create_spec.rb:40","suite":"Spree::Payments::Create at ./spec/services/spree/payments/create_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:5:3\"}}","suiteSourceFile":"core/spec/services/spree/payments/create_spec.rb"},{"name":"valid attributes with new source attributes with user creates new payment source record","suite":"Spree::Payments::Create at ./spec/services/spree/payments/create_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:5:4\"}}","suiteSourceFile":"core/spec/services/spree/payments/create_spec.rb"},{"name":"valid attributes with new source attributes with user assigns user example at ./spec/services/spree/payments/create_spec.rb:64","suite":"Spree::Payments::Create at ./spec/services/spree/payments/create_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:5:5:1\"}}","suiteSourceFile":"core/spec/services/spree/payments/create_spec.rb"},{"name":"valid attributes with existing source valid source creates new payment record","suite":"Spree::Payments::Create at ./spec/services/spree/payments/create_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1:1\"}}","suiteSourceFile":"core/spec/services/spree/payments/create_spec.rb"},{"name":"valid attributes with existing source valid source example at ./spec/services/spree/payments/create_spec.rb:39","suite":"Spree::Payments::Create at ./spec/services/spree/payments/create_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1:2\"}}","suiteSourceFile":"core/spec/services/spree/payments/create_spec.rb"},{"name":"valid attributes with existing source valid source example at ./spec/services/spree/payments/create_spec.rb:40","suite":"Spree::Payments::Create at ./spec/services/spree/payments/create_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1:3\"}}","suiteSourceFile":"core/spec/services/spree/payments/create_spec.rb"},{"name":"valid attributes with existing source valid source example at ./spec/services/spree/payments/create_spec.rb:85","suite":"Spree::Payments::Create at ./spec/services/spree/payments/create_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1:4\"}}","suiteSourceFile":"core/spec/services/spree/payments/create_spec.rb"},{"name":"valid attributes with existing source source assigned to a different user example at ./spec/services/spree/payments/create_spec.rb:93","suite":"Spree::Payments::Create at ./spec/services/spree/payments/create_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:1\"}}","suiteSourceFile":"core/spec/services/spree/payments/create_spec.rb"},{"name":"valid attributes with existing source source assigned to a different user example at ./spec/services/spree/payments/create_spec.rb:94","suite":"Spree::Payments::Create at ./spec/services/spree/payments/create_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:2\"}}","suiteSourceFile":"core/spec/services/spree/payments/create_spec.rb"},{"name":"valid attributes without source example at ./spec/services/spree/payments/create_spec.rb:110","suite":"Spree::Payments::Create at ./spec/services/spree/payments/create_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","suiteSourceFile":"core/spec/services/spree/payments/create_spec.rb"},{"name":"valid attributes without source example at ./spec/services/spree/payments/create_spec.rb:111","suite":"Spree::Payments::Create at ./spec/services/spree/payments/create_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:2\"}}","suiteSourceFile":"core/spec/services/spree/payments/create_spec.rb"},{"name":"missing payment method example at ./spec/services/spree/payments/create_spec.rb:131","suite":"Spree::Payments::Create at ./spec/services/spree/payments/create_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/services/spree/payments/create_spec.rb"},{"name":"missing payment method example at ./spec/services/spree/payments/create_spec.rb:132","suite":"Spree::Payments::Create at ./spec/services/spree/payments/create_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","suiteSourceFile":"core/spec/services/spree/payments/create_spec.rb"},{"name":"invalid attributes example at ./spec/services/spree/payments/create_spec.rb:151","suite":"Spree::Payments::Create at ./spec/services/spree/payments/create_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/services/spree/payments/create_spec.rb"},{"name":"invalid attributes example at ./spec/services/spree/payments/create_spec.rb:152","suite":"Spree::Payments::Create at ./spec/services/spree/payments/create_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","suiteSourceFile":"core/spec/services/spree/payments/create_spec.rb"},{"name":"when product matches new taxon should be added to the taxon","suite":"Spree::Products::AutoMatchTaxons at ./spec/services/spree/products/auto_match_taxons_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/services/spree/products/auto_match_taxons_spec.rb"},{"name":"when product matches new taxon doesn't do circular call","suite":"Spree::Products::AutoMatchTaxons at ./spec/services/spree/products/auto_match_taxons_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/services/spree/products/auto_match_taxons_spec.rb"},{"name":"when product no longer matches taxon should be removed from the taxon","suite":"Spree::Products::AutoMatchTaxons at ./spec/services/spree/products/auto_match_taxons_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/services/spree/products/auto_match_taxons_spec.rb"},{"name":"example at ./spec/services/spree/products/duplicator_spec.rb:31","suite":"Spree::Products::Duplicator at ./spec/services/spree/products/duplicator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","suiteSourceFile":"core/spec/services/spree/products/duplicator_spec.rb"},{"name":"duplicates the product","suite":"Spree::Products::Duplicator at ./spec/services/spree/products/duplicator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2\"}}","suiteSourceFile":"core/spec/services/spree/products/duplicator_spec.rb"},{"name":"duplicates already duplicated product","suite":"Spree::Products::Duplicator at ./spec/services/spree/products/duplicator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3\"}}","suiteSourceFile":"core/spec/services/spree/products/duplicator_spec.rb"},{"name":"image duplication clones images by default","suite":"Spree::Products::Duplicator at ./spec/services/spree/products/duplicator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/services/spree/products/duplicator_spec.rb"},{"name":"image duplication when excluding images from cloning doesn't clone images","suite":"Spree::Products::Duplicator at ./spec/services/spree/products/duplicator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1\"}}","suiteSourceFile":"core/spec/services/spree/products/duplicator_spec.rb"},{"name":"product attributes always sets the product as draft","suite":"Spree::Products::Duplicator at ./spec/services/spree/products/duplicator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","suiteSourceFile":"core/spec/services/spree/products/duplicator_spec.rb"},{"name":"product attributes sets an unique name","suite":"Spree::Products::Duplicator at ./spec/services/spree/products/duplicator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2\"}}","suiteSourceFile":"core/spec/services/spree/products/duplicator_spec.rb"},{"name":"product attributes sets an unique sku","suite":"Spree::Products::Duplicator at ./spec/services/spree/products/duplicator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3\"}}","suiteSourceFile":"core/spec/services/spree/products/duplicator_spec.rb"},{"name":"product attributes copies the properties","suite":"Spree::Products::Duplicator at ./spec/services/spree/products/duplicator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:4\"}}","suiteSourceFile":"core/spec/services/spree/products/duplicator_spec.rb"},{"name":"product attributes copies tags","suite":"Spree::Products::Duplicator at ./spec/services/spree/products/duplicator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:5\"}}","suiteSourceFile":"core/spec/services/spree/products/duplicator_spec.rb"},{"name":"product attributes clones barcode","suite":"Spree::Products::Duplicator at ./spec/services/spree/products/duplicator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:6\"}}","suiteSourceFile":"core/spec/services/spree/products/duplicator_spec.rb"},{"name":"product attributes clones backorderable and sets stock to 0","suite":"Spree::Products::Duplicator at ./spec/services/spree/products/duplicator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:7\"}}","suiteSourceFile":"core/spec/services/spree/products/duplicator_spec.rb"},{"name":"product prices clones prices","suite":"Spree::Products::Duplicator at ./spec/services/spree/products/duplicator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","suiteSourceFile":"core/spec/services/spree/products/duplicator_spec.rb"},{"name":"stores example at ./spec/services/spree/products/duplicator_spec.rb:115","suite":"Spree::Products::Duplicator at ./spec/services/spree/products/duplicator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","suiteSourceFile":"core/spec/services/spree/products/duplicator_spec.rb"},{"name":"with variants duplicates the variants","suite":"Spree::Products::Duplicator at ./spec/services/spree/products/duplicator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1\"}}","suiteSourceFile":"core/spec/services/spree/products/duplicator_spec.rb"},{"name":"with variants doesn't duplicate the option values","suite":"Spree::Products::Duplicator at ./spec/services/spree/products/duplicator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2\"}}","suiteSourceFile":"core/spec/services/spree/products/duplicator_spec.rb"},{"name":"with variants clones barcodes","suite":"Spree::Products::Duplicator at ./spec/services/spree/products/duplicator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:3\"}}","suiteSourceFile":"core/spec/services/spree/products/duplicator_spec.rb"},{"name":"with variants clones backorderable and sets stock to 0","suite":"Spree::Products::Duplicator at ./spec/services/spree/products/duplicator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:4\"}}","suiteSourceFile":"core/spec/services/spree/products/duplicator_spec.rb"},{"name":"with variants image duplication clones images by default","suite":"Spree::Products::Duplicator at ./spec/services/spree/products/duplicator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:5:1\"}}","suiteSourceFile":"core/spec/services/spree/products/duplicator_spec.rb"},{"name":"with variants image duplication when excluding images from cloning doesn't clone images","suite":"Spree::Products::Duplicator at ./spec/services/spree/products/duplicator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:5:2:1\"}}","suiteSourceFile":"core/spec/services/spree/products/duplicator_spec.rb"},{"name":"with variants variant prices clones prices","suite":"Spree::Products::Duplicator at ./spec/services/spree/products/duplicator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:6:1\"}}","suiteSourceFile":"core/spec/services/spree/products/duplicator_spec.rb"},{"name":"taxon preservation across stores when editing a product with taxons from multiple stores when updating taxon_ids from current store preserves taxons from other stores","suite":"Spree::Products::PrepareNestedAttributes at ./spec/services/spree/products/prepare_nested_attributes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","suiteSourceFile":"core/spec/services/spree/products/prepare_nested_attributes_spec.rb"},{"name":"taxon preservation across stores when editing a product with taxons from multiple stores when updating taxon_ids from current store includes the new taxon from current store","suite":"Spree::Products::PrepareNestedAttributes at ./spec/services/spree/products/prepare_nested_attributes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:2\"}}","suiteSourceFile":"core/spec/services/spree/products/prepare_nested_attributes_spec.rb"},{"name":"taxon preservation across stores when editing a product with taxons from multiple stores when updating taxon_ids from current store removes the old taxon from current store","suite":"Spree::Products::PrepareNestedAttributes at ./spec/services/spree/products/prepare_nested_attributes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:3\"}}","suiteSourceFile":"core/spec/services/spree/products/prepare_nested_attributes_spec.rb"},{"name":"taxon preservation across stores when editing a product with taxons from multiple stores when updating taxon_ids from current store returns unique taxon IDs","suite":"Spree::Products::PrepareNestedAttributes at ./spec/services/spree/products/prepare_nested_attributes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:4\"}}","suiteSourceFile":"core/spec/services/spree/products/prepare_nested_attributes_spec.rb"},{"name":"taxon preservation across stores when editing a product with taxons from multiple stores when removing all taxons from current store preserves taxons from other stores","suite":"Spree::Products::PrepareNestedAttributes at ./spec/services/spree/products/prepare_nested_attributes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","suiteSourceFile":"core/spec/services/spree/products/prepare_nested_attributes_spec.rb"},{"name":"taxon preservation across stores when editing a product with taxons from multiple stores when removing all taxons from current store does not include taxons from current store","suite":"Spree::Products::PrepareNestedAttributes at ./spec/services/spree/products/prepare_nested_attributes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:2\"}}","suiteSourceFile":"core/spec/services/spree/products/prepare_nested_attributes_spec.rb"},{"name":"taxon preservation across stores when editing a product with taxons from multiple stores when taxon_ids param is not present does not add taxon_ids key","suite":"Spree::Products::PrepareNestedAttributes at ./spec/services/spree/products/prepare_nested_attributes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:1\"}}","suiteSourceFile":"core/spec/services/spree/products/prepare_nested_attributes_spec.rb"},{"name":"taxon preservation across stores when creating a new product does not merge taxons from other stores","suite":"Spree::Products::PrepareNestedAttributes at ./spec/services/spree/products/prepare_nested_attributes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/services/spree/products/prepare_nested_attributes_spec.rb"},{"name":"taxon preservation across stores when creating a new product only includes submitted taxon IDs","suite":"Spree::Products::PrepareNestedAttributes at ./spec/services/spree/products/prepare_nested_attributes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2\"}}","suiteSourceFile":"core/spec/services/spree/products/prepare_nested_attributes_spec.rb"},{"name":"taxon preservation across stores when product has taxons from multiple other stores preserves taxons from all other stores","suite":"Spree::Products::PrepareNestedAttributes at ./spec/services/spree/products/prepare_nested_attributes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","suiteSourceFile":"core/spec/services/spree/products/prepare_nested_attributes_spec.rb"},{"name":"taxon preservation across stores when product has taxons from multiple other stores includes the new taxon from current store","suite":"Spree::Products::PrepareNestedAttributes at ./spec/services/spree/products/prepare_nested_attributes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:2\"}}","suiteSourceFile":"core/spec/services/spree/products/prepare_nested_attributes_spec.rb"},{"name":"taxon preservation across stores when product has taxons from multiple other stores has exactly 3 taxon IDs","suite":"Spree::Products::PrepareNestedAttributes at ./spec/services/spree/products/prepare_nested_attributes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:3\"}}","suiteSourceFile":"core/spec/services/spree/products/prepare_nested_attributes_spec.rb"},{"name":"store_ids handling when store_ids is blank adds current store to store_ids","suite":"Spree::Products::PrepareNestedAttributes at ./spec/services/spree/products/prepare_nested_attributes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","suiteSourceFile":"core/spec/services/spree/products/prepare_nested_attributes_spec.rb"},{"name":"store_ids handling when store_ids is present preserves submitted store_ids","suite":"Spree::Products::PrepareNestedAttributes at ./spec/services/spree/products/prepare_nested_attributes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","suiteSourceFile":"core/spec/services/spree/products/prepare_nested_attributes_spec.rb"},{"name":"product_properties_attributes handling when product property value is blank marks the product property for destruction","suite":"Spree::Products::PrepareNestedAttributes at ./spec/services/spree/products/prepare_nested_attributes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","suiteSourceFile":"core/spec/services/spree/products/prepare_nested_attributes_spec.rb"},{"name":"product_properties_attributes handling when product property value is present does not mark the product property for destruction","suite":"Spree::Products::PrepareNestedAttributes at ./spec/services/spree/products/prepare_nested_attributes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","suiteSourceFile":"core/spec/services/spree/products/prepare_nested_attributes_spec.rb"},{"name":"prices_attributes handling when user cannot update prices with variants_attributes removes prices_attributes from variants","suite":"Spree::Products::PrepareNestedAttributes at ./spec/services/spree/products/prepare_nested_attributes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1:1\"}}","suiteSourceFile":"core/spec/services/spree/products/prepare_nested_attributes_spec.rb"},{"name":"prices_attributes handling when user cannot update prices with master_attributes removes prices_attributes from master","suite":"Spree::Products::PrepareNestedAttributes at ./spec/services/spree/products/prepare_nested_attributes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:2:1\"}}","suiteSourceFile":"core/spec/services/spree/products/prepare_nested_attributes_spec.rb"},{"name":"prices_attributes handling when user can update prices when price amount is blank marks the price for destruction","suite":"Spree::Products::PrepareNestedAttributes at ./spec/services/spree/products/prepare_nested_attributes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1:1\"}}","suiteSourceFile":"core/spec/services/spree/products/prepare_nested_attributes_spec.rb"},{"name":"stock_items_attributes handling when user cannot update stock items with variants_attributes removes stock_items_attributes from variants","suite":"Spree::Products::PrepareNestedAttributes at ./spec/services/spree/products/prepare_nested_attributes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:1:1\"}}","suiteSourceFile":"core/spec/services/spree/products/prepare_nested_attributes_spec.rb"},{"name":"stock_items_attributes handling when user cannot update stock items with master_attributes removes stock_items_attributes from master","suite":"Spree::Products::PrepareNestedAttributes at ./spec/services/spree/products/prepare_nested_attributes_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:2:1\"}}","suiteSourceFile":"core/spec/services/spree/products/prepare_nested_attributes_spec.rb"},{"name":"runs without raising errors","suite":"Spree::Seeds::All at ./spec/services/spree/seeds/all_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","suiteSourceFile":"core/spec/services/spree/seeds/all_spec.rb"},{"name":"ShippingMethod creates a Digital Delivery shipping method","suite":"Spree::Seeds::DigitalDelivery at ./spec/services/spree/seeds/digital_delivery_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/services/spree/seeds/digital_delivery_spec.rb"},{"name":"ShippingMethod when Digital Delivery shipping method already exists doesn't create a new shipping method","suite":"Spree::Seeds::DigitalDelivery at ./spec/services/spree/seeds/digital_delivery_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/services/spree/seeds/digital_delivery_spec.rb"},{"name":"creates a Store Credit payment method","suite":"Spree::Seeds::PaymentMethods at ./spec/services/spree/seeds/payment_methods_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","suiteSourceFile":"core/spec/services/spree/seeds/payment_methods_spec.rb"},{"name":"when the Store Credit payment method already exists doesn't create a new payment method","suite":"Spree::Seeds::PaymentMethods at ./spec/services/spree/seeds/payment_methods_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/services/spree/seeds/payment_methods_spec.rb"},{"name":"RefundReason creates a Return processing RefundReason","suite":"Spree::Seeds::ReturnsEnvironment at ./spec/services/spree/seeds/returns_environment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/services/spree/seeds/returns_environment_spec.rb"},{"name":"RefundReason when the RefundReason already exists doesn't create a new RefundReason","suite":"Spree::Seeds::ReturnsEnvironment at ./spec/services/spree/seeds/returns_environment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/services/spree/seeds/returns_environment_spec.rb"},{"name":"ReturnAuthorizationReason creates all ReturnAuthorizationReasons","suite":"Spree::Seeds::ReturnsEnvironment at ./spec/services/spree/seeds/returns_environment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/services/spree/seeds/returns_environment_spec.rb"},{"name":"ReturnAuthorizationReason when ReturnAuthorizationReasons already exist doesn't create new ReturnAuthorizationReasons","suite":"Spree::Seeds::ReturnsEnvironment at ./spec/services/spree/seeds/returns_environment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","suiteSourceFile":"core/spec/services/spree/seeds/returns_environment_spec.rb"},{"name":"ReimbursementType creates all ReimbursementTypes","suite":"Spree::Seeds::ReturnsEnvironment at ./spec/services/spree/seeds/returns_environment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/services/spree/seeds/returns_environment_spec.rb"},{"name":"ReimbursementType when ReimbursementTypes already exist doesn't create new ReimbursementTypes","suite":"Spree::Seeds::ReturnsEnvironment at ./spec/services/spree/seeds/returns_environment_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","suiteSourceFile":"core/spec/services/spree/seeds/returns_environment_spec.rb"},{"name":"TaxCategory creates all TaxCategories","suite":"Spree::Seeds::TaxCategories at ./spec/services/spree/seeds/tax_categories_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/services/spree/seeds/tax_categories_spec.rb"},{"name":"TaxCategory when TaxCategories already exist doesn't create new TaxCategories","suite":"Spree::Seeds::TaxCategories at ./spec/services/spree/seeds/tax_categories_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/services/spree/seeds/tax_categories_spec.rb"},{"name":"valid attributes without pre-existing line item behaves like creates a line item example at ./spec/services/spree/shipments/add_item_spec.rb:28","suite":"Spree::Shipments::AddItem at ./spec/services/spree/shipments/add_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","suiteSourceFile":"core/spec/services/spree/shipments/add_item_spec.rb"},{"name":"valid attributes without pre-existing line item behaves like creates a line item creates new line item record","suite":"Spree::Shipments::AddItem at ./spec/services/spree/shipments/add_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:2\"}}","suiteSourceFile":"core/spec/services/spree/shipments/add_item_spec.rb"},{"name":"valid attributes without quantity passed example at ./spec/services/spree/shipments/add_item_spec.rb:49","suite":"Spree::Shipments::AddItem at ./spec/services/spree/shipments/add_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/services/spree/shipments/add_item_spec.rb"},{"name":"valid attributes without quantity passed creates new line item record","suite":"Spree::Shipments::AddItem at ./spec/services/spree/shipments/add_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2\"}}","suiteSourceFile":"core/spec/services/spree/shipments/add_item_spec.rb"},{"name":"valid attributes with existing line item does not create a new line item","suite":"Spree::Shipments::AddItem at ./spec/services/spree/shipments/add_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","suiteSourceFile":"core/spec/services/spree/shipments/add_item_spec.rb"},{"name":"valid attributes with existing line item adds quantity to the existing line item","suite":"Spree::Shipments::AddItem at ./spec/services/spree/shipments/add_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:2\"}}","suiteSourceFile":"core/spec/services/spree/shipments/add_item_spec.rb"},{"name":"valid attributes with existing line item updates line item totals","suite":"Spree::Shipments::AddItem at ./spec/services/spree/shipments/add_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:3\"}}","suiteSourceFile":"core/spec/services/spree/shipments/add_item_spec.rb"},{"name":"missing variant example at ./spec/services/spree/shipments/add_item_spec.rb:91","suite":"Spree::Shipments::AddItem at ./spec/services/spree/shipments/add_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/services/spree/shipments/add_item_spec.rb"},{"name":"missing variant example at ./spec/services/spree/shipments/add_item_spec.rb:92","suite":"Spree::Shipments::AddItem at ./spec/services/spree/shipments/add_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","suiteSourceFile":"core/spec/services/spree/shipments/add_item_spec.rb"},{"name":"valid attributes without pre-existing line item behaves like creates a shipment creates new shipment record","suite":"Spree::Shipments::Create at ./spec/services/spree/shipments/create_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","suiteSourceFile":"core/spec/services/spree/shipments/create_spec.rb"},{"name":"valid attributes without pre-existing line item behaves like creates a shipment example at ./spec/services/spree/shipments/create_spec.rb:35","suite":"Spree::Shipments::Create at ./spec/services/spree/shipments/create_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:2\"}}","suiteSourceFile":"core/spec/services/spree/shipments/create_spec.rb"},{"name":"valid attributes without pre-existing line item behaves like creates a shipment example at ./spec/services/spree/shipments/create_spec.rb:36","suite":"Spree::Shipments::Create at ./spec/services/spree/shipments/create_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:3\"}}","suiteSourceFile":"core/spec/services/spree/shipments/create_spec.rb"},{"name":"valid attributes without pre-existing line item behaves like creates a line item creates new line item record","suite":"Spree::Shipments::Create at ./spec/services/spree/shipments/create_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","suiteSourceFile":"core/spec/services/spree/shipments/create_spec.rb"},{"name":"valid attributes with existing line item does not create a new line item","suite":"Spree::Shipments::Create at ./spec/services/spree/shipments/create_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2\"}}","suiteSourceFile":"core/spec/services/spree/shipments/create_spec.rb"},{"name":"valid attributes with existing line item adds quantity to the existing line item","suite":"Spree::Shipments::Create at ./spec/services/spree/shipments/create_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:3\"}}","suiteSourceFile":"core/spec/services/spree/shipments/create_spec.rb"},{"name":"valid attributes with existing line item updates line item totals","suite":"Spree::Shipments::Create at ./spec/services/spree/shipments/create_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:4\"}}","suiteSourceFile":"core/spec/services/spree/shipments/create_spec.rb"},{"name":"valid attributes with existing line item behaves like creates a shipment creates new shipment record","suite":"Spree::Shipments::Create at ./spec/services/spree/shipments/create_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1:1\"}}","suiteSourceFile":"core/spec/services/spree/shipments/create_spec.rb"},{"name":"valid attributes with existing line item behaves like creates a shipment example at ./spec/services/spree/shipments/create_spec.rb:35","suite":"Spree::Shipments::Create at ./spec/services/spree/shipments/create_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1:2\"}}","suiteSourceFile":"core/spec/services/spree/shipments/create_spec.rb"},{"name":"valid attributes with existing line item behaves like creates a shipment example at ./spec/services/spree/shipments/create_spec.rb:36","suite":"Spree::Shipments::Create at ./spec/services/spree/shipments/create_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1:3\"}}","suiteSourceFile":"core/spec/services/spree/shipments/create_spec.rb"},{"name":"missing variant example at ./spec/services/spree/shipments/create_spec.rb:88","suite":"Spree::Shipments::Create at ./spec/services/spree/shipments/create_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/services/spree/shipments/create_spec.rb"},{"name":"missing variant example at ./spec/services/spree/shipments/create_spec.rb:89","suite":"Spree::Shipments::Create at ./spec/services/spree/shipments/create_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","suiteSourceFile":"core/spec/services/spree/shipments/create_spec.rb"},{"name":"missing order example at ./spec/services/spree/shipments/create_spec.rb:102","suite":"Spree::Shipments::Create at ./spec/services/spree/shipments/create_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/services/spree/shipments/create_spec.rb"},{"name":"missing order example at ./spec/services/spree/shipments/create_spec.rb:103","suite":"Spree::Shipments::Create at ./spec/services/spree/shipments/create_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","suiteSourceFile":"core/spec/services/spree/shipments/create_spec.rb"},{"name":"missing stock location example at ./spec/services/spree/shipments/create_spec.rb:116","suite":"Spree::Shipments::Create at ./spec/services/spree/shipments/create_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","suiteSourceFile":"core/spec/services/spree/shipments/create_spec.rb"},{"name":"missing stock location example at ./spec/services/spree/shipments/create_spec.rb:117","suite":"Spree::Shipments::Create at ./spec/services/spree/shipments/create_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2\"}}","suiteSourceFile":"core/spec/services/spree/shipments/create_spec.rb"},{"name":"valid attributes part of the line item qty removed example at ./spec/services/spree/shipments/remove_item_spec.rb:51","suite":"Spree::Shipments::RemoveItem at ./spec/services/spree/shipments/remove_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2\"}}","suiteSourceFile":"core/spec/services/spree/shipments/remove_item_spec.rb"},{"name":"valid attributes part of the line item qty removed example at ./spec/services/spree/shipments/remove_item_spec.rb:52","suite":"Spree::Shipments::RemoveItem at ./spec/services/spree/shipments/remove_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3\"}}","suiteSourceFile":"core/spec/services/spree/shipments/remove_item_spec.rb"},{"name":"valid attributes part of the line item qty removed decreases line item quantity","suite":"Spree::Shipments::RemoveItem at ./spec/services/spree/shipments/remove_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:4\"}}","suiteSourceFile":"core/spec/services/spree/shipments/remove_item_spec.rb"},{"name":"valid attributes part of the line item qty removed example at ./spec/services/spree/shipments/remove_item_spec.rb:60","suite":"Spree::Shipments::RemoveItem at ./spec/services/spree/shipments/remove_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:5\"}}","suiteSourceFile":"core/spec/services/spree/shipments/remove_item_spec.rb"},{"name":"valid attributes part of the line item qty removed example at ./spec/services/spree/shipments/remove_item_spec.rb:61","suite":"Spree::Shipments::RemoveItem at ./spec/services/spree/shipments/remove_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:6\"}}","suiteSourceFile":"core/spec/services/spree/shipments/remove_item_spec.rb"},{"name":"valid attributes part of the line item qty removed behaves like successful example at ./spec/services/spree/shipments/remove_item_spec.rb:26","suite":"Spree::Shipments::RemoveItem at ./spec/services/spree/shipments/remove_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","suiteSourceFile":"core/spec/services/spree/shipments/remove_item_spec.rb"},{"name":"valid attributes entire shipment & line item qty removed behaves like successful example at ./spec/services/spree/shipments/remove_item_spec.rb:26","suite":"Spree::Shipments::RemoveItem at ./spec/services/spree/shipments/remove_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1:1\"}}","suiteSourceFile":"core/spec/services/spree/shipments/remove_item_spec.rb"},{"name":"valid attributes entire shipment & line item qty removed behaves like removes line item example at ./spec/services/spree/shipments/remove_item_spec.rb:30","suite":"Spree::Shipments::RemoveItem at ./spec/services/spree/shipments/remove_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:1\"}}","suiteSourceFile":"core/spec/services/spree/shipments/remove_item_spec.rb"},{"name":"valid attributes entire shipment & line item qty removed behaves like removes shipment example at ./spec/services/spree/shipments/remove_item_spec.rb:34","suite":"Spree::Shipments::RemoveItem at ./spec/services/spree/shipments/remove_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:3:1\"}}","suiteSourceFile":"core/spec/services/spree/shipments/remove_item_spec.rb"},{"name":"valid attributes entire shipment & line item qty removed behaves like removes shipment example at ./spec/services/spree/shipments/remove_item_spec.rb:35","suite":"Spree::Shipments::RemoveItem at ./spec/services/spree/shipments/remove_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:3:2\"}}","suiteSourceFile":"core/spec/services/spree/shipments/remove_item_spec.rb"},{"name":"valid attributes no quantity is passed behaves like successful example at ./spec/services/spree/shipments/remove_item_spec.rb:26","suite":"Spree::Shipments::RemoveItem at ./spec/services/spree/shipments/remove_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1:1\"}}","suiteSourceFile":"core/spec/services/spree/shipments/remove_item_spec.rb"},{"name":"valid attributes no quantity is passed behaves like removes line item example at ./spec/services/spree/shipments/remove_item_spec.rb:30","suite":"Spree::Shipments::RemoveItem at ./spec/services/spree/shipments/remove_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:2:1\"}}","suiteSourceFile":"core/spec/services/spree/shipments/remove_item_spec.rb"},{"name":"valid attributes no quantity is passed behaves like removes shipment example at ./spec/services/spree/shipments/remove_item_spec.rb:34","suite":"Spree::Shipments::RemoveItem at ./spec/services/spree/shipments/remove_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:3:1\"}}","suiteSourceFile":"core/spec/services/spree/shipments/remove_item_spec.rb"},{"name":"valid attributes no quantity is passed behaves like removes shipment example at ./spec/services/spree/shipments/remove_item_spec.rb:35","suite":"Spree::Shipments::RemoveItem at ./spec/services/spree/shipments/remove_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:3:2\"}}","suiteSourceFile":"core/spec/services/spree/shipments/remove_item_spec.rb"},{"name":"missing variant example at ./spec/services/spree/shipments/remove_item_spec.rb:93","suite":"Spree::Shipments::RemoveItem at ./spec/services/spree/shipments/remove_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/services/spree/shipments/remove_item_spec.rb"},{"name":"missing variant example at ./spec/services/spree/shipments/remove_item_spec.rb:94","suite":"Spree::Shipments::RemoveItem at ./spec/services/spree/shipments/remove_item_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","suiteSourceFile":"core/spec/services/spree/shipments/remove_item_spec.rb"},{"name":"#call with prepared stock items with stock items in the db inserts stock items without duplicates","suite":"Spree::StockLocations::StockItems::Create at ./spec/services/spree/stock_locations/stock_items/create_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","suiteSourceFile":"core/spec/services/spree/stock_locations/stock_items/create_spec.rb"},{"name":"#call with prepared stock items without stock items in the db inserts the stock location stock items","suite":"Spree::StockLocations::StockItems::Create at ./spec/services/spree/stock_locations/stock_items/create_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","suiteSourceFile":"core/spec/services/spree/stock_locations/stock_items/create_spec.rb"},{"name":"#call with prepared stock items without stock items in the db sets the stock location data necessary for the inserted stock items","suite":"Spree::StockLocations::StockItems::Create at ./spec/services/spree/stock_locations/stock_items/create_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:2\"}}","suiteSourceFile":"core/spec/services/spree/stock_locations/stock_items/create_spec.rb"},{"name":"#call with prepared stock items without stock items in the db invalidates the Variant cache","suite":"Spree::StockLocations::StockItems::Create at ./spec/services/spree/stock_locations/stock_items/create_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:3\"}}","suiteSourceFile":"core/spec/services/spree/stock_locations/stock_items/create_spec.rb"},{"name":"#call without prepared stock items does not insert stock items","suite":"Spree::StockLocations::StockItems::Create at ./spec/services/spree/stock_locations/stock_items/create_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/services/spree/stock_locations/stock_items/create_spec.rb"},{"name":"#call without prepared stock items does not invalidates the Variant cache","suite":"Spree::StockLocations::StockItems::Create at ./spec/services/spree/stock_locations/stock_items/create_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2\"}}","suiteSourceFile":"core/spec/services/spree/stock_locations/stock_items/create_spec.rb"},{"name":"when country code is US returns imperial unit system","suite":"Spree::Stores::SettingsDefaultsByCountry at ./spec/services/spree/stores/settings_defaults_by_country_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/services/spree/stores/settings_defaults_by_country_spec.rb"},{"name":"when country code is not US returns metric unit system","suite":"Spree::Stores::SettingsDefaultsByCountry at ./spec/services/spree/stores/settings_defaults_by_country_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/services/spree/stores/settings_defaults_by_country_spec.rb"},{"name":"#call creates tags for each tag name","suite":"Spree::Tags::BulkAdd at ./spec/services/spree/tags/bulk_add_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/services/spree/tags/bulk_add_spec.rb"},{"name":"#call creates taggings for each product-tag pair","suite":"Spree::Tags::BulkAdd at ./spec/services/spree/tags/bulk_add_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/services/spree/tags/bulk_add_spec.rb"},{"name":"#call assigns correct attributes to taggings","suite":"Spree::Tags::BulkAdd at ./spec/services/spree/tags/bulk_add_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/services/spree/tags/bulk_add_spec.rb"},{"name":"#call touches all products","suite":"Spree::Tags::BulkAdd at ./spec/services/spree/tags/bulk_add_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","suiteSourceFile":"core/spec/services/spree/tags/bulk_add_spec.rb"},{"name":"#call when tag names are duplicated or have extra spaces creates unique tags without extra spaces","suite":"Spree::Tags::BulkAdd at ./spec/services/spree/tags/bulk_add_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5:1\"}}","suiteSourceFile":"core/spec/services/spree/tags/bulk_add_spec.rb"},{"name":"#call when no records are provided does not create any taggings","suite":"Spree::Tags::BulkAdd at ./spec/services/spree/tags/bulk_add_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6:1\"}}","suiteSourceFile":"core/spec/services/spree/tags/bulk_add_spec.rb"},{"name":"#call when no tag names are provided does not create any tags or taggings","suite":"Spree::Tags::BulkAdd at ./spec/services/spree/tags/bulk_add_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7:1\"}}","suiteSourceFile":"core/spec/services/spree/tags/bulk_add_spec.rb"},{"name":"#call removes taggings for each product-tag pair","suite":"Spree::Tags::BulkRemove at ./spec/services/spree/tags/bulk_remove_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/services/spree/tags/bulk_remove_spec.rb"},{"name":"#call does not remove tags","suite":"Spree::Tags::BulkRemove at ./spec/services/spree/tags/bulk_remove_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/services/spree/tags/bulk_remove_spec.rb"},{"name":"#call removes correct taggings","suite":"Spree::Tags::BulkRemove at ./spec/services/spree/tags/bulk_remove_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/services/spree/tags/bulk_remove_spec.rb"},{"name":"#call touches all products","suite":"Spree::Tags::BulkRemove at ./spec/services/spree/tags/bulk_remove_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","suiteSourceFile":"core/spec/services/spree/tags/bulk_remove_spec.rb"},{"name":"#call creates classifications for each taxon-product pair","suite":"Spree::Taxons::AddProducts at ./spec/services/spree/taxons/add_products_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/services/spree/taxons/add_products_spec.rb"},{"name":"#call sets the correct position for each classification","suite":"Spree::Taxons::AddProducts at ./spec/services/spree/taxons/add_products_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/services/spree/taxons/add_products_spec.rb"},{"name":"#call touches all products","suite":"Spree::Taxons::AddProducts at ./spec/services/spree/taxons/add_products_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/services/spree/taxons/add_products_spec.rb"},{"name":"#call touches all taxons","suite":"Spree::Taxons::AddProducts at ./spec/services/spree/taxons/add_products_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","suiteSourceFile":"core/spec/services/spree/taxons/add_products_spec.rb"},{"name":"#call returns a successful result","suite":"Spree::Taxons::AddProducts at ./spec/services/spree/taxons/add_products_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","suiteSourceFile":"core/spec/services/spree/taxons/add_products_spec.rb"},{"name":"#call updates classification_count on taxons","suite":"Spree::Taxons::AddProducts at ./spec/services/spree/taxons/add_products_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","suiteSourceFile":"core/spec/services/spree/taxons/add_products_spec.rb"},{"name":"#call updates classification_count on products","suite":"Spree::Taxons::AddProducts at ./spec/services/spree/taxons/add_products_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7\"}}","suiteSourceFile":"core/spec/services/spree/taxons/add_products_spec.rb"},{"name":"after changing rules re-matches products for an automatic taxon","suite":"Spree::Taxons::RegenerateProducts at ./spec/services/spree/taxons/regenerate_products_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/services/spree/taxons/regenerate_products_spec.rb"},{"name":"after changing rules updates classification_count on taxon","suite":"Spree::Taxons::RegenerateProducts at ./spec/services/spree/taxons/regenerate_products_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/services/spree/taxons/regenerate_products_spec.rb"},{"name":"after changing rules updates classification_count on products","suite":"Spree::Taxons::RegenerateProducts at ./spec/services/spree/taxons/regenerate_products_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/services/spree/taxons/regenerate_products_spec.rb"},{"name":"when nothing changed doesn't change the taxon","suite":"Spree::Taxons::RegenerateProducts at ./spec/services/spree/taxons/regenerate_products_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/services/spree/taxons/regenerate_products_spec.rb"},{"name":"with manual order when nothing changed keeps products positions","suite":"Spree::Taxons::RegenerateProducts at ./spec/services/spree/taxons/regenerate_products_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","suiteSourceFile":"core/spec/services/spree/taxons/regenerate_products_spec.rb"},{"name":"with manual order when products added keeps products positions","suite":"Spree::Taxons::RegenerateProducts at ./spec/services/spree/taxons/regenerate_products_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","suiteSourceFile":"core/spec/services/spree/taxons/regenerate_products_spec.rb"},{"name":"with manual order when some one product removed and 2 added keeps products positions","suite":"Spree::Taxons::RegenerateProducts at ./spec/services/spree/taxons/regenerate_products_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3:1\"}}","suiteSourceFile":"core/spec/services/spree/taxons/regenerate_products_spec.rb"},{"name":"with manual order when some one product removed from middle of list and 2 added keeps products positions","suite":"Spree::Taxons::RegenerateProducts at ./spec/services/spree/taxons/regenerate_products_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4:1\"}}","suiteSourceFile":"core/spec/services/spree/taxons/regenerate_products_spec.rb"},{"name":"#call removes classifications for each taxon-product pair","suite":"Spree::Taxons::RemoveProducts at ./spec/services/spree/taxons/remove_products_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/services/spree/taxons/remove_products_spec.rb"},{"name":"#call resets the position for remaining classifications","suite":"Spree::Taxons::RemoveProducts at ./spec/services/spree/taxons/remove_products_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/services/spree/taxons/remove_products_spec.rb"},{"name":"#call touches all products","suite":"Spree::Taxons::RemoveProducts at ./spec/services/spree/taxons/remove_products_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","suiteSourceFile":"core/spec/services/spree/taxons/remove_products_spec.rb"},{"name":"#call touches all taxons","suite":"Spree::Taxons::RemoveProducts at ./spec/services/spree/taxons/remove_products_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","suiteSourceFile":"core/spec/services/spree/taxons/remove_products_spec.rb"},{"name":"#call returns a successful result","suite":"Spree::Taxons::RemoveProducts at ./spec/services/spree/taxons/remove_products_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","suiteSourceFile":"core/spec/services/spree/taxons/remove_products_spec.rb"},{"name":"#call updates classification_count on taxons","suite":"Spree::Taxons::RemoveProducts at ./spec/services/spree/taxons/remove_products_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","suiteSourceFile":"core/spec/services/spree/taxons/remove_products_spec.rb"},{"name":"#call updates classification_count on products","suite":"Spree::Taxons::RemoveProducts at ./spec/services/spree/taxons/remove_products_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7\"}}","suiteSourceFile":"core/spec/services/spree/taxons/remove_products_spec.rb"},{"name":"#call when all order states allows to remove line items schedules a Spree::LineItems::RemoveFromOrderJob for each order","suite":"Spree::Variants::RemoveLineItems at ./spec/services/spree/variants/remove_line_items_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/services/spree/variants/remove_line_items_spec.rb"},{"name":"#call when none of order states allow to remove line items does not schedule a Spree::LineItems::RemoveFromOrderJob for each order","suite":"Spree::Variants::RemoveLineItems at ./spec/services/spree/variants/remove_line_items_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/services/spree/variants/remove_line_items_spec.rb"},{"name":"#call when some of order states allow to remove line items schedules a Spree::LineItems::RemoveFromOrderJob for each pending order","suite":"Spree::Variants::RemoveLineItems at ./spec/services/spree/variants/remove_line_items_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","suiteSourceFile":"core/spec/services/spree/variants/remove_line_items_spec.rb"},{"name":"#call when some of order states allow to remove line items does not schedule a Spree::LineItems::RemoveFromOrderJob for each cancelled order","suite":"Spree::Variants::RemoveLineItems at ./spec/services/spree/variants/remove_line_items_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:2\"}}","suiteSourceFile":"core/spec/services/spree/variants/remove_line_items_spec.rb"},{"name":"valid attributes with source attributes creates new payment source record","suite":"Spree::Wallet::CreatePaymentSource at ./spec/services/spree/wallet/create_payment_source_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/services/spree/wallet/create_payment_source_spec.rb"},{"name":"valid attributes with source attributes returns newly created record in .value","suite":"Spree::Wallet::CreatePaymentSource at ./spec/services/spree/wallet/create_payment_source_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2\"}}","suiteSourceFile":"core/spec/services/spree/wallet/create_payment_source_spec.rb"},{"name":"valid attributes with source attributes assigns payment method","suite":"Spree::Wallet::CreatePaymentSource at ./spec/services/spree/wallet/create_payment_source_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3\"}}","suiteSourceFile":"core/spec/services/spree/wallet/create_payment_source_spec.rb"},{"name":"valid attributes with source attributes with user creates new payment source record","suite":"Spree::Wallet::CreatePaymentSource at ./spec/services/spree/wallet/create_payment_source_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:4:1\"}}","suiteSourceFile":"core/spec/services/spree/wallet/create_payment_source_spec.rb"},{"name":"valid attributes with source attributes with user returns newly created record in .value","suite":"Spree::Wallet::CreatePaymentSource at ./spec/services/spree/wallet/create_payment_source_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:4:2\"}}","suiteSourceFile":"core/spec/services/spree/wallet/create_payment_source_spec.rb"},{"name":"valid attributes with source attributes with user assigns payment method","suite":"Spree::Wallet::CreatePaymentSource at ./spec/services/spree/wallet/create_payment_source_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:4:3\"}}","suiteSourceFile":"core/spec/services/spree/wallet/create_payment_source_spec.rb"},{"name":"valid attributes with source attributes with user assigns user example at ./spec/services/spree/wallet/create_payment_source_spec.rb:56","suite":"Spree::Wallet::CreatePaymentSource at ./spec/services/spree/wallet/create_payment_source_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:4:4:1\"}}","suiteSourceFile":"core/spec/services/spree/wallet/create_payment_source_spec.rb"},{"name":"missing attributes example at ./spec/services/spree/wallet/create_payment_source_spec.rb:65","suite":"Spree::Wallet::CreatePaymentSource at ./spec/services/spree/wallet/create_payment_source_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/services/spree/wallet/create_payment_source_spec.rb"},{"name":"missing attributes example at ./spec/services/spree/wallet/create_payment_source_spec.rb:66","suite":"Spree::Wallet::CreatePaymentSource at ./spec/services/spree/wallet/create_payment_source_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","suiteSourceFile":"core/spec/services/spree/wallet/create_payment_source_spec.rb"},{"name":"invalid attributes example at ./spec/services/spree/wallet/create_payment_source_spec.rb:81","suite":"Spree::Wallet::CreatePaymentSource at ./spec/services/spree/wallet/create_payment_source_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/services/spree/wallet/create_payment_source_spec.rb"},{"name":"invalid attributes example at ./spec/services/spree/wallet/create_payment_source_spec.rb:82","suite":"Spree::Wallet::CreatePaymentSource at ./spec/services/spree/wallet/create_payment_source_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","suiteSourceFile":"core/spec/services/spree/wallet/create_payment_source_spec.rb"},{"name":".attach_to_notifications subscribes to Spree events","suite":"Spree::EventLogSubscriber at ./spec/subscribers/spree/event_log_subscriber_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/subscribers/spree/event_log_subscriber_spec.rb"},{"name":".attach_to_notifications can be called multiple times safely (for code reload support)","suite":"Spree::EventLogSubscriber at ./spec/subscribers/spree/event_log_subscriber_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","suiteSourceFile":"core/spec/subscribers/spree/event_log_subscriber_spec.rb"},{"name":".detach_from_notifications unsubscribes from notifications","suite":"Spree::EventLogSubscriber at ./spec/subscribers/spree/event_log_subscriber_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/subscribers/spree/event_log_subscriber_spec.rb"},{"name":"logging events logs events to Rails logger","suite":"Spree::EventLogSubscriber at ./spec/subscribers/spree/event_log_subscriber_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/subscribers/spree/event_log_subscriber_spec.rb"},{"name":"logging events filtering sensitive parameters filters password from payload","suite":"Spree::EventLogSubscriber at ./spec/subscribers/spree/event_log_subscriber_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","suiteSourceFile":"core/spec/subscribers/spree/event_log_subscriber_spec.rb"},{"name":"logging events filtering sensitive parameters filters credit card number from payload","suite":"Spree::EventLogSubscriber at ./spec/subscribers/spree/event_log_subscriber_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:2\"}}","suiteSourceFile":"core/spec/subscribers/spree/event_log_subscriber_spec.rb"},{"name":"logging events filtering sensitive parameters filters verification_value from payload","suite":"Spree::EventLogSubscriber at ./spec/subscribers/spree/event_log_subscriber_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:3\"}}","suiteSourceFile":"core/spec/subscribers/spree/event_log_subscriber_spec.rb"},{"name":"logging events filtering sensitive parameters does not filter non-sensitive data","suite":"Spree::EventLogSubscriber at ./spec/subscribers/spree/event_log_subscriber_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:4\"}}","suiteSourceFile":"core/spec/subscribers/spree/event_log_subscriber_spec.rb"},{"name":".subscription_patterns subscribes to export.created event","suite":"Spree::ExportSubscriber at ./spec/subscribers/spree/export_subscriber_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/subscribers/spree/export_subscriber_spec.rb"},{"name":".event_handlers routes export.created to generate_export_async","suite":"Spree::ExportSubscriber at ./spec/subscribers/spree/export_subscriber_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/subscribers/spree/export_subscriber_spec.rb"},{"name":"#generate_export_async extracts export_id from event payload","suite":"Spree::ExportSubscriber at ./spec/subscribers/spree/export_subscriber_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/subscribers/spree/export_subscriber_spec.rb"},{"name":"#generate_export_async does not call job if export_id is missing","suite":"Spree::ExportSubscriber at ./spec/subscribers/spree/export_subscriber_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","suiteSourceFile":"core/spec/subscribers/spree/export_subscriber_spec.rb"},{"name":"invitation.created event sends invitation email","suite":"Spree::InvitationEmailSubscriber at ./spec/subscribers/spree/invitation_email_subscriber_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/subscribers/spree/invitation_email_subscriber_spec.rb"},{"name":"invitation.created event when invitation not found does not raise an error","suite":"Spree::InvitationEmailSubscriber at ./spec/subscribers/spree/invitation_email_subscriber_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/subscribers/spree/invitation_email_subscriber_spec.rb"},{"name":"invitation.accepted event sends acceptance notification email","suite":"Spree::InvitationEmailSubscriber at ./spec/subscribers/spree/invitation_email_subscriber_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/subscribers/spree/invitation_email_subscriber_spec.rb"},{"name":"invitation.accepted event when invitation not found does not raise an error","suite":"Spree::InvitationEmailSubscriber at ./spec/subscribers/spree/invitation_email_subscriber_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","suiteSourceFile":"core/spec/subscribers/spree/invitation_email_subscriber_spec.rb"},{"name":"invitation.resent event resends invitation email","suite":"Spree::InvitationEmailSubscriber at ./spec/subscribers/spree/invitation_email_subscriber_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/subscribers/spree/invitation_email_subscriber_spec.rb"},{"name":"invitation.resent event when invitation is expired does not send invitation email","suite":"Spree::InvitationEmailSubscriber at ./spec/subscribers/spree/invitation_email_subscriber_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","suiteSourceFile":"core/spec/subscribers/spree/invitation_email_subscriber_spec.rb"},{"name":"invitation.resent event when invitation is accepted does not send invitation email","suite":"Spree::InvitationEmailSubscriber at ./spec/subscribers/spree/invitation_email_subscriber_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3:1\"}}","suiteSourceFile":"core/spec/subscribers/spree/invitation_email_subscriber_spec.rb"},{"name":"invitation.resent event when invitation is deleted does not send invitation email","suite":"Spree::InvitationEmailSubscriber at ./spec/subscribers/spree/invitation_email_subscriber_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4:1\"}}","suiteSourceFile":"core/spec/subscribers/spree/invitation_email_subscriber_spec.rb"},{"name":"invitation.resent event when invitation not found does not raise an error","suite":"Spree::InvitationEmailSubscriber at ./spec/subscribers/spree/invitation_email_subscriber_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:5:1\"}}","suiteSourceFile":"core/spec/subscribers/spree/invitation_email_subscriber_spec.rb"},{"name":".subscription_patterns subscribes to order.completed event","suite":"Spree::ProductMetricsSubscriber at ./spec/subscribers/spree/product_metrics_subscriber_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/subscribers/spree/product_metrics_subscriber_spec.rb"},{"name":".event_handlers routes order.completed to refresh_product_metrics","suite":"Spree::ProductMetricsSubscriber at ./spec/subscribers/spree/product_metrics_subscriber_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/subscribers/spree/product_metrics_subscriber_spec.rb"},{"name":"#refresh_product_metrics enqueues refresh jobs for all products in the order","suite":"Spree::ProductMetricsSubscriber at ./spec/subscribers/spree/product_metrics_subscriber_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/subscribers/spree/product_metrics_subscriber_spec.rb"},{"name":"#refresh_product_metrics enqueues jobs with correct arguments","suite":"Spree::ProductMetricsSubscriber at ./spec/subscribers/spree/product_metrics_subscriber_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","suiteSourceFile":"core/spec/subscribers/spree/product_metrics_subscriber_spec.rb"},{"name":"#refresh_product_metrics when order_id is missing does not enqueue any jobs","suite":"Spree::ProductMetricsSubscriber at ./spec/subscribers/spree/product_metrics_subscriber_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3:1\"}}","suiteSourceFile":"core/spec/subscribers/spree/product_metrics_subscriber_spec.rb"},{"name":"#refresh_product_metrics when store_id is missing does not enqueue any jobs","suite":"Spree::ProductMetricsSubscriber at ./spec/subscribers/spree/product_metrics_subscriber_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4:1\"}}","suiteSourceFile":"core/spec/subscribers/spree/product_metrics_subscriber_spec.rb"},{"name":"#refresh_product_metrics when order does not exist does not enqueue any jobs","suite":"Spree::ProductMetricsSubscriber at ./spec/subscribers/spree/product_metrics_subscriber_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:5:1\"}}","suiteSourceFile":"core/spec/subscribers/spree/product_metrics_subscriber_spec.rb"},{"name":"#refresh_product_metrics when order has no line items does not enqueue any jobs","suite":"Spree::ProductMetricsSubscriber at ./spec/subscribers/spree/product_metrics_subscriber_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:6:1\"}}","suiteSourceFile":"core/spec/subscribers/spree/product_metrics_subscriber_spec.rb"},{"name":"#refresh_product_metrics when order has duplicate products only enqueues one job per unique product","suite":"Spree::ProductMetricsSubscriber at ./spec/subscribers/spree/product_metrics_subscriber_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:7:1\"}}","suiteSourceFile":"core/spec/subscribers/spree/product_metrics_subscriber_spec.rb"},{"name":".subscription_patterns subscribes to report.created event","suite":"Spree::ReportSubscriber at ./spec/subscribers/spree/report_subscriber_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","suiteSourceFile":"core/spec/subscribers/spree/report_subscriber_spec.rb"},{"name":".event_handlers routes report.created to generate_report_async","suite":"Spree::ReportSubscriber at ./spec/subscribers/spree/report_subscriber_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","suiteSourceFile":"core/spec/subscribers/spree/report_subscriber_spec.rb"},{"name":"#generate_report_async extracts report_id from event payload","suite":"Spree::ReportSubscriber at ./spec/subscribers/spree/report_subscriber_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","suiteSourceFile":"core/spec/subscribers/spree/report_subscriber_spec.rb"},{"name":"#generate_report_async does not call job if report_id is missing","suite":"Spree::ReportSubscriber at ./spec/subscribers/spree/report_subscriber_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","suiteSourceFile":"core/spec/subscribers/spree/report_subscriber_spec.rb"},{"name":"validates valid email addresses","suite":"EmailValidator at ./spec/validators/email_validator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","suiteSourceFile":"core/spec/validators/email_validator_spec.rb"},{"name":"validates invalid email addresses","suite":"EmailValidator at ./spec/validators/email_validator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2\"}}","suiteSourceFile":"core/spec/validators/email_validator_spec.rb"},{"name":"validating the given URL is invalid example at ./spec/validators/spree/url_validator_spec.rb:16","suite":"Spree::UrlValidator at ./spec/validators/spree/url_validator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","suiteSourceFile":"core/spec/validators/spree/url_validator_spec.rb"},{"name":"validating the given URL is invalid example at ./spec/validators/spree/url_validator_spec.rb:17","suite":"Spree::UrlValidator at ./spec/validators/spree/url_validator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2\"}}","suiteSourceFile":"core/spec/validators/spree/url_validator_spec.rb"},{"name":"validating the given URL is invalid example at ./spec/validators/spree/url_validator_spec.rb:18","suite":"Spree::UrlValidator at ./spec/validators/spree/url_validator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3\"}}","suiteSourceFile":"core/spec/validators/spree/url_validator_spec.rb"},{"name":"validating the given URL is invalid example at ./spec/validators/spree/url_validator_spec.rb:19","suite":"Spree::UrlValidator at ./spec/validators/spree/url_validator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:4\"}}","suiteSourceFile":"core/spec/validators/spree/url_validator_spec.rb"},{"name":"validating the given URL is invalid example at ./spec/validators/spree/url_validator_spec.rb:20","suite":"Spree::UrlValidator at ./spec/validators/spree/url_validator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:5\"}}","suiteSourceFile":"core/spec/validators/spree/url_validator_spec.rb"},{"name":"validating the given URL is valid example at ./spec/validators/spree/url_validator_spec.rb:24","suite":"Spree::UrlValidator at ./spec/validators/spree/url_validator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","suiteSourceFile":"core/spec/validators/spree/url_validator_spec.rb"},{"name":"validating the given URL is valid example at ./spec/validators/spree/url_validator_spec.rb:25","suite":"Spree::UrlValidator at ./spec/validators/spree/url_validator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2\"}}","suiteSourceFile":"core/spec/validators/spree/url_validator_spec.rb"},{"name":"validating the given URL is valid example at ./spec/validators/spree/url_validator_spec.rb:26","suite":"Spree::UrlValidator at ./spec/validators/spree/url_validator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:3\"}}","suiteSourceFile":"core/spec/validators/spree/url_validator_spec.rb"},{"name":"validating the given URL is valid example at ./spec/validators/spree/url_validator_spec.rb:27","suite":"Spree::UrlValidator at ./spec/validators/spree/url_validator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:4\"}}","suiteSourceFile":"core/spec/validators/spree/url_validator_spec.rb"},{"name":"validating the given URL is valid example at ./spec/validators/spree/url_validator_spec.rb:29","suite":"Spree::UrlValidator at ./spec/validators/spree/url_validator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:5\"}}","suiteSourceFile":"core/spec/validators/spree/url_validator_spec.rb"},{"name":"using a given message or a defined one using the message option adds the given message to the record url errors array","suite":"Spree::UrlValidator at ./spec/validators/spree/url_validator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","suiteSourceFile":"core/spec/validators/spree/url_validator_spec.rb"},{"name":"using a given message or a defined one without using the message option adds a pre-defined message to the record url error array","suite":"Spree::UrlValidator at ./spec/validators/spree/url_validator_spec.rb","module":"rspec","parameters":"{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","suiteSourceFile":"core/spec/validators/spree/url_validator_spec.rb"}],"testFiles":["spec/finders/spree/addresses/find_spec.rb","spec/finders/spree/option_values/find_available_spec.rb","spec/finders/spree/product_properties/find_available_spec.rb","spec/finders/spree/products/find_spec.rb","spec/finders/spree/stores/find_current_spec.rb","spec/finders/spree/taxons/find_spec.rb","spec/finders/spree/variants/option_types_finder_spec.rb","spec/finders/spree/variants/visible_finder_spec.rb","spec/helpers/base_helper_spec.rb","spec/helpers/currency_helper_spec.rb","spec/helpers/images_helper_spec.rb","spec/helpers/locale_helper_spec.rb","spec/helpers/products_helper_spec.rb","spec/helpers/shipment_helper_spec.rb","spec/i18n_spec.rb","spec/jobs/spree/addresses/geocode_address_job_spec.rb","spec/jobs/spree/coupon_codes/bulk_generate_job_spec.rb","spec/jobs/spree/exports/generate_job_spec.rb","spec/jobs/spree/gift_cards/bulk_generate_job_spec.rb","spec/jobs/spree/images/save_from_url_job_spec.rb","spec/jobs/spree/imports/create_rows_job_spec.rb","spec/jobs/spree/imports/process_rows_job_spec.rb","spec/jobs/spree/products/refresh_metrics_job_spec.rb","spec/jobs/spree/products/touch_taxons_job_spec.rb","spec/jobs/spree/stock_locations/stock_items/create_job_spec.rb","spec/jobs/spree/variants/remove_from_incomplete_orders_job_spec.rb","spec/jobs/spree/variants/remove_line_item_job_spec.rb","spec/jobs/spree/variants/touch_job_spec.rb","spec/lib/calculated_adjustments_spec.rb","spec/lib/i18n_spec.rb","spec/lib/spree/core/controller_helpers/auth_spec.rb","spec/lib/spree/core/controller_helpers/currency_spec.rb","spec/lib/spree/core/controller_helpers/locale_spec.rb","spec/lib/spree/core/controller_helpers/order_spec.rb","spec/lib/spree/core/controller_helpers/search_spec.rb","spec/lib/spree/core/controller_helpers/store_spec.rb","spec/lib/spree/core/controller_helpers/strong_parameters_spec.rb","spec/lib/spree/core/importer/order_spec.rb","spec/lib/spree/core/number_generator_spec.rb","spec/lib/spree/core/partials_spec.rb","spec/lib/spree/core/permission_configuration_spec.rb","spec/lib/spree/core/pricing/context_spec.rb","spec/lib/spree/core/ransack_configuration_spec.rb","spec/lib/spree/core/token_generator_spec.rb","spec/lib/spree/core_environment_spec.rb","spec/lib/spree/core_spec.rb","spec/lib/spree/events/registry_spec.rb","spec/lib/spree/events_spec.rb","spec/lib/spree/localized_number_spec.rb","spec/lib/spree/migrations_spec.rb","spec/lib/spree/money_spec.rb","spec/lib/spree/pricing/resolver_spec.rb","spec/lib/spree/service_module_spec.rb","spec/lib/tasks/core_spec.rb","spec/lib/tasks/exchanges_spec.rb","spec/mailers/spree/export_mailer_spec.rb","spec/mailers/spree/invitation_mailer_spec.rb","spec/mailers/spree/report_mailer_spec.rb","spec/models/concerns/spree/has_image_alt_text_spec.rb","spec/models/concerns/spree/image_methods_spec.rb","spec/models/concerns/spree/metafields_spec.rb","spec/models/concerns/spree/publishable_spec.rb","spec/models/spree/ability_spec.rb","spec/models/spree/address_spec.rb","spec/models/spree/adjustable/adjuster/base_spec.rb","spec/models/spree/adjustable/adjuster/promotion_spec.rb","spec/models/spree/adjustable/adjuster/tax_spec.rb","spec/models/spree/adjustable/adjustments_updater_spec.rb","spec/models/spree/adjustment_spec.rb","spec/models/spree/admin_user_spec.rb","spec/models/spree/app_dependencies_spec.rb","spec/models/spree/asset_spec.rb","spec/models/spree/base_analytics_event_handler_spec.rb","spec/models/spree/base_spec.rb","spec/models/spree/calculator/default_tax_spec.rb","spec/models/spree/calculator/flat_percent_item_total_spec.rb","spec/models/spree/calculator/flat_rate_spec.rb","spec/models/spree/calculator/flexi_rate_spec.rb","spec/models/spree/calculator/percent_on_line_item_spec.rb","spec/models/spree/calculator/price_sack_spec.rb","spec/models/spree/calculator/refunds/default_refund_amount_spec.rb","spec/models/spree/calculator/shipping/digital_delivery_spec.rb","spec/models/spree/calculator/shipping/flat_percent_item_total_spec.rb","spec/models/spree/calculator/shipping/flat_rate_spec.rb","spec/models/spree/calculator/shipping/flexi_rate_spec.rb","spec/models/spree/calculator/shipping/per_item_spec.rb","spec/models/spree/calculator/shipping/price_sack_spec.rb","spec/models/spree/calculator/tiered_flat_rate_spec.rb","spec/models/spree/calculator/tiered_percent_spec.rb","spec/models/spree/calculator_spec.rb","spec/models/spree/classification_spec.rb","spec/models/spree/concerns/display_money_spec.rb","spec/models/spree/concerns/ransackable_attributes_spec.rb","spec/models/spree/concerns/user_management_spec.rb","spec/models/spree/concerns/user_methods_spec.rb","spec/models/spree/concerns/user_roles_spec.rb","spec/models/spree/concerns/vat_price_calculation_spec.rb","spec/models/spree/country_spec.rb","spec/models/spree/coupon_code_spec.rb","spec/models/spree/credit_card_spec.rb","spec/models/spree/current_spec.rb","spec/models/spree/custom_domain_spec.rb","spec/models/spree/customer_group_spec.rb","spec/models/spree/customer_group_user_spec.rb","spec/models/spree/customer_return_spec.rb","spec/models/spree/data_feed/google_spec.rb","spec/models/spree/digital_link_spec.rb","spec/models/spree/digital_spec.rb","spec/models/spree/event_spec.rb","spec/models/spree/exchange_spec.rb","spec/models/spree/export_spec.rb","spec/models/spree/exports/customers_spec.rb","spec/models/spree/exports/gift_cards_spec.rb","spec/models/spree/exports/newsletter_subscribers_spec.rb","spec/models/spree/exports/orders_spec.rb","spec/models/spree/exports/products_spec.rb","spec/models/spree/fulfilment_changer_spec.rb","spec/models/spree/gateway/bogus_spec.rb","spec/models/spree/gateway_spec.rb","spec/models/spree/gift_card_batch_spec.rb","spec/models/spree/gift_card_spec.rb","spec/models/spree/image_spec.rb","spec/models/spree/import_mapping_spec.rb","spec/models/spree/import_row_spec.rb","spec/models/spree/import_spec.rb","spec/models/spree/integration_spec.rb","spec/models/spree/inventory_unit_spec.rb","spec/models/spree/invitation_spec.rb","spec/models/spree/line_item_spec.rb","spec/models/spree/log_entry_spec.rb","spec/models/spree/metafield_definition_spec.rb","spec/models/spree/metafield_spec.rb","spec/models/spree/metafields/boolean_spec.rb","spec/models/spree/metafields/json_spec.rb","spec/models/spree/metafields/number_spec.rb","spec/models/spree/metafields/rich_text_spec.rb","spec/models/spree/newsletter_subscriber_spec.rb","spec/models/spree/option_type_spec.rb","spec/models/spree/option_value_spec.rb","spec/models/spree/option_value_variant_spec.rb","spec/models/spree/order/address_spec.rb","spec/models/spree/order/adjustments_spec.rb","spec/models/spree/order/callbacks_spec.rb","spec/models/spree/order/checkout_spec.rb","spec/models/spree/order/currency_updater_spec.rb","spec/models/spree/order/digital_spec.rb","spec/models/spree/order/finalizing_spec.rb","spec/models/spree/order/gift_card_spec.rb","spec/models/spree/order/payment_spec.rb","spec/models/spree/order/risk_assessment_spec.rb","spec/models/spree/order/shipments_spec.rb","spec/models/spree/order/state_machine_spec.rb","spec/models/spree/order/store_credit_spec.rb","spec/models/spree/order/tax_spec.rb","spec/models/spree/order/totals_spec.rb","spec/models/spree/order/updating_spec.rb","spec/models/spree/order/validations_spec.rb","spec/models/spree/order_contents_spec.rb","spec/models/spree/order_inventory_spec.rb","spec/models/spree/order_merger_spec.rb","spec/models/spree/order_promotion_spec.rb","spec/models/spree/order_spec.rb","spec/models/spree/order_updater_spec.rb","spec/models/spree/payment/custom_events_spec.rb","spec/models/spree/payment/gateway_options_spec.rb","spec/models/spree/payment/store_credit_spec.rb","spec/models/spree/payment_method/store_credit_spec.rb","spec/models/spree/payment_method_spec.rb","spec/models/spree/payment_source_spec.rb","spec/models/spree/payment_spec.rb","spec/models/spree/permission_sets/ability_integration_spec.rb","spec/models/spree/permission_sets/base_spec.rb","spec/models/spree/permission_sets/default_customer_spec.rb","spec/models/spree/permission_sets/order_management_spec.rb","spec/models/spree/permission_sets/product_management_spec.rb","spec/models/spree/permission_sets/super_user_spec.rb","spec/models/spree/policy_spec.rb","spec/models/spree/post_category_spec.rb","spec/models/spree/post_spec.rb","spec/models/spree/preference_spec.rb","spec/models/spree/preferences/configuration_spec.rb","spec/models/spree/preferences/preferable_spec.rb","spec/models/spree/preferences/runtime_configuration_spec.rb","spec/models/spree/preferences/scoped_store_spec.rb","spec/models/spree/preferences/store_spec.rb","spec/models/spree/price_list_spec.rb","spec/models/spree/price_rules/customer_group_rule_spec.rb","spec/models/spree/price_rules/user_rule_spec.rb","spec/models/spree/price_rules/volume_rule_spec.rb","spec/models/spree/price_rules/zone_rule_spec.rb","spec/models/spree/price_spec.rb","spec/models/spree/product/normalizes_spec.rb","spec/models/spree/product/scopes_spec.rb","spec/models/spree/product/slugs_spec.rb","spec/models/spree/product_filter_spec.rb","spec/models/spree/product_property_spec.rb","spec/models/spree/product_spec.rb","spec/models/spree/promotion/actions/create_adjustment_spec.rb","spec/models/spree/promotion/actions/create_item_adjustments_spec.rb","spec/models/spree/promotion/actions/create_line_items_spec.rb","spec/models/spree/promotion/actions/free_shipping_spec.rb","spec/models/spree/promotion/rules/country_spec.rb","spec/models/spree/promotion/rules/currency_spec.rb","spec/models/spree/promotion/rules/customer_group_spec.rb","spec/models/spree/promotion/rules/first_order_spec.rb","spec/models/spree/promotion/rules/item_total_spec.rb","spec/models/spree/promotion/rules/one_use_per_user_spec.rb","spec/models/spree/promotion/rules/option_value_spec.rb","spec/models/spree/promotion/rules/product_spec.rb","spec/models/spree/promotion/rules/taxon_spec.rb","spec/models/spree/promotion/rules/user_logged_in_spec.rb","spec/models/spree/promotion/rules/user_spec.rb","spec/models/spree/promotion_action_spec.rb","spec/models/spree/promotion_category_spec.rb","spec/models/spree/promotion_handler/cart_spec.rb","spec/models/spree/promotion_handler/coupon_spec.rb","spec/models/spree/promotion_handler/coupon_with_gift_card_spec.rb","spec/models/spree/promotion_handler/free_shipping_spec.rb","spec/models/spree/promotion_handler/page_spec.rb","spec/models/spree/promotion_handler/promotion_duplicator_spec.rb","spec/models/spree/promotion_rule_spec.rb","spec/models/spree/promotion_spec.rb","spec/models/spree/property_spec.rb","spec/models/spree/prototype_spec.rb","spec/models/spree/refund_reason_spec.rb","spec/models/spree/refund_spec.rb","spec/models/spree/reimbursement/credit_spec.rb","spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb","spec/models/spree/reimbursement/reimbursement_type_validator_spec.rb","spec/models/spree/reimbursement_performer_spec.rb","spec/models/spree/reimbursement_spec.rb","spec/models/spree/reimbursement_tax_calculator_spec.rb","spec/models/spree/reimbursement_type/credit_spec.rb","spec/models/spree/reimbursement_type/exchange_spec.rb","spec/models/spree/reimbursement_type/original_payment_spec.rb","spec/models/spree/reimbursement_type/store_credit_spec.rb","spec/models/spree/report_line_item_spec.rb","spec/models/spree/report_line_items/products_performance_spec.rb","spec/models/spree/report_line_items/sales_total_spec.rb","spec/models/spree/report_spec.rb","spec/models/spree/reports/products_performance_spec.rb","spec/models/spree/reports/sales_total_spec.rb","spec/models/spree/return_authorization_spec.rb","spec/models/spree/return_item/eligibility_validator/default_spec.rb","spec/models/spree/return_item/eligibility_validator/inventory_shipped_spec.rb","spec/models/spree/return_item/eligibility_validator/no_reimbursements_spec.rb","spec/models/spree/return_item/eligibility_validator/order_completed_spec.rb","spec/models/spree/return_item/eligibility_validator/rma_required_spec.rb","spec/models/spree/return_item/eligibility_validator/time_since_purchase_spec.rb","spec/models/spree/return_item/exchange_variant_eligibility/same_option_value_spec.rb","spec/models/spree/return_item/exchange_variant_eligibility/same_product_spec.rb","spec/models/spree/return_item_spec.rb","spec/models/spree/returns_calculator_spec.rb","spec/models/spree/role_spec.rb","spec/models/spree/role_user_spec.rb","spec/models/spree/shipment/custom_events_spec.rb","spec/models/spree/shipment_spec.rb","spec/models/spree/shipping_calculator_spec.rb","spec/models/spree/shipping_category_spec.rb","spec/models/spree/shipping_method_spec.rb","spec/models/spree/shipping_rate_spec.rb","spec/models/spree/state_spec.rb","spec/models/spree/stock/availability_validator_spec.rb","spec/models/spree/stock/content_item_spec.rb","spec/models/spree/stock/coordinator_spec.rb","spec/models/spree/stock/differentiator_spec.rb","spec/models/spree/stock/estimator_spec.rb","spec/models/spree/stock/inventory_unit_builder_spec.rb","spec/models/spree/stock/package_spec.rb","spec/models/spree/stock/packer_spec.rb","spec/models/spree/stock/prioritizer_spec.rb","spec/models/spree/stock/quantifier_spec.rb","spec/models/spree/stock/splitter/backordered_spec.rb","spec/models/spree/stock/splitter/base_spec.rb","spec/models/spree/stock/splitter/digital_spec.rb","spec/models/spree/stock/splitter/shipping_category_spec.rb","spec/models/spree/stock/splitter/weight_spec.rb","spec/models/spree/stock_item_spec.rb","spec/models/spree/stock_location_spec.rb","spec/models/spree/stock_movement/custom_events_spec.rb","spec/models/spree/stock_movement_spec.rb","spec/models/spree/stock_transfer_spec.rb","spec/models/spree/store_credit_category_spec.rb","spec/models/spree/store_credit_event_spec.rb","spec/models/spree/store_credit_spec.rb","spec/models/spree/store_favicon_image_spec.rb","spec/models/spree/store_product_spec.rb","spec/models/spree/store_spec.rb","spec/models/spree/subscriber_spec.rb","spec/models/spree/tax_category_spec.rb","spec/models/spree/tax_rate_spec.rb","spec/models/spree/taxon_image_spec.rb","spec/models/spree/taxon_spec.rb","spec/models/spree/taxonomy_spec.rb","spec/models/spree/user_spec.rb","spec/models/spree/variant/scopes_spec.rb","spec/models/spree/variant_spec.rb","spec/models/spree/webhook_delivery_spec.rb","spec/models/spree/webhook_endpoint_spec.rb","spec/models/spree/wished_item_spec.rb","spec/models/spree/wishlist_spec.rb","spec/models/spree/zone_member_spec.rb","spec/models/spree/zone_spec.rb","spec/presenters/spree/csv/customer_presenter_spec.rb","spec/presenters/spree/csv/gift_card_presenter_spec.rb","spec/presenters/spree/csv/newsletter_subscriber_presenter_spec.rb","spec/presenters/spree/csv/order_line_items_presenter_spec.rb","spec/presenters/spree/csv/product_variant_presenter_spec.rb","spec/presenters/spree/filters/options_presenter_spec.rb","spec/presenters/spree/filters/price_presenter_spec.rb","spec/presenters/spree/filters/price_range_presenter_spec.rb","spec/presenters/spree/filters/properties_presenter_spec.rb","spec/presenters/spree/filters/property_presenter_spec.rb","spec/presenters/spree/filters/quantified_price_range_presenter_spec.rb","spec/presenters/spree/variant_presenter_spec.rb","spec/presenters/spree/variants/option_types_presenter_spec.rb","spec/presenters/spree/variants/options_presenter_spec.rb","spec/serializers/spree/events/asset_serializer_spec.rb","spec/serializers/spree/events/base_serializer_spec.rb","spec/serializers/spree/events/customer_return_serializer_spec.rb","spec/serializers/spree/events/digital_link_serializer_spec.rb","spec/serializers/spree/events/digital_serializer_spec.rb","spec/serializers/spree/events/export_serializer_spec.rb","spec/serializers/spree/events/gift_card_batch_serializer_spec.rb","spec/serializers/spree/events/gift_card_serializer_spec.rb","spec/serializers/spree/events/import_row_serializer_spec.rb","spec/serializers/spree/events/import_serializer_spec.rb","spec/serializers/spree/events/invitation_serializer_spec.rb","spec/serializers/spree/events/line_item_serializer_spec.rb","spec/serializers/spree/events/newsletter_subscriber_serializer_spec.rb","spec/serializers/spree/events/order_serializer_spec.rb","spec/serializers/spree/events/payment_serializer_spec.rb","spec/serializers/spree/events/post_category_serializer_spec.rb","spec/serializers/spree/events/post_serializer_spec.rb","spec/serializers/spree/events/price_serializer_spec.rb","spec/serializers/spree/events/product_serializer_spec.rb","spec/serializers/spree/events/promotion_serializer_spec.rb","spec/serializers/spree/events/refund_serializer_spec.rb","spec/serializers/spree/events/reimbursement_serializer_spec.rb","spec/serializers/spree/events/report_serializer_spec.rb","spec/serializers/spree/events/return_authorization_serializer_spec.rb","spec/serializers/spree/events/return_item_serializer_spec.rb","spec/serializers/spree/events/shipment_serializer_spec.rb","spec/serializers/spree/events/stock_item_serializer_spec.rb","spec/serializers/spree/events/stock_movement_serializer_spec.rb","spec/serializers/spree/events/stock_transfer_serializer_spec.rb","spec/serializers/spree/events/store_credit_serializer_spec.rb","spec/serializers/spree/events/user_serializer_spec.rb","spec/serializers/spree/events/variant_serializer_spec.rb","spec/serializers/spree/events/wished_item_serializer_spec.rb","spec/serializers/spree/events/wishlist_serializer_spec.rb","spec/services/spree/account/addresses/create_spec.rb","spec/services/spree/account/addresses/update_spec.rb","spec/services/spree/account/create_spec.rb","spec/services/spree/account/update_spec.rb","spec/services/spree/addresses/phone_validator_spec.rb","spec/services/spree/addresses/update_spec.rb","spec/services/spree/cart/add_item_spec.rb","spec/services/spree/cart/associate_spec.rb","spec/services/spree/cart/change_currency_spec.rb","spec/services/spree/cart/create_spec.rb","spec/services/spree/cart/destroy_spec.rb","spec/services/spree/cart/empty_spec.rb","spec/services/spree/cart/remove_item_spec.rb","spec/services/spree/cart/remove_line_item_spec.rb","spec/services/spree/cart/remove_out_of_stock_items_spec.rb","spec/services/spree/cart/set_quantity_spec.rb","spec/services/spree/checkout/add_store_credit_spec.rb","spec/services/spree/checkout/advance_spec.rb","spec/services/spree/checkout/get_shipping_rates_spec.rb","spec/services/spree/checkout/remove_store_credit_spec.rb","spec/services/spree/checkout/select_shipping_method_spec.rb","spec/services/spree/checkout/update_spec.rb","spec/services/spree/classifications/reposition_spec.rb","spec/services/spree/credit_cards/destroy_spec.rb","spec/services/spree/data_feeds/google/required_attributes_spec.rb","spec/services/spree/data_feeds/google/rss_spec.rb","spec/services/spree/gift_cards/apply_spec.rb","spec/services/spree/gift_cards/redeem_spec.rb","spec/services/spree/gift_cards/remove_spec.rb","spec/services/spree/imports/row_processors/product_variant_spec.rb","spec/services/spree/line_items/create_spec.rb","spec/services/spree/line_items/destroy_spec.rb","spec/services/spree/line_items/update_spec.rb","spec/services/spree/locales/set_fallback_locale_for_store_spec.rb","spec/services/spree/newsletter/subscribe_spec.rb","spec/services/spree/newsletter/verify_spec.rb","spec/services/spree/orders/approve_spec.rb","spec/services/spree/orders/cancel_spec.rb","spec/services/spree/orders/create_user_account_spec.rb","spec/services/spree/payments/create_spec.rb","spec/services/spree/products/auto_match_taxons_spec.rb","spec/services/spree/products/duplicator_spec.rb","spec/services/spree/products/prepare_nested_attributes_spec.rb","spec/services/spree/seeds/all_spec.rb","spec/services/spree/seeds/digital_delivery_spec.rb","spec/services/spree/seeds/payment_methods_spec.rb","spec/services/spree/seeds/returns_environment_spec.rb","spec/services/spree/seeds/tax_categories_spec.rb","spec/services/spree/shipments/add_item_spec.rb","spec/services/spree/shipments/create_spec.rb","spec/services/spree/shipments/remove_item_spec.rb","spec/services/spree/stock_locations/stock_items/create_spec.rb","spec/services/spree/stores/settings_defaults_by_country_spec.rb","spec/services/spree/tags/bulk_add_spec.rb","spec/services/spree/tags/bulk_remove_spec.rb","spec/services/spree/taxons/add_products_spec.rb","spec/services/spree/taxons/regenerate_products_spec.rb","spec/services/spree/taxons/remove_products_spec.rb","spec/services/spree/variants/remove_line_items_spec.rb","spec/services/spree/wallet/create_payment_source_spec.rb","spec/subscribers/spree/event_log_subscriber_spec.rb","spec/subscribers/spree/export_subscriber_spec.rb","spec/subscribers/spree/invitation_email_subscriber_spec.rb","spec/subscribers/spree/product_metrics_subscriber_spec.rb","spec/subscribers/spree/report_subscriber_spec.rb","spec/validators/email_validator_spec.rb","spec/validators/spree/url_validator_spec.rb"],"skippableTests":["rspec.EmailValidator at ./spec/validators/email_validator_spec.rb.validates invalid email addresses.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2\"}}","rspec.EmailValidator at ./spec/validators/email_validator_spec.rb.validates valid email addresses.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","rspec.I18n at ./spec/i18n_spec.rb.does not have inconsistent interpolations.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3\"}}","rspec.I18n at ./spec/i18n_spec.rb.does not have missing keys.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","rspec.I18n at ./spec/i18n_spec.rb.files are normalized.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2\"}}","rspec.Order at ./spec/models/spree/order/gift_card_spec.rb.#apply_gift_card when there is a gift card applies the gift card to the order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","rspec.Order at ./spec/models/spree/order/gift_card_spec.rb.#gift_card_total when there is a gift card returns the gift card total.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","rspec.Order at ./spec/models/spree/order/gift_card_spec.rb.#remove_gift_card when there is a gift card removes the gift card from the order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","rspec.Order at ./spec/models/spree/order/store_credit_spec.rb.#add_store_credit_payments the available store credit is not enough to pay for the entire order creates a store credit payment for the available amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","rspec.Order at ./spec/models/spree/order/store_credit_spec.rb.#add_store_credit_payments there are multiple store credits they have different credit type priorities uses the primary store credit type over the secondary.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1:1\"}}","rspec.Order at ./spec/models/spree/order/store_credit_spec.rb.#add_store_credit_payments there is enough store credit to pay for the entire order creates a store credit payment for the full amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","rspec.Order at ./spec/models/spree/order/store_credit_spec.rb.#add_store_credit_payments there is no store credit does not create a store credit payment.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","rspec.Order at ./spec/models/spree/order/store_credit_spec.rb.#available_store_credits order does not have an associated user example at ./spec/models/spree/order/store_credit_spec.rb:253.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:1\"}}","rspec.Order at ./spec/models/spree/order/store_credit_spec.rb.#available_store_credits order has an associated user returns the user available store credits.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1\"}}","rspec.Order at ./spec/models/spree/order/store_credit_spec.rb.#could_use_store_credit? order does not have an associated user example at ./spec/models/spree/order/store_credit_spec.rb:276.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1:1\"}}","rspec.Order at ./spec/models/spree/order/store_credit_spec.rb.#could_use_store_credit? order has an associated user with store credit example at ./spec/models/spree/order/store_credit_spec.rb:295.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2:2:1\"}}","rspec.Order at ./spec/models/spree/order/store_credit_spec.rb.#could_use_store_credit? order has an associated user without Store Credit Payment example at ./spec/models/spree/order/store_credit_spec.rb:318.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2:4:1\"}}","rspec.Order at ./spec/models/spree/order/store_credit_spec.rb.#could_use_store_credit? order has an associated user without active Store Credit Payment example at ./spec/models/spree/order/store_credit_spec.rb:306.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2:3:1\"}}","rspec.Order at ./spec/models/spree/order/store_credit_spec.rb.#could_use_store_credit? order has an associated user without store credit example at ./spec/models/spree/order/store_credit_spec.rb:285.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2:1:1\"}}","rspec.Order at ./spec/models/spree/order/store_credit_spec.rb.#covered_by_store_credit order doesn't have an associated user example at ./spec/models/spree/order/store_credit_spec.rb:159.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","rspec.Order at ./spec/models/spree/order/store_credit_spec.rb.#covered_by_store_credit order has an associated user order total is zero example at ./spec/models/spree/order/store_credit_spec.rb:187.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:3:1\"}}","rspec.Order at ./spec/models/spree/order/store_credit_spec.rb.#covered_by_store_credit order has an associated user user does not have enough store credit to pay for the order example at ./spec/models/spree/order/store_credit_spec.rb:182.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:2:1\"}}","rspec.Order at ./spec/models/spree/order/store_credit_spec.rb.#covered_by_store_credit order has an associated user user has enough store credit to pay for the order example at ./spec/models/spree/order/store_credit_spec.rb:173.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1:1\"}}","rspec.Order at ./spec/models/spree/order/store_credit_spec.rb.#display_order_total_after_store_credit returns a money instance.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:1\"}}","rspec.Order at ./spec/models/spree/order/store_credit_spec.rb.#display_order_total_after_store_credit returns the order_total_after_store_credit amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:2\"}}","rspec.Order at ./spec/models/spree/order/store_credit_spec.rb.#display_store_credit_remaining_after_capture returns a money instance.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:1\"}}","rspec.Order at ./spec/models/spree/order/store_credit_spec.rb.#display_store_credit_remaining_after_capture returns all of the user's available store credit minus what's applied to the order amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:2\"}}","rspec.Order at ./spec/models/spree/order/store_credit_spec.rb.#display_total_applicable_store_credit returns a money instance.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1\"}}","rspec.Order at ./spec/models/spree/order/store_credit_spec.rb.#display_total_applicable_store_credit returns a negative amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2\"}}","rspec.Order at ./spec/models/spree/order/store_credit_spec.rb.#display_total_applied_store_credit returns a money instance.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:1\"}}","rspec.Order at ./spec/models/spree/order/store_credit_spec.rb.#display_total_applied_store_credit returns a negative amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:2\"}}","rspec.Order at ./spec/models/spree/order/store_credit_spec.rb.#display_total_available_store_credit returns a money instance.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:1\"}}","rspec.Order at ./spec/models/spree/order/store_credit_spec.rb.#display_total_available_store_credit returns the total_available_store_credit amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:2\"}}","rspec.Order at ./spec/models/spree/order/store_credit_spec.rb.#order_total_after_store_credit order's user does not have any store credits returns the order total.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2:1\"}}","rspec.Order at ./spec/models/spree/order/store_credit_spec.rb.#order_total_after_store_credit order's user has store credits deducts the applicable store credit.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1:1\"}}","rspec.Order at ./spec/models/spree/order/store_credit_spec.rb.#remove_store_credit_payments when order is complete example at ./spec/models/spree/order/store_credit_spec.rb:149.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","rspec.Order at ./spec/models/spree/order/store_credit_spec.rb.#remove_store_credit_payments when order is not complete example at ./spec/models/spree/order/store_credit_spec.rb:136.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","rspec.Order at ./spec/models/spree/order/store_credit_spec.rb.#remove_store_credit_payments when order is not complete example at ./spec/models/spree/order/store_credit_spec.rb:137.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:2\"}}","rspec.Order at ./spec/models/spree/order/store_credit_spec.rb.#total_applicable_store_credit order is completed with valid payments returns the sum of the payment amounts.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2:1:1\"}}","rspec.Order at ./spec/models/spree/order/store_credit_spec.rb.#total_applicable_store_credit order is completed without valid payments returns 0.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2:2:1\"}}","rspec.Order at ./spec/models/spree/order/store_credit_spec.rb.#total_applicable_store_credit order is in any state other than confirm or complete the associated user does not have store credits returns 0.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:3:2:1\"}}","rspec.Order at ./spec/models/spree/order/store_credit_spec.rb.#total_applicable_store_credit order is in any state other than confirm or complete the associated user has store credits the store credit is less than the order total returns the store credit amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:3:1:2:1\"}}","rspec.Order at ./spec/models/spree/order/store_credit_spec.rb.#total_applicable_store_credit order is in any state other than confirm or complete the associated user has store credits the store credit is more than the order total returns the order total.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:3:1:1:1\"}}","rspec.Order at ./spec/models/spree/order/store_credit_spec.rb.#total_applicable_store_credit order is in any state other than confirm or complete the order does not have an associated user returns 0.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:3:3:1\"}}","rspec.Order at ./spec/models/spree/order/store_credit_spec.rb.#total_applicable_store_credit order is in the confirm state with valid payments returns the sum of the payment amounts.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1:1:1\"}}","rspec.Order at ./spec/models/spree/order/store_credit_spec.rb.#total_applicable_store_credit order is in the confirm state without valid payments returns 0.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1:2:1\"}}","rspec.Order at ./spec/models/spree/order/store_credit_spec.rb.#total_applied_store_credit with valid payments returns the sum of the payment amounts.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1:1\"}}","rspec.Order at ./spec/models/spree/order/store_credit_spec.rb.#total_applied_store_credit with valid payments when payments are loaded returns the sum of the payment amounts.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1:2:1\"}}","rspec.Order at ./spec/models/spree/order/store_credit_spec.rb.#total_applied_store_credit without valid payments returns 0.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:2:1\"}}","rspec.Order at ./spec/models/spree/order/store_credit_spec.rb.#total_available_store_credit order does not have an associated user returns 0.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1\"}}","rspec.Order at ./spec/models/spree/order/store_credit_spec.rb.#total_available_store_credit order has an associated user returns the user's available store credit.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1\"}}","rspec.Order at ./spec/models/spree/order/store_credit_spec.rb.#total_available_store_credit order has an associated user when store is provided and has no store credits associated returns the user's available store credit.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:2:2:1\"}}","rspec.Order at ./spec/models/spree/order/store_credit_spec.rb.#total_available_store_credit order has an associated user when store is provided and has store credits associated returns the user's available store credit.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:2:1:1\"}}","rspec.Order at ./spec/models/spree/order/store_credit_spec.rb.#using_store_credit? order has no store credit payments example at ./spec/models/spree/order/store_credit_spec.rb:463.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:2:1\"}}","rspec.Order at ./spec/models/spree/order/store_credit_spec.rb.#using_store_credit? order has store credit payment example at ./spec/models/spree/order/store_credit_spec.rb:457.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1:1\"}}","rspec.Payment at ./spec/models/spree/payment/store_credit_spec.rb.#cancel! a store credit attempts to cancels the payment.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","rspec.Payment at ./spec/models/spree/payment/store_credit_spec.rb.#cancel! a store credit cancels successfully voids the payment.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","rspec.Payment at ./spec/models/spree/payment/store_credit_spec.rb.#cancel! a store credit does not cancel successfully does not change the payment state.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:1\"}}","rspec.Permission Sets Integration with Ability at ./spec/models/spree/permission_sets/ability_integration_spec.rb.admin role applies super user permissions to admin users.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","rspec.Permission Sets Integration with Ability at ./spec/models/spree/permission_sets/ability_integration_spec.rb.default role applies default permissions to non-persisted users.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.Permission Sets Integration with Ability at ./spec/models/spree/permission_sets/ability_integration_spec.rb.permission configuration API allows clearing permissions from a role.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2\"}}","rspec.Permission Sets Integration with Ability at ./spec/models/spree/permission_sets/ability_integration_spec.rb.permission configuration API allows configuring permissions like Solidus.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","rspec.Permission Sets Integration with Ability at ./spec/models/spree/permission_sets/ability_integration_spec.rb.role-based permissions user with multiple roles combines permission sets from all roles.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","rspec.Permission Sets Integration with Ability at ./spec/models/spree/permission_sets/ability_integration_spec.rb.role-based permissions user with single role applies the permission sets for the role.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","rspec.Permission Sets Integration with Ability at ./spec/models/spree/permission_sets/ability_integration_spec.rb.role-based permissions user with unconfigured role falls back to legacy behavior.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","rspec.Product scopes at ./spec/models/spree/product/scopes_spec.rb.#add_simple_scopes define scope ascend_by_updated_at on ActiveRecord::Relation example at ./spec/models/spree/product/scopes_spec.rb:217.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:1:2:1\"}}","rspec.Product scopes at ./spec/models/spree/product/scopes_spec.rb.#add_simple_scopes define scope ascend_by_updated_at on ActiveRecord::Relation example at ./spec/models/spree/product/scopes_spec.rb:218.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:1:2:2\"}}","rspec.Product scopes at ./spec/models/spree/product/scopes_spec.rb.#add_simple_scopes define scope ascend_by_updated_at on class example at ./spec/models/spree/product/scopes_spec.rb:213.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:1:1:1\"}}","rspec.Product scopes at ./spec/models/spree/product/scopes_spec.rb.#add_simple_scopes define scope descend_by_name on ActiveRecord::Relation example at ./spec/models/spree/product/scopes_spec.rb:228.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:2:2:1\"}}","rspec.Product scopes at ./spec/models/spree/product/scopes_spec.rb.#add_simple_scopes define scope descend_by_name on ActiveRecord::Relation example at ./spec/models/spree/product/scopes_spec.rb:229.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:2:2:2\"}}","rspec.Product scopes at ./spec/models/spree/product/scopes_spec.rb.#add_simple_scopes define scope descend_by_name on class example at ./spec/models/spree/product/scopes_spec.rb:224.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:2:1:1\"}}","rspec.Product scopes at ./spec/models/spree/product/scopes_spec.rb.#ascend_by_taxons_min_position orders products by ascending taxons minimum position.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","rspec.Product scopes at ./spec/models/spree/product/scopes_spec.rb.#available different currency example at ./spec/models/spree/product/scopes_spec.rb:36.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5:1\"}}","rspec.Product scopes at ./spec/models/spree/product/scopes_spec.rb.#available different currency example at ./spec/models/spree/product/scopes_spec.rb:37.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5:2\"}}","rspec.Product scopes at ./spec/models/spree/product/scopes_spec.rb.#available when available example at ./spec/models/spree/product/scopes_spec.rb:23.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","rspec.Product scopes at ./spec/models/spree/product/scopes_spec.rb.#available when discontinued example at ./spec/models/spree/product/scopes_spec.rb:11.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","rspec.Product scopes at ./spec/models/spree/product/scopes_spec.rb.#available when not available example at ./spec/models/spree/product/scopes_spec.rb:29.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1\"}}","rspec.Product scopes at ./spec/models/spree/product/scopes_spec.rb.#available when not discontinued example at ./spec/models/spree/product/scopes_spec.rb:17.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","rspec.Product scopes at ./spec/models/spree/product/scopes_spec.rb.#for_store returns products assigned to a store.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1\"}}","rspec.Product scopes at ./spec/models/spree/product/scopes_spec.rb.#in_stock.in_stock_or_backorderable example at ./spec/models/spree/product/scopes_spec.rb:325.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1\"}}","rspec.Product scopes at ./spec/models/spree/product/scopes_spec.rb.#search_by_name is case insensitive for search phrases.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:3\"}}","rspec.Product scopes at ./spec/models/spree/product/scopes_spec.rb.#search_by_name shows multiple products whose names contain phrase.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2\"}}","rspec.Product scopes at ./spec/models/spree/product/scopes_spec.rb.#search_by_name shows product whose name contains phrase.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","rspec.Product scopes at ./spec/models/spree/product/scopes_spec.rb..by_best_selling when products have same units_sold_count uses revenue as secondary sort criteria.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:3:1\"}}","rspec.Product scopes at ./spec/models/spree/product/scopes_spec.rb..by_best_selling with completed orders orders products by units_sold_count in ascending order when specified.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1:2\"}}","rspec.Product scopes at ./spec/models/spree/product/scopes_spec.rb..by_best_selling with completed orders orders products by units_sold_count in descending order by default.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1:1\"}}","rspec.Product scopes at ./spec/models/spree/product/scopes_spec.rb..by_best_selling with incomplete orders only counts units from completed orders.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:2:1\"}}","rspec.Product scopes at ./spec/models/spree/product/scopes_spec.rb..by_best_selling with multiple orders containing multiple line items ranks by total units sold across all orders.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:5:1\"}}","rspec.Product scopes at ./spec/models/spree/product/scopes_spec.rb..by_best_selling with products having no orders includes products with no orders at the end.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:6:1\"}}","rspec.Product scopes at ./spec/models/spree/product/scopes_spec.rb..by_best_selling with products having only pending orders (no completed_at) includes products with only pending orders with units_sold_count = 0.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:7:1\"}}","rspec.Product scopes at ./spec/models/spree/product/scopes_spec.rb..by_best_selling with products having only pending orders (no completed_at) orders products correctly with pending orders included.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:7:2\"}}","rspec.Product scopes at ./spec/models/spree/product/scopes_spec.rb..by_best_selling with varying quantities sums line item quantities for units_sold_count.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:4:1\"}}","rspec.Product scopes at ./spec/models/spree/product/scopes_spec.rb..for_filters when giving a currency with no products example at ./spec/models/spree/product/scopes_spec.rb:59.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","rspec.Product scopes at ./spec/models/spree/product/scopes_spec.rb..for_filters when giving a taxon example at ./spec/models/spree/product/scopes_spec.rb:55.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","rspec.Product scopes at ./spec/models/spree/product/scopes_spec.rb.A product assigned to parent and child taxons calling Product.in_taxon returns products in child taxons.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","rspec.Product scopes at ./spec/models/spree/product/scopes_spec.rb.A product assigned to parent and child taxons calling Product.in_taxon should not return duplicate records.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","rspec.Product scopes at ./spec/models/spree/product/scopes_spec.rb.A product assigned to parent and child taxons orders products based on their ordering within the classifications after ordering changed.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3:2\"}}","rspec.Product scopes at ./spec/models/spree/product/scopes_spec.rb.A product assigned to parent and child taxons orders products based on their ordering within the classifications by initial ordering.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3:1\"}}","rspec.Product scopes at ./spec/models/spree/product/scopes_spec.rb.options scopes .with_option cannot find an option type with an unknown id.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1:5\"}}","rspec.Product scopes at ./spec/models/spree/product/scopes_spec.rb.options scopes .with_option doesn't find any option types with an unknown name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1:2\"}}","rspec.Product scopes at ./spec/models/spree/product/scopes_spec.rb.options scopes .with_option finds by a option type's name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1:1\"}}","rspec.Product scopes at ./spec/models/spree/product/scopes_spec.rb.options scopes .with_option finds by a option type.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1:3\"}}","rspec.Product scopes at ./spec/models/spree/product/scopes_spec.rb.options scopes .with_option finds by an id.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1:4\"}}","rspec.Product scopes at ./spec/models/spree/product/scopes_spec.rb.options scopes .with_option_value can return product ids.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2:6\"}}","rspec.Product scopes at ./spec/models/spree/product/scopes_spec.rb.options scopes .with_option_value cannot find an option type with an unknown id.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2:5\"}}","rspec.Product scopes at ./spec/models/spree/product/scopes_spec.rb.options scopes .with_option_value doesn't find any option types with an unknown name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2:2\"}}","rspec.Product scopes at ./spec/models/spree/product/scopes_spec.rb.options scopes .with_option_value finds by a option type's name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2:1\"}}","rspec.Product scopes at ./spec/models/spree/product/scopes_spec.rb.options scopes .with_option_value finds by a option type.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2:3\"}}","rspec.Product scopes at ./spec/models/spree/product/scopes_spec.rb.options scopes .with_option_value finds by an id.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2:4\"}}","rspec.Product scopes at ./spec/models/spree/product/scopes_spec.rb.property scopes with_property cannot find a property with an unknown id.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:5\"}}","rspec.Product scopes at ./spec/models/spree/product/scopes_spec.rb.property scopes with_property doesn't find any properties with an unknown name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:2\"}}","rspec.Product scopes at ./spec/models/spree/product/scopes_spec.rb.property scopes with_property finds by a property's name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1\"}}","rspec.Product scopes at ./spec/models/spree/product/scopes_spec.rb.property scopes with_property finds by a property.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:3\"}}","rspec.Product scopes at ./spec/models/spree/product/scopes_spec.rb.property scopes with_property finds by an id.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:4\"}}","rspec.Product scopes at ./spec/models/spree/product/scopes_spec.rb.property scopes with_property_value cannot find by an unknown property's name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:2\"}}","rspec.Product scopes at ./spec/models/spree/product/scopes_spec.rb.property scopes with_property_value cannot find with a name by an incorrect value.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:3\"}}","rspec.Product scopes at ./spec/models/spree/product/scopes_spec.rb.property scopes with_property_value cannot find with a property by an incorrect value.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:5\"}}","rspec.Product scopes at ./spec/models/spree/product/scopes_spec.rb.property scopes with_property_value cannot find with an invalid id.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:7\"}}","rspec.Product scopes at ./spec/models/spree/product/scopes_spec.rb.property scopes with_property_value cannot find with an invalid value.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:8\"}}","rspec.Product scopes at ./spec/models/spree/product/scopes_spec.rb.property scopes with_property_value finds by a property's name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1\"}}","rspec.Product scopes at ./spec/models/spree/product/scopes_spec.rb.property scopes with_property_value finds by a property.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:4\"}}","rspec.Product scopes at ./spec/models/spree/product/scopes_spec.rb.property scopes with_property_value finds by an id with a value.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:6\"}}","rspec.Product scopes at ./spec/models/spree/product/scopes_spec.rb.property scopes with_property_values cannot find with an invalid property name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3:2\"}}","rspec.Product scopes at ./spec/models/spree/product/scopes_spec.rb.property scopes with_property_values cannot find with invalid property values.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3:3\"}}","rspec.Product scopes at ./spec/models/spree/product/scopes_spec.rb.property scopes with_property_values finds by property values.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3:1\"}}","rspec.Spree at ./spec/lib/spree/core_spec.rb..admin_user_class when admin_user_class is a Class instance raises an error.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","rspec.Spree at ./spec/lib/spree/core_spec.rb..admin_user_class when admin_user_class is a String instance returns the admin_user_class constant.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:4:1\"}}","rspec.Spree at ./spec/lib/spree/core_spec.rb..admin_user_class when admin_user_class is a Symbol instance returns the admin_user_class constant.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:1\"}}","rspec.Spree at ./spec/lib/spree/core_spec.rb..admin_user_class when admin_user_class is nil fallbacks to user_class.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","rspec.Spree at ./spec/lib/spree/core_spec.rb..admin_user_class when constantize is false returns the admin_user_class as a String.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:5:1\"}}","rspec.Spree at ./spec/lib/spree/core_spec.rb..private_storage_service_name when private_storage_service_name is a String instance returns the private_storage_service_name as a symbol.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","rspec.Spree at ./spec/lib/spree/core_spec.rb..private_storage_service_name when private_storage_service_name is a Symbol instance returns the private_storage_service_name as a symbol.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","rspec.Spree at ./spec/lib/spree/core_spec.rb..private_storage_service_name when private_storage_service_name is set to nil returns the private_storage_service_name as the default service.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3:1\"}}","rspec.Spree at ./spec/lib/spree/core_spec.rb..searcher_class when constantize is false returns the searcher_class as a String.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:4:1\"}}","rspec.Spree at ./spec/lib/spree/core_spec.rb..searcher_class when searcher_class is a Class instance raises an error.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1\"}}","rspec.Spree at ./spec/lib/spree/core_spec.rb..searcher_class when searcher_class is a String instance returns the searcher_class constant.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3:1\"}}","rspec.Spree at ./spec/lib/spree/core_spec.rb..searcher_class when searcher_class is a Symbol instance returns the searcher_class constant.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1\"}}","rspec.Spree at ./spec/lib/spree/core_spec.rb..user_class when constantize is false returns the user_class as a String.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1\"}}","rspec.Spree at ./spec/lib/spree/core_spec.rb..user_class when user_class is a Class instance raises an error.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","rspec.Spree at ./spec/lib/spree/core_spec.rb..user_class when user_class is a String instance returns the user_class constant.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","rspec.Spree at ./spec/lib/spree/core_spec.rb..user_class when user_class is a Symbol instance returns the user_class constant.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","rspec.Spree environment accessors at ./spec/lib/spree/core_environment_spec.rb.getter methods provides access to adjusters.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","rspec.Spree environment accessors at ./spec/lib/spree/core_environment_spec.rb.getter methods provides access to analytics.events.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:16\"}}","rspec.Spree environment accessors at ./spec/lib/spree/core_environment_spec.rb.getter methods provides access to analytics.handlers.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:17\"}}","rspec.Spree environment accessors at ./spec/lib/spree/core_environment_spec.rb.getter methods provides access to calculators.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree environment accessors at ./spec/lib/spree/core_environment_spec.rb.getter methods provides access to data_feed_types.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8\"}}","rspec.Spree environment accessors at ./spec/lib/spree/core_environment_spec.rb.getter methods provides access to export_types.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:9\"}}","rspec.Spree environment accessors at ./spec/lib/spree/core_environment_spec.rb.getter methods provides access to import_types.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:10\"}}","rspec.Spree environment accessors at ./spec/lib/spree/core_environment_spec.rb.getter methods provides access to integrations.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:18\"}}","rspec.Spree environment accessors at ./spec/lib/spree/core_environment_spec.rb.getter methods provides access to line_item_comparison_hooks.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7\"}}","rspec.Spree environment accessors at ./spec/lib/spree/core_environment_spec.rb.getter methods provides access to metafields.enabled_resources.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:15\"}}","rspec.Spree environment accessors at ./spec/lib/spree/core_environment_spec.rb.getter methods provides access to metafields.types.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:14\"}}","rspec.Spree environment accessors at ./spec/lib/spree/core_environment_spec.rb.getter methods provides access to payment_methods.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","rspec.Spree environment accessors at ./spec/lib/spree/core_environment_spec.rb.getter methods provides access to promotions.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","rspec.Spree environment accessors at ./spec/lib/spree/core_environment_spec.rb.getter methods provides access to reports.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:12\"}}","rspec.Spree environment accessors at ./spec/lib/spree/core_environment_spec.rb.getter methods provides access to stock_splitters.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","rspec.Spree environment accessors at ./spec/lib/spree/core_environment_spec.rb.getter methods provides access to taxon_rules.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:11\"}}","rspec.Spree environment accessors at ./spec/lib/spree/core_environment_spec.rb.getter methods provides access to translatable_resources.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:13\"}}","rspec.Spree environment accessors at ./spec/lib/spree/core_environment_spec.rb.getter methods provides access to validators.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","rspec.Spree environment accessors at ./spec/lib/spree/core_environment_spec.rb.modifying nested values allows modifying calculators.shipping_methods.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","rspec.Spree environment accessors at ./spec/lib/spree/core_environment_spec.rb.modifying nested values allows modifying promotions.rules.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2\"}}","rspec.Spree environment accessors at ./spec/lib/spree/core_environment_spec.rb.nested accessors allows access to calculators.shipping_methods.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","rspec.Spree environment accessors at ./spec/lib/spree/core_environment_spec.rb.nested accessors allows access to calculators.tax_rates.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","rspec.Spree environment accessors at ./spec/lib/spree/core_environment_spec.rb.nested accessors allows access to promotions.actions.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4\"}}","rspec.Spree environment accessors at ./spec/lib/spree/core_environment_spec.rb.nested accessors allows access to promotions.rules.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3\"}}","rspec.Spree environment accessors at ./spec/lib/spree/core_environment_spec.rb.nested accessors allows access to validators.addresses.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:5\"}}","rspec.Spree environment accessors at ./spec/lib/spree/core_environment_spec.rb.setter methods allows setting payment_methods.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.Spree environment accessors at ./spec/lib/spree/core_environment_spec.rb.setter methods allows setting reports.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3\"}}","rspec.Spree environment accessors at ./spec/lib/spree/core_environment_spec.rb.setter methods allows setting stock_splitters.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","rspec.Spree module dependency accessors at ./spec/models/spree/app_dependencies_spec.rb.Spree. does not respond to non-dependency methods.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:1:3\"}}","rspec.Spree module dependency accessors at ./spec/models/spree/app_dependencies_spec.rb.Spree. responds to dependency methods.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:1:2\"}}","rspec.Spree module dependency accessors at ./spec/models/spree/app_dependencies_spec.rb.Spree. returns the resolved class.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:1:1\"}}","rspec.Spree module dependency accessors at ./spec/models/spree/app_dependencies_spec.rb.Spree.= returns the new class via Spree module.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:2:2\"}}","rspec.Spree module dependency accessors at ./spec/models/spree/app_dependencies_spec.rb.Spree.= sets the dependency via Spree module.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:2:1\"}}","rspec.Spree module dependency accessors at ./spec/models/spree/app_dependencies_spec.rb.Spree.= tracks override source correctly (not internal routing code).{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:2:3\"}}","rspec.Spree::Ability at ./spec/models/spree/ability_spec.rb.#abilities_to_register adds the ability to the list of abilities.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.Spree::Ability at ./spec/models/spree/ability_spec.rb.#abilities_to_register applies the registered abilities permissions.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","rspec.Spree::Ability at ./spec/models/spree/ability_spec.rb.as Guest User for Address (IDOR vulnerability prevention) with non-persisted guest user cannot destroy guest addresses with nil user_id.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:14:1:4\"}}","rspec.Spree::Ability at ./spec/models/spree/ability_spec.rb.as Guest User for Address (IDOR vulnerability prevention) with non-persisted guest user cannot edit guest addresses with nil user_id.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:14:1:2\"}}","rspec.Spree::Ability at ./spec/models/spree/ability_spec.rb.as Guest User for Address (IDOR vulnerability prevention) with non-persisted guest user cannot manage any address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:14:1:5\"}}","rspec.Spree::Ability at ./spec/models/spree/ability_spec.rb.as Guest User for Address (IDOR vulnerability prevention) with non-persisted guest user cannot read guest addresses with nil user_id.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:14:1:1\"}}","rspec.Spree::Ability at ./spec/models/spree/ability_spec.rb.as Guest User for Address (IDOR vulnerability prevention) with non-persisted guest user cannot update guest addresses with nil user_id.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:14:1:3\"}}","rspec.Spree::Ability at ./spec/models/spree/ability_spec.rb.as Guest User for Address (IDOR vulnerability prevention) with persisted user can manage own address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:14:2:1\"}}","rspec.Spree::Ability at ./spec/models/spree/ability_spec.rb.as Guest User for Address (IDOR vulnerability prevention) with persisted user cannot manage guest addresses.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:14:2:2\"}}","rspec.Spree::Ability at ./spec/models/spree/ability_spec.rb.as Guest User for Address (IDOR vulnerability prevention) with persisted user cannot manage other user addresses.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:14:2:3\"}}","rspec.Spree::Ability at ./spec/models/spree/ability_spec.rb.as Guest User for Country requested by any user behaves like read only should allow index.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:1:1:3\"}}","rspec.Spree::Ability at ./spec/models/spree/ability_spec.rb.as Guest User for Country requested by any user behaves like read only should not allow create.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:1:1:1\"}}","rspec.Spree::Ability at ./spec/models/spree/ability_spec.rb.as Guest User for Country requested by any user behaves like read only should not allow update.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:1:1:2\"}}","rspec.Spree::Ability at ./spec/models/spree/ability_spec.rb.as Guest User for OptionType requested by any user behaves like read only should allow index.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1:1:3\"}}","rspec.Spree::Ability at ./spec/models/spree/ability_spec.rb.as Guest User for OptionType requested by any user behaves like read only should not allow create.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1:1:1\"}}","rspec.Spree::Ability at ./spec/models/spree/ability_spec.rb.as Guest User for OptionType requested by any user behaves like read only should not allow update.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1:1:2\"}}","rspec.Spree::Ability at ./spec/models/spree/ability_spec.rb.as Guest User for OptionValue requested by any user behaves like read only should allow index.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3:1:1:3\"}}","rspec.Spree::Ability at ./spec/models/spree/ability_spec.rb.as Guest User for OptionValue requested by any user behaves like read only should not allow create.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3:1:1:1\"}}","rspec.Spree::Ability at ./spec/models/spree/ability_spec.rb.as Guest User for OptionValue requested by any user behaves like read only should not allow update.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3:1:1:2\"}}","rspec.Spree::Ability at ./spec/models/spree/ability_spec.rb.as Guest User for Order requested by other user behaves like create only should allow create.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:4:2:1:1\"}}","rspec.Spree::Ability at ./spec/models/spree/ability_spec.rb.as Guest User for Order requested by other user behaves like create only should not allow read.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:4:2:1:2\"}}","rspec.Spree::Ability at ./spec/models/spree/ability_spec.rb.as Guest User for Order requested by other user behaves like create only should not allow update.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:4:2:1:3\"}}","rspec.Spree::Ability at ./spec/models/spree/ability_spec.rb.as Guest User for Order requested by same user behaves like access granted should allow create.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:4:1:1:2\"}}","rspec.Spree::Ability at ./spec/models/spree/ability_spec.rb.as Guest User for Order requested by same user behaves like access granted should allow show.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:4:1:1:1\"}}","rspec.Spree::Ability at ./spec/models/spree/ability_spec.rb.as Guest User for Order requested by same user behaves like access granted should allow update.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:4:1:1:3\"}}","rspec.Spree::Ability at ./spec/models/spree/ability_spec.rb.as Guest User for Order requested by same user behaves like no index allowed should not allow index.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:4:1:2:1\"}}","rspec.Spree::Ability at ./spec/models/spree/ability_spec.rb.as Guest User for Order requested with improper token behaves like create only should allow create.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:4:4:1:1\"}}","rspec.Spree::Ability at ./spec/models/spree/ability_spec.rb.as Guest User for Order requested with improper token behaves like create only should not allow read.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:4:4:1:2\"}}","rspec.Spree::Ability at ./spec/models/spree/ability_spec.rb.as Guest User for Order requested with improper token behaves like create only should not allow update.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:4:4:1:3\"}}","rspec.Spree::Ability at ./spec/models/spree/ability_spec.rb.as Guest User for Order requested with proper token behaves like access granted should allow create.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:4:3:1:2\"}}","rspec.Spree::Ability at ./spec/models/spree/ability_spec.rb.as Guest User for Order requested with proper token behaves like access granted should allow show.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:4:3:1:1\"}}","rspec.Spree::Ability at ./spec/models/spree/ability_spec.rb.as Guest User for Order requested with proper token behaves like access granted should allow update.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:4:3:1:3\"}}","rspec.Spree::Ability at ./spec/models/spree/ability_spec.rb.as Guest User for Order requested with proper token behaves like no index allowed should not allow index.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:4:3:2:1\"}}","rspec.Spree::Ability at ./spec/models/spree/ability_spec.rb.as Guest User for Product requested by any user behaves like read only should allow index.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:5:1:1:3\"}}","rspec.Spree::Ability at ./spec/models/spree/ability_spec.rb.as Guest User for Product requested by any user behaves like read only should not allow create.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:5:1:1:1\"}}","rspec.Spree::Ability at ./spec/models/spree/ability_spec.rb.as Guest User for Product requested by any user behaves like read only should not allow update.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:5:1:1:2\"}}","rspec.Spree::Ability at ./spec/models/spree/ability_spec.rb.as Guest User for ProductProperty requested by any user behaves like read only should allow index.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:6:1:1:3\"}}","rspec.Spree::Ability at ./spec/models/spree/ability_spec.rb.as Guest User for ProductProperty requested by any user behaves like read only should not allow create.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:6:1:1:1\"}}","rspec.Spree::Ability at ./spec/models/spree/ability_spec.rb.as Guest User for ProductProperty requested by any user behaves like read only should not allow update.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:6:1:1:2\"}}","rspec.Spree::Ability at ./spec/models/spree/ability_spec.rb.as Guest User for Property requested by any user behaves like read only should allow index.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:7:1:1:3\"}}","rspec.Spree::Ability at ./spec/models/spree/ability_spec.rb.as Guest User for Property requested by any user behaves like read only should not allow create.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:7:1:1:1\"}}","rspec.Spree::Ability at ./spec/models/spree/ability_spec.rb.as Guest User for Property requested by any user behaves like read only should not allow update.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:7:1:1:2\"}}","rspec.Spree::Ability at ./spec/models/spree/ability_spec.rb.as Guest User for State requested by any user behaves like read only should allow index.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:8:1:1:3\"}}","rspec.Spree::Ability at ./spec/models/spree/ability_spec.rb.as Guest User for State requested by any user behaves like read only should not allow create.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:8:1:1:1\"}}","rspec.Spree::Ability at ./spec/models/spree/ability_spec.rb.as Guest User for State requested by any user behaves like read only should not allow update.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:8:1:1:2\"}}","rspec.Spree::Ability at ./spec/models/spree/ability_spec.rb.as Guest User for Taxonomy requested by any user behaves like read only should allow index.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:10:1:1:3\"}}","rspec.Spree::Ability at ./spec/models/spree/ability_spec.rb.as Guest User for Taxonomy requested by any user behaves like read only should not allow create.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:10:1:1:1\"}}","rspec.Spree::Ability at ./spec/models/spree/ability_spec.rb.as Guest User for Taxonomy requested by any user behaves like read only should not allow update.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:10:1:1:2\"}}","rspec.Spree::Ability at ./spec/models/spree/ability_spec.rb.as Guest User for Taxons requested by any user behaves like read only should allow index.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:9:1:1:3\"}}","rspec.Spree::Ability at ./spec/models/spree/ability_spec.rb.as Guest User for Taxons requested by any user behaves like read only should not allow create.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:9:1:1:1\"}}","rspec.Spree::Ability at ./spec/models/spree/ability_spec.rb.as Guest User for Taxons requested by any user behaves like read only should not allow update.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:9:1:1:2\"}}","rspec.Spree::Ability at ./spec/models/spree/ability_spec.rb.as Guest User for User requested by other user behaves like create only should allow create.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:11:2:1:1\"}}","rspec.Spree::Ability at ./spec/models/spree/ability_spec.rb.as Guest User for User requested by other user behaves like create only should not allow read.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:11:2:1:2\"}}","rspec.Spree::Ability at ./spec/models/spree/ability_spec.rb.as Guest User for User requested by other user behaves like create only should not allow update.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:11:2:1:3\"}}","rspec.Spree::Ability at ./spec/models/spree/ability_spec.rb.as Guest User for User requested by same user behaves like access granted should allow create.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:11:1:1:2\"}}","rspec.Spree::Ability at ./spec/models/spree/ability_spec.rb.as Guest User for User requested by same user behaves like access granted should allow show.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:11:1:1:1\"}}","rspec.Spree::Ability at ./spec/models/spree/ability_spec.rb.as Guest User for User requested by same user behaves like access granted should allow update.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:11:1:1:3\"}}","rspec.Spree::Ability at ./spec/models/spree/ability_spec.rb.as Guest User for User requested by same user behaves like no index allowed should not allow index.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:11:1:2:1\"}}","rspec.Spree::Ability at ./spec/models/spree/ability_spec.rb.as Guest User for Variant requested by any user behaves like read only should allow index.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:12:1:1:3\"}}","rspec.Spree::Ability at ./spec/models/spree/ability_spec.rb.as Guest User for Variant requested by any user behaves like read only should not allow create.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:12:1:1:1\"}}","rspec.Spree::Ability at ./spec/models/spree/ability_spec.rb.as Guest User for Variant requested by any user behaves like read only should not allow update.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:12:1:1:2\"}}","rspec.Spree::Ability at ./spec/models/spree/ability_spec.rb.as Guest User for Zone requested by any user behaves like read only should allow index.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:13:1:1:3\"}}","rspec.Spree::Ability at ./spec/models/spree/ability_spec.rb.as Guest User for Zone requested by any user behaves like read only should not allow create.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:13:1:1:1\"}}","rspec.Spree::Ability at ./spec/models/spree/ability_spec.rb.as Guest User for Zone requested by any user behaves like read only should not allow update.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:13:1:1:2\"}}","rspec.Spree::Ability at ./spec/models/spree/ability_spec.rb.for admin protected resources with admin user admin user role is able to admin.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1:1\"}}","rspec.Spree::Ability at ./spec/models/spree/ability_spec.rb.for admin protected resources with customer is not able to admin.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3:1\"}}","rspec.Spree::Ability at ./spec/models/spree/ability_spec.rb.for admin protected resources with fakedispatch user is able to admin on the order and shipment pages.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1\"}}","rspec.Spree::Ability at ./spec/models/spree/ability_spec.rb.for general resource with admin user behaves like access granted should allow create.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1:2\"}}","rspec.Spree::Ability at ./spec/models/spree/ability_spec.rb.for general resource with admin user behaves like access granted should allow show.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1:1\"}}","rspec.Spree::Ability at ./spec/models/spree/ability_spec.rb.for general resource with admin user behaves like access granted should allow update.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1:3\"}}","rspec.Spree::Ability at ./spec/models/spree/ability_spec.rb.for general resource with admin user behaves like index allowed should allow index.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:2:1\"}}","rspec.Spree::Ability at ./spec/models/spree/ability_spec.rb.for general resource with customer behaves like access denied should not allow create.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1:2\"}}","rspec.Spree::Ability at ./spec/models/spree/ability_spec.rb.for general resource with customer behaves like access denied should not allow read.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1:1\"}}","rspec.Spree::Ability at ./spec/models/spree/ability_spec.rb.for general resource with customer behaves like access denied should not allow update.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1:3\"}}","rspec.Spree::Ability at ./spec/models/spree/ability_spec.rb.for general resource with customer behaves like no index allowed should not allow index.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:2:1\"}}","rspec.Spree::Ability at ./spec/models/spree/ability_spec.rb.register_ability adds the ability to the list of abilties.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::Ability at ./spec/models/spree/ability_spec.rb.register_ability applies the registered abilities permissions.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","rspec.Spree::Account::Addresses::Create at ./spec/services/spree/account/addresses/create_spec.rb.#call with invalid params returns errors.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","rspec.Spree::Account::Addresses::Create at ./spec/services/spree/account/addresses/create_spec.rb.#call with valid params creates address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","rspec.Spree::Account::Addresses::Create at ./spec/services/spree/account/addresses/create_spec.rb.#call with valid params user default address when created address is first user address assigns created address as default user bill address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:1:1\"}}","rspec.Spree::Account::Addresses::Create at ./spec/services/spree/account/addresses/create_spec.rb.#call with valid params user default address when created address is first user address assigns created address as default user ship address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:1:2\"}}","rspec.Spree::Account::Addresses::Create at ./spec/services/spree/account/addresses/create_spec.rb.#call with valid params user default address when user has some address already with default bill and ship address does not assign created address as default user bill address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:2:1:1\"}}","rspec.Spree::Account::Addresses::Create at ./spec/services/spree/account/addresses/create_spec.rb.#call with valid params user default address when user has some address already with default bill and ship address does not assign created address as default user ship address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:2:1:2\"}}","rspec.Spree::Account::Addresses::Create at ./spec/services/spree/account/addresses/create_spec.rb.#call with valid params user default address when user has some address already without default bill and ship address does not assign created address as default user bill address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:2:2:1\"}}","rspec.Spree::Account::Addresses::Create at ./spec/services/spree/account/addresses/create_spec.rb.#call with valid params user default address when user has some address already without default bill and ship address does not assign created address as default user ship address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:2:2:2\"}}","rspec.Spree::Account::Addresses::Create at ./spec/services/spree/account/addresses/create_spec.rb.#call with valid params when default billing is passed updates user's bill address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:5:1\"}}","rspec.Spree::Account::Addresses::Create at ./spec/services/spree/account/addresses/create_spec.rb.#call with valid params when default shipping is passed updates user's ship address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:6:1\"}}","rspec.Spree::Account::Addresses::Create at ./spec/services/spree/account/addresses/create_spec.rb.#call with valid params when order is passed assigns a new ship address to the order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:4:1\"}}","rspec.Spree::Account::Addresses::Create at ./spec/services/spree/account/addresses/create_spec.rb.#call with valid params when order is passed updates order to address state.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:4:2\"}}","rspec.Spree::Account::Addresses::Create at ./spec/services/spree/account/addresses/create_spec.rb.#call with valid params without user example at ./spec/services/spree/account/addresses/create_spec.rb:38.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","rspec.Spree::Account::Addresses::Update at ./spec/services/spree/account/addresses/update_spec.rb.#call with invalid params returns errors.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","rspec.Spree::Account::Addresses::Update at ./spec/services/spree/account/addresses/update_spec.rb.#call with valid params creates address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","rspec.Spree::Account::Create at ./spec/services/spree/account/create_spec.rb.#call with valid params creates new user.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","rspec.Spree::Account::Create at ./spec/services/spree/account/create_spec.rb.#call with valid params creates user with given params.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2\"}}","rspec.Spree::Account::Create at ./spec/services/spree/account/create_spec.rb.#call with valid params result is successful.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3\"}}","rspec.Spree::Account::Update at ./spec/services/spree/account/update_spec.rb.#call with valid params when all params are given behaves like both default addresses changed changes both default bill address and ship address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:4:1\"}}","rspec.Spree::Account::Update at ./spec/services/spree/account/update_spec.rb.#call with valid params when all params are given behaves like successful response result is successful.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:2:1\"}}","rspec.Spree::Account::Update at ./spec/services/spree/account/update_spec.rb.#call with valid params when all params are given behaves like updated attributes updates user with given params.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:3:1\"}}","rspec.Spree::Account::Update at ./spec/services/spree/account/update_spec.rb.#call with valid params when all params are given behaves like user not created does not create new user.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1:1\"}}","rspec.Spree::Account::Update at ./spec/services/spree/account/update_spec.rb.#call with valid params when only address params are given behaves like both default addresses changed changes both default bill address and ship address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:4:1\"}}","rspec.Spree::Account::Update at ./spec/services/spree/account/update_spec.rb.#call with valid params when only address params are given behaves like successful response result is successful.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:2:1\"}}","rspec.Spree::Account::Update at ./spec/services/spree/account/update_spec.rb.#call with valid params when only address params are given behaves like updated attributes updates user with given params.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:3:1\"}}","rspec.Spree::Account::Update at ./spec/services/spree/account/update_spec.rb.#call with valid params when only address params are given behaves like user not created does not create new user.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1:1\"}}","rspec.Spree::Account::Update at ./spec/services/spree/account/update_spec.rb.#call with valid params when only address params are given when only bill address is given behaves like successful response result is successful.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:5:2:1\"}}","rspec.Spree::Account::Update at ./spec/services/spree/account/update_spec.rb.#call with valid params when only address params are given when only bill address is given behaves like updated attributes updates user with given params.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:5:3:1\"}}","rspec.Spree::Account::Update at ./spec/services/spree/account/update_spec.rb.#call with valid params when only address params are given when only bill address is given behaves like user not created does not create new user.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:5:1:1\"}}","rspec.Spree::Account::Update at ./spec/services/spree/account/update_spec.rb.#call with valid params when only address params are given when only bill address is given changes only user default bill address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:5:4\"}}","rspec.Spree::Account::Update at ./spec/services/spree/account/update_spec.rb.#call with valid params when only address params are given when only ship address is given behaves like successful response result is successful.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:6:2:1\"}}","rspec.Spree::Account::Update at ./spec/services/spree/account/update_spec.rb.#call with valid params when only address params are given when only ship address is given behaves like updated attributes updates user with given params.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:6:3:1\"}}","rspec.Spree::Account::Update at ./spec/services/spree/account/update_spec.rb.#call with valid params when only address params are given when only ship address is given behaves like user not created does not create new user.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:6:1:1\"}}","rspec.Spree::Account::Update at ./spec/services/spree/account/update_spec.rb.#call with valid params when only address params are given when only ship address is given changes only user default ship address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:6:4\"}}","rspec.Spree::Address at ./spec/models/spree/address_spec.rb.#== different addresses example at ./spec/models/spree/address_spec.rb:529.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:17:2:1\"}}","rspec.Spree::Address at ./spec/models/spree/address_spec.rb.#== same addresses example at ./spec/models/spree/address_spec.rb:523.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:17:1:1\"}}","rspec.Spree::Address at ./spec/models/spree/address_spec.rb.#clear_invalid_state_entities state not present and state_name both not present example at ./spec/models/spree/address_spec.rb:454.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:1:1\"}}","rspec.Spree::Address at ./spec/models/spree/address_spec.rb.#clear_invalid_state_entities state not present and state_name both not present example at ./spec/models/spree/address_spec.rb:455.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:1:2\"}}","rspec.Spree::Address at ./spec/models/spree/address_spec.rb.#clear_invalid_state_entities state not present and state_name present when country has no states and state is not required example at ./spec/models/spree/address_spec.rb:512.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:3:3:1\"}}","rspec.Spree::Address at ./spec/models/spree/address_spec.rb.#clear_invalid_state_entities state not present and state_name present when country has no states and state is not required example at ./spec/models/spree/address_spec.rb:513.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:3:3:2\"}}","rspec.Spree::Address at ./spec/models/spree/address_spec.rb.#clear_invalid_state_entities state not present and state_name present when country has no states and state is required example at ./spec/models/spree/address_spec.rb:491.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:3:1:1\"}}","rspec.Spree::Address at ./spec/models/spree/address_spec.rb.#clear_invalid_state_entities state not present and state_name present when country has no states and state is required example at ./spec/models/spree/address_spec.rb:492.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:3:1:2\"}}","rspec.Spree::Address at ./spec/models/spree/address_spec.rb.#clear_invalid_state_entities state not present and state_name present when country has states example at ./spec/models/spree/address_spec.rb:501.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:3:2:1\"}}","rspec.Spree::Address at ./spec/models/spree/address_spec.rb.#clear_invalid_state_entities state not present and state_name present when country has states example at ./spec/models/spree/address_spec.rb:502.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:3:2:2\"}}","rspec.Spree::Address at ./spec/models/spree/address_spec.rb.#clear_invalid_state_entities state_name not present and state present state belongs to a different country than to which address is associated example at ./spec/models/spree/address_spec.rb:467.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:2:1:1\"}}","rspec.Spree::Address at ./spec/models/spree/address_spec.rb.#clear_invalid_state_entities state_name not present and state present state belongs to a different country than to which address is associated example at ./spec/models/spree/address_spec.rb:468.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:2:1:2\"}}","rspec.Spree::Address at ./spec/models/spree/address_spec.rb.#clear_invalid_state_entities state_name not present and state present state belongs to the same country associated with address example at ./spec/models/spree/address_spec.rb:474.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:2:2:1\"}}","rspec.Spree::Address at ./spec/models/spree/address_spec.rb.#clear_invalid_state_entities state_name not present and state present state belongs to the same country associated with address example at ./spec/models/spree/address_spec.rb:475.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:2:2:2\"}}","rspec.Spree::Address at ./spec/models/spree/address_spec.rb.#clear_state example at ./spec/models/spree/address_spec.rb:425.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:1\"}}","rspec.Spree::Address at ./spec/models/spree/address_spec.rb.#clear_state example at ./spec/models/spree/address_spec.rb:426.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:2\"}}","rspec.Spree::Address at ./spec/models/spree/address_spec.rb.#clear_state_name example at ./spec/models/spree/address_spec.rb:434.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:1\"}}","rspec.Spree::Address at ./spec/models/spree/address_spec.rb.#clear_state_name example at ./spec/models/spree/address_spec.rb:435.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:2\"}}","rspec.Spree::Address at ./spec/models/spree/address_spec.rb.#full_name both first and last names are present example at ./spec/models/spree/address_spec.rb:366.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1:1\"}}","rspec.Spree::Address at ./spec/models/spree/address_spec.rb.#state_name_text state and state_name are present example at ./spec/models/spree/address_spec.rb:410.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:3:1\"}}","rspec.Spree::Address at ./spec/models/spree/address_spec.rb.#state_name_text state is blank example at ./spec/models/spree/address_spec.rb:403.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:2:1\"}}","rspec.Spree::Address at ./spec/models/spree/address_spec.rb.#state_name_text state_name is blank example at ./spec/models/spree/address_spec.rb:397.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:1:1\"}}","rspec.Spree::Address at ./spec/models/spree/address_spec.rb.#state_text both name and abbr is present example at ./spec/models/spree/address_spec.rb:381.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2:1\"}}","rspec.Spree::Address at ./spec/models/spree/address_spec.rb.#state_text only name is present example at ./spec/models/spree/address_spec.rb:388.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:3:1\"}}","rspec.Spree::Address at ./spec/models/spree/address_spec.rb.#state_text state is blank example at ./spec/models/spree/address_spec.rb:374.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1:1\"}}","rspec.Spree::Address at ./spec/models/spree/address_spec.rb.#to_s address contains HTML properly escapes HTML.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:2:1\"}}","rspec.Spree::Address at ./spec/models/spree/address_spec.rb.#to_s is displayed as string.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:1\"}}","rspec.Spree::Address at ./spec/models/spree/address_spec.rb.address validators runs through all configured validators during validation.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:20:1\"}}","rspec.Spree::Address at ./spec/models/spree/address_spec.rb.after create when user is assigned and it has default name should assign address name to the user.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1:1\"}}","rspec.Spree::Address at ./spec/models/spree/address_spec.rb.after_commit :async_geocode geocodes the address in the background.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","rspec.Spree::Address at ./spec/models/spree/address_spec.rb.after_commit :async_geocode when geocoding data didn't change skips geocoding.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","rspec.Spree::Address at ./spec/models/spree/address_spec.rb.aliased attributes first_name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","rspec.Spree::Address at ./spec/models/spree/address_spec.rb.aliased attributes last_name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2\"}}","rspec.Spree::Address at ./spec/models/spree/address_spec.rb.before_validation :remove_emoji_and_normalize normalizes the address and removes emojis.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.Spree::Address at ./spec/models/spree/address_spec.rb.behaves like metadata can query records by metadata properties.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:10\"}}","rspec.Spree::Address at ./spec/models/spree/address_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:10.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","rspec.Spree::Address at ./spec/models/spree/address_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:11.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","rspec.Spree::Address at ./spec/models/spree/address_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:4.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::Address at ./spec/models/spree/address_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:5.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","rspec.Spree::Address at ./spec/models/spree/address_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:7.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","rspec.Spree::Address at ./spec/models/spree/address_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:8.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","rspec.Spree::Address at ./spec/models/spree/address_spec.rb.behaves like metadata reads data as not symbolized keys.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8\"}}","rspec.Spree::Address at ./spec/models/spree/address_spec.rb.behaves like metadata reads data as symbolized keys.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7\"}}","rspec.Spree::Address at ./spec/models/spree/address_spec.rb.clone creates a copy of the address with the exception of the id, label, user_id, updated_at and created_at attributes.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","rspec.Spree::Address at ./spec/models/spree/address_spec.rb.default values with user sets user_id and first/last name from user.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1\"}}","rspec.Spree::Address at ./spec/models/spree/address_spec.rb.defines require_phone? helper method example at ./spec/models/spree/address_spec.rb:417.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:1\"}}","rspec.Spree::Address at ./spec/models/spree/address_spec.rb.delegated method Country #country_iso return proper country_iso_name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1:3:1\"}}","rspec.Spree::Address at ./spec/models/spree/address_spec.rb.delegated method Country #country_iso3 return proper country_iso_name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1:4:1\"}}","rspec.Spree::Address at ./spec/models/spree/address_spec.rb.delegated method Country #country_iso_name return proper country_iso_name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1:2:1\"}}","rspec.Spree::Address at ./spec/models/spree/address_spec.rb.delegated method Country #country_name return proper country_iso_name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1:1:1\"}}","rspec.Spree::Address at ./spec/models/spree/address_spec.rb.editable & destroy #assign_new_default_address_to_user when address is deleted behaves like default address when 2 addresses are available assigns last available address as default to bill and ship address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:10:1:2:1:1\"}}","rspec.Spree::Address at ./spec/models/spree/address_spec.rb.editable & destroy #assign_new_default_address_to_user when address is deleted behaves like default address when deleted address was not assigned to the user does not touch user.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:10:1:2:4:1\"}}","rspec.Spree::Address at ./spec/models/spree/address_spec.rb.editable & destroy #assign_new_default_address_to_user when address is deleted behaves like default address when deleted address was not default does not change user bill address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:10:1:2:5:1\"}}","rspec.Spree::Address at ./spec/models/spree/address_spec.rb.editable & destroy #assign_new_default_address_to_user when address is deleted behaves like default address when deleted address was not default does not change user ship address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:10:1:2:5:2\"}}","rspec.Spree::Address at ./spec/models/spree/address_spec.rb.editable & destroy #assign_new_default_address_to_user when address is deleted behaves like default address when the only address left is invalid does not raise errors and sets addresses to nil.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:10:1:2:2:1\"}}","rspec.Spree::Address at ./spec/models/spree/address_spec.rb.editable & destroy #assign_new_default_address_to_user when address is deleted behaves like default address when the only address left is soft-deleted does not raise errors and sets addresses to nil.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:10:1:2:3:1\"}}","rspec.Spree::Address at ./spec/models/spree/address_spec.rb.editable & destroy #assign_new_default_address_to_user when address is deleted is deleted.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:10:1:1\"}}","rspec.Spree::Address at ./spec/models/spree/address_spec.rb.editable & destroy #assign_new_default_address_to_user when address is soft deleted behaves like default address when 2 addresses are available assigns last available address as default to bill and ship address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:10:2:2:1:1\"}}","rspec.Spree::Address at ./spec/models/spree/address_spec.rb.editable & destroy #assign_new_default_address_to_user when address is soft deleted behaves like default address when deleted address was not assigned to the user does not touch user.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:10:2:2:4:1\"}}","rspec.Spree::Address at ./spec/models/spree/address_spec.rb.editable & destroy #assign_new_default_address_to_user when address is soft deleted behaves like default address when deleted address was not default does not change user bill address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:10:2:2:5:1\"}}","rspec.Spree::Address at ./spec/models/spree/address_spec.rb.editable & destroy #assign_new_default_address_to_user when address is soft deleted behaves like default address when deleted address was not default does not change user ship address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:10:2:2:5:2\"}}","rspec.Spree::Address at ./spec/models/spree/address_spec.rb.editable & destroy #assign_new_default_address_to_user when address is soft deleted behaves like default address when the only address left is invalid does not raise errors and sets addresses to nil.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:10:2:2:2:1\"}}","rspec.Spree::Address at ./spec/models/spree/address_spec.rb.editable & destroy #assign_new_default_address_to_user when address is soft deleted behaves like default address when the only address left is soft-deleted does not raise errors and sets addresses to nil.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:10:2:2:3:1\"}}","rspec.Spree::Address at ./spec/models/spree/address_spec.rb.editable & destroy #assign_new_default_address_to_user when address is soft deleted is soft deleted.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:10:2:1\"}}","rspec.Spree::Address at ./spec/models/spree/address_spec.rb.editable & destroy can be deleted when there is an incomplete associated order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:6\"}}","rspec.Spree::Address at ./spec/models/spree/address_spec.rb.editable & destroy can be deleted.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:3\"}}","rspec.Spree::Address at ./spec/models/spree/address_spec.rb.editable & destroy can't be deleted when there is an associated order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:5\"}}","rspec.Spree::Address at ./spec/models/spree/address_spec.rb.editable & destroy has required attributes.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:1\"}}","rspec.Spree::Address at ./spec/models/spree/address_spec.rb.editable & destroy is destroyed deleted timestamp.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:8\"}}","rspec.Spree::Address at ./spec/models/spree/address_spec.rb.editable & destroy is destroyed without saving used.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:7\"}}","rspec.Spree::Address at ./spec/models/spree/address_spec.rb.editable & destroy is editable.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:2\"}}","rspec.Spree::Address at ./spec/models/spree/address_spec.rb.editable & destroy isn't editable when there is an associated order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:4\"}}","rspec.Spree::Address at ./spec/models/spree/address_spec.rb.editable & destroy when saving user raises error does not set deleted_at attribute for address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:9:1\"}}","rspec.Spree::Address at ./spec/models/spree/address_spec.rb.require_phone? when quick_checkout is false and Spree::Config[:address_requires_phone] is false returns false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:21:2:2:1\"}}","rspec.Spree::Address at ./spec/models/spree/address_spec.rb.require_phone? when quick_checkout is false and Spree::Config[:address_requires_phone] is true returns true.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:21:2:1:1\"}}","rspec.Spree::Address at ./spec/models/spree/address_spec.rb.require_phone? when quick_checkout is true returns false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:21:1:1\"}}","rspec.Spree::Address at ./spec/models/spree/address_spec.rb.validation address_requires_state preference is false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:8\"}}","rspec.Spree::Address at ./spec/models/spree/address_spec.rb.validation both state and state_name are entered and country does contain the state.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:7\"}}","rspec.Spree::Address at ./spec/models/spree/address_spec.rb.validation both state and state_name are entered but country does not contain the state.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:6\"}}","rspec.Spree::Address at ./spec/models/spree/address_spec.rb.validation does not require phone.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:9\"}}","rspec.Spree::Address at ./spec/models/spree/address_spec.rb.validation errors when state_name is nil.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2\"}}","rspec.Spree::Address at ./spec/models/spree/address_spec.rb.validation full state name is in state_name and country does contain that state.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:3\"}}","rspec.Spree::Address at ./spec/models/spree/address_spec.rb.validation phone not required shows no errors when phone is blank.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:15:1\"}}","rspec.Spree::Address at ./spec/models/spree/address_spec.rb.validation requires firstname.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:12\"}}","rspec.Spree::Address at ./spec/models/spree/address_spec.rb.validation requires lastname.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:13\"}}","rspec.Spree::Address at ./spec/models/spree/address_spec.rb.validation requires zipcode.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:11\"}}","rspec.Spree::Address at ./spec/models/spree/address_spec.rb.validation state abbr is in state_name and country does contain that state.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:4\"}}","rspec.Spree::Address at ./spec/models/spree/address_spec.rb.validation state is entered but country does not contain that state.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:5\"}}","rspec.Spree::Address at ./spec/models/spree/address_spec.rb.validation state_name is not nil and country does not have any states.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1\"}}","rspec.Spree::Address at ./spec/models/spree/address_spec.rb.validation when phone is required validates presence of the phone.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:10:1\"}}","rspec.Spree::Address at ./spec/models/spree/address_spec.rb.validation zipcode not required shows no errors when phone is blank.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:16:1\"}}","rspec.Spree::Address at ./spec/models/spree/address_spec.rb.validation zipcode validation accepts a zip code with surrounding white space.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:14:2\"}}","rspec.Spree::Address at ./spec/models/spree/address_spec.rb.validation zipcode validation accepts an unformatted zip code.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:14:3\"}}","rspec.Spree::Address at ./spec/models/spree/address_spec.rb.validation zipcode validation does not validate country does not requires zipcode.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:14:4:3\"}}","rspec.Spree::Address at ./spec/models/spree/address_spec.rb.validation zipcode validation does not validate does not have a country.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:14:4:2\"}}","rspec.Spree::Address at ./spec/models/spree/address_spec.rb.validation zipcode validation does not validate does not have a supported country iso.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:14:4:7\"}}","rspec.Spree::Address at ./spec/models/spree/address_spec.rb.validation zipcode validation does not validate does not have a zipcode.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:14:4:5\"}}","rspec.Spree::Address at ./spec/models/spree/address_spec.rb.validation zipcode validation does not validate does not have an iso.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:14:4:4\"}}","rspec.Spree::Address at ./spec/models/spree/address_spec.rb.validation zipcode validation does not validate is for quick checkout.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:14:4:1\"}}","rspec.Spree::Address at ./spec/models/spree/address_spec.rb.validation zipcode validation does not validate zipcode is nil.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:14:4:6\"}}","rspec.Spree::Address at ./spec/models/spree/address_spec.rb.validation zipcode validation validates the zipcode.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:14:1\"}}","rspec.Spree::Addresses::Find at ./spec/finders/spree/addresses/find_spec.rb.#execute with exclude_quick_checkout filter set to falsey value returns all addresses without filtering.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","rspec.Spree::Addresses::Find at ./spec/finders/spree/addresses/find_spec.rb.#execute with exclude_quick_checkout filter set to truthy value returns only non-quick-checkout addresses.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","rspec.Spree::Addresses::Find at ./spec/finders/spree/addresses/find_spec.rb.#execute without any filter parameters returns all addresses without filtering.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","rspec.Spree::Addresses::GeocodeAddressJob at ./spec/jobs/spree/addresses/geocode_address_job_spec.rb.geocodes the address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","rspec.Spree::Addresses::GeocodeAddressJob at ./spec/jobs/spree/addresses/geocode_address_job_spec.rb.when the address cannot be geocoded handles the error.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.Spree::Addresses::PhoneValidator at ./spec/services/spree/addresses/phone_validator_spec.rb.#validate when no country is provided behaves like does not add a phone error does not add an error.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1:1\"}}","rspec.Spree::Addresses::PhoneValidator at ./spec/services/spree/addresses/phone_validator_spec.rb.#validate when no country iso is provided behaves like does not add a phone error does not add an error.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1:1\"}}","rspec.Spree::Addresses::PhoneValidator at ./spec/services/spree/addresses/phone_validator_spec.rb.#validate when no phone is provided behaves like does not add a phone error does not add an error.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","rspec.Spree::Addresses::PhoneValidator at ./spec/services/spree/addresses/phone_validator_spec.rb.#validate when phone is provided and country is US and phone is invalid and phone is from another country adds an error.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1:2:1:1\"}}","rspec.Spree::Addresses::PhoneValidator at ./spec/services/spree/addresses/phone_validator_spec.rb.#validate when phone is provided and country is US and phone is invalid because not matching US area code adds an error.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1:2:2:1\"}}","rspec.Spree::Addresses::PhoneValidator at ./spec/services/spree/addresses/phone_validator_spec.rb.#validate when phone is provided and country is US and phone is valid and has dashed and parenthesized and prefix behaves like does not add a phone error does not add an error.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1:1:9:1:1\"}}","rspec.Spree::Addresses::PhoneValidator at ./spec/services/spree/addresses/phone_validator_spec.rb.#validate when phone is provided and country is US and phone is valid and has dashed and parenthesized and prefix without plus sign behaves like does not add a phone error does not add an error.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1:1:10:1:1\"}}","rspec.Spree::Addresses::PhoneValidator at ./spec/services/spree/addresses/phone_validator_spec.rb.#validate when phone is provided and country is US and phone is valid and has dashed and parenthesized behaves like does not add a phone error does not add an error.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1:1:8:1:1\"}}","rspec.Spree::Addresses::PhoneValidator at ./spec/services/spree/addresses/phone_validator_spec.rb.#validate when phone is provided and country is US and phone is valid and has dashes and prefix after dash behaves like does not add a phone error does not add an error.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1:1:7:1:1\"}}","rspec.Spree::Addresses::PhoneValidator at ./spec/services/spree/addresses/phone_validator_spec.rb.#validate when phone is provided and country is US and phone is valid and has dashes and prefix behaves like does not add a phone error does not add an error.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1:1:5:1:1\"}}","rspec.Spree::Addresses::PhoneValidator at ./spec/services/spree/addresses/phone_validator_spec.rb.#validate when phone is provided and country is US and phone is valid and has dashes and prefix without plus sign behaves like does not add a phone error does not add an error.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1:1:6:1:1\"}}","rspec.Spree::Addresses::PhoneValidator at ./spec/services/spree/addresses/phone_validator_spec.rb.#validate when phone is provided and country is US and phone is valid and has dashes behaves like does not add a phone error does not add an error.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1:1:4:1:1\"}}","rspec.Spree::Addresses::PhoneValidator at ./spec/services/spree/addresses/phone_validator_spec.rb.#validate when phone is provided and country is US and phone is valid and has prefix with plus sign behaves like does not add a phone error does not add an error.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1:1:2:1:1\"}}","rspec.Spree::Addresses::PhoneValidator at ./spec/services/spree/addresses/phone_validator_spec.rb.#validate when phone is provided and country is US and phone is valid and has prefix without plus sign behaves like does not add a phone error does not add an error.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1:1:3:1:1\"}}","rspec.Spree::Addresses::PhoneValidator at ./spec/services/spree/addresses/phone_validator_spec.rb.#validate when phone is provided and country is US and phone is valid without prefix behaves like does not add a phone error does not add an error.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1:1:1:1:1\"}}","rspec.Spree::Addresses::PhoneValidator at ./spec/services/spree/addresses/phone_validator_spec.rb.#validate when phone is provided because country is not matching phone adds an error.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:2:1\"}}","rspec.Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb.#call with invalid params returns errors.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","rspec.Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb.#call with valid params when address is editable behaves like updating with same params when params are the same does not create new address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:5:1:2\"}}","rspec.Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb.#call with valid params when address is editable behaves like updating with same params when params are the same does not update address nor create when attribute changed from nil to blank string.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:5:1:4\"}}","rspec.Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb.#call with valid params when address is editable behaves like updating with same params when params are the same does not update address nor create when attribute changed only in case.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:5:1:5\"}}","rspec.Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb.#call with valid params when address is editable behaves like updating with same params when params are the same does not update address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:5:1:1\"}}","rspec.Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb.#call with valid params when address is editable behaves like updating with same params when params are the same returns success.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:5:1:3\"}}","rspec.Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb.#call with valid params when address is editable behaves like updating with same params when params are the same when setting the create_new_address_on_update param to true does not create new address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:5:1:6:1\"}}","rspec.Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb.#call with valid params when address is editable behaves like updating with same params when user only sets the address as default billing updates user's bill address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:5:3:1\"}}","rspec.Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb.#call with valid params when address is editable behaves like updating with same params when user only sets the address as default shipping updates user's ship address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:5:2:1\"}}","rspec.Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb.#call with valid params when address is editable updates address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","rspec.Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb.#call with valid params when address is editable when order is passed updates order to address state.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:4:1\"}}","rspec.Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb.#call with valid params when address is editable when the create_new_address_on_update param is set to true creates a new address and keeps the previous one.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:6:1\"}}","rspec.Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb.#call with valid params when address is editable when the create_new_address_on_update param is set to true with a user doesn't change the user's bill and ship addresses by default.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:6:2:1\"}}","rspec.Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb.#call with valid params when address is editable when the create_new_address_on_update param is set to true with a user when the default_billing param is set to true changes user's bill address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:6:2:2:1\"}}","rspec.Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb.#call with valid params when address is editable when the create_new_address_on_update param is set to true with a user when the default_shipping param is set to true changes user's ship address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:6:2:3:1\"}}","rspec.Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb.#call with valid params when address is editable when the create_new_address_on_update param is set to true with an order doesn't change the order addresses.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:6:3:1\"}}","rspec.Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb.#call with valid params when address is editable when user sets address as default billing updates user's bill address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:3:1\"}}","rspec.Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb.#call with valid params when address is editable when user sets address as default shipping updates user's ship address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:2:1\"}}","rspec.Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb.#call with valid params when address is uneditable behaves like updating with same params when params are the same does not create new address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:6:1:2\"}}","rspec.Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb.#call with valid params when address is uneditable behaves like updating with same params when params are the same does not update address nor create when attribute changed from nil to blank string.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:6:1:4\"}}","rspec.Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb.#call with valid params when address is uneditable behaves like updating with same params when params are the same does not update address nor create when attribute changed only in case.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:6:1:5\"}}","rspec.Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb.#call with valid params when address is uneditable behaves like updating with same params when params are the same does not update address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:6:1:1\"}}","rspec.Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb.#call with valid params when address is uneditable behaves like updating with same params when params are the same returns success.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:6:1:3\"}}","rspec.Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb.#call with valid params when address is uneditable behaves like updating with same params when params are the same when setting the create_new_address_on_update param to true does not create new address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:6:1:6:1\"}}","rspec.Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb.#call with valid params when address is uneditable behaves like updating with same params when user only sets the address as default billing updates user's bill address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:6:3:1\"}}","rspec.Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb.#call with valid params when address is uneditable behaves like updating with same params when user only sets the address as default shipping updates user's ship address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:6:2:1\"}}","rspec.Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb.#call with valid params when address is uneditable when order with deleted address is passed updates order bill address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:5:3\"}}","rspec.Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb.#call with valid params when address is uneditable when order with deleted address is passed updates order ship address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:5:2\"}}","rspec.Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb.#call with valid params when address is uneditable when order with deleted address is passed updates order to address state.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:5:1\"}}","rspec.Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb.#call with valid params when address is uneditable when the create_new_address_on_update param is set to true creates a new address and keeps the previous one.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:7:1\"}}","rspec.Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb.#call with valid params when address is uneditable when the create_new_address_on_update param is set to true with a user doesn't change the user's bill and ship addresses by default.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:7:2:1\"}}","rspec.Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb.#call with valid params when address is uneditable when the create_new_address_on_update param is set to true with a user when the default_billing param is set to true changes user's bill address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:7:2:2:1\"}}","rspec.Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb.#call with valid params when address is uneditable when the create_new_address_on_update param is set to true with a user when the default_shipping param is set to true changes user's ship address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:7:2:3:1\"}}","rspec.Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb.#call with valid params when address is uneditable when the create_new_address_on_update param is set to true with an order doesn't change the order addresses.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:7:3:1\"}}","rspec.Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb.#call with valid params when address is uneditable when there have been created same address with new params when is not deleted takes that address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1:1:1\"}}","rspec.Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb.#call with valid params when address is uneditable when there have been created same address with new params when its soft deleted creates new address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1:2:1\"}}","rspec.Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb.#call with valid params when address is uneditable when there is no such existing address with given params creates new address and soft-deletes the previous one.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:2:1\"}}","rspec.Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb.#call with valid params when address is uneditable when there is no such existing address with given params when the old address was set as default billing sets the new address as default billing.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:2:2:1\"}}","rspec.Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb.#call with valid params when address is uneditable when there is no such existing address with given params when the old address was set as default shipping sets the new address as default shipping.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:2:3:1\"}}","rspec.Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb.#call with valid params when address is uneditable when user sets address as default billing updates user's bill address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:4:1\"}}","rspec.Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb.#call with valid params when address is uneditable when user sets address as default shipping updates user's ship address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:3:1\"}}","rspec.Spree::Adjustable::Adjuster::Base at ./spec/models/spree/adjustable/adjuster/base_spec.rb.raises missing update method.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","rspec.Spree::Adjustable::Adjuster::Promotion at ./spec/models/spree/adjustable/adjuster/promotion_spec.rb.best promotion is always applied chooses the most recent promotion adjustment when amounts are equal.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","rspec.Spree::Adjustable::Adjuster::Promotion at ./spec/models/spree/adjustable/adjuster/promotion_spec.rb.best promotion is always applied competing promos do not update promo_total.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","rspec.Spree::Adjustable::Adjuster::Promotion at ./spec/models/spree/adjustable/adjuster/promotion_spec.rb.best promotion is always applied multiple adjustments and the best one is not eligible still makes the previous best eligible adjustment valid.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5:1\"}}","rspec.Spree::Adjustable::Adjuster::Promotion at ./spec/models/spree/adjustable/adjuster/promotion_spec.rb.best promotion is always applied only leaves one adjustment even if 2 have the same amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","rspec.Spree::Adjustable::Adjuster::Promotion at ./spec/models/spree/adjustable/adjuster/promotion_spec.rb.best promotion is always applied uses only the most valuable promotion.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","rspec.Spree::Adjustable::Adjuster::Promotion at ./spec/models/spree/adjustable/adjuster/promotion_spec.rb.best promotion is always applied when previously ineligible promotions become available picks the best line-item-level promo according to current eligibility.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:3\"}}","rspec.Spree::Adjustable::Adjuster::Promotion at ./spec/models/spree/adjustable/adjuster/promotion_spec.rb.best promotion is always applied when previously ineligible promotions become available picks the best line-item-level promo according to current eligibility.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:4\"}}","rspec.Spree::Adjustable::Adjuster::Promotion at ./spec/models/spree/adjustable/adjuster/promotion_spec.rb.best promotion is always applied when previously ineligible promotions become available picks the best order-level promo according to current eligibility.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1\"}}","rspec.Spree::Adjustable::Adjuster::Promotion at ./spec/models/spree/adjustable/adjuster/promotion_spec.rb.best promotion is always applied when previously ineligible promotions become available picks the best order-level promo according to current eligibility.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:2\"}}","rspec.Spree::Adjustable::Adjuster::Tax at ./spec/models/spree/adjustable/adjuster/tax_spec.rb.taxes with promotions tax excluded from price tax applies to line item.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","rspec.Spree::Adjustable::Adjuster::Tax at ./spec/models/spree/adjustable/adjuster/tax_spec.rb.taxes with promotions tax excluded from price tax linked to order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2\"}}","rspec.Spree::Adjustable::Adjuster::Tax at ./spec/models/spree/adjustable/adjuster/tax_spec.rb.taxes with promotions tax included in price tax has no bearing on final price.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","rspec.Spree::Adjustable::Adjuster::Tax at ./spec/models/spree/adjustable/adjuster/tax_spec.rb.taxes with promotions tax included in price tax linked to order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2\"}}","rspec.Spree::Adjustable::AdjustmentsUpdater at ./spec/models/spree/adjustable/adjustments_updater_spec.rb.#update nil does not raise an error.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","rspec.Spree::Adjustable::AdjustmentsUpdater at ./spec/models/spree/adjustable/adjustments_updater_spec.rb.#update non-persisted object does nothing.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","rspec.Spree::Adjustable::AdjustmentsUpdater at ./spec/models/spree/adjustable/adjustments_updater_spec.rb.#update persisted object updates all linked adjusters.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","rspec.Spree::Adjustable::AdjustmentsUpdater at ./spec/models/spree/adjustable/adjustments_updater_spec.rb.#update persisted object when there is no tax adjuster updates all linked adjusters without tax.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","rspec.Spree::Adjustment at ./spec/models/spree/adjustment_spec.rb.#amount= is expected to equal to localized number.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::Adjustment at ./spec/models/spree/adjustment_spec.rb.#cached_source returns nil when source_id is blank.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:4\"}}","rspec.Spree::Adjustment at ./spec/models/spree/adjustment_spec.rb.#cached_source returns nil when source_type is blank.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:3\"}}","rspec.Spree::Adjustment at ./spec/models/spree/adjustment_spec.rb.#cached_source returns the source.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1\"}}","rspec.Spree::Adjustment at ./spec/models/spree/adjustment_spec.rb.#cached_source uses Rails.cache.fetch to cache the source.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2\"}}","rspec.Spree::Adjustment at ./spec/models/spree/adjustment_spec.rb.#create & #destroy calls #update_adjustable_adjustment_total.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","rspec.Spree::Adjustment at ./spec/models/spree/adjustment_spec.rb.#currency returns the order currency.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1\"}}","rspec.Spree::Adjustment at ./spec/models/spree/adjustment_spec.rb.#display_amount shows the amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1\"}}","rspec.Spree::Adjustment at ./spec/models/spree/adjustment_spec.rb.#display_amount with currency set to JPY when adjustable is nil displays in the default currency.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:2:2:1\"}}","rspec.Spree::Adjustment at ./spec/models/spree/adjustment_spec.rb.#display_amount with currency set to JPY when adjustable is set to an order displays in JPY.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:2:1:1\"}}","rspec.Spree::Adjustment at ./spec/models/spree/adjustment_spec.rb.#save touches the adjustable.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","rspec.Spree::Adjustment at ./spec/models/spree/adjustment_spec.rb.#source_cache_key returns a cache key based on source type and id.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:1\"}}","rspec.Spree::Adjustment at ./spec/models/spree/adjustment_spec.rb.#update! when adjustment is closed does not update the adjustment.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1:1\"}}","rspec.Spree::Adjustment at ./spec/models/spree/adjustment_spec.rb.#update! when adjustment is open it is a promotion adjustment the promotion is eligible sets the adjustment eligible to true.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:2:2:1:1\"}}","rspec.Spree::Adjustment at ./spec/models/spree/adjustment_spec.rb.#update! when adjustment is open it is a promotion adjustment the promotion is not eligible sets the adjustment eligible to false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:2:2:2:1\"}}","rspec.Spree::Adjustment at ./spec/models/spree/adjustment_spec.rb.#update! when adjustment is open updates the amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:2:1\"}}","rspec.Spree::Adjustment at ./spec/models/spree/adjustment_spec.rb.#update! when adjustment is open when amount and eligible are the same does not update the adjustment.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:2:3:1\"}}","rspec.Spree::Adjustment at ./spec/models/spree/adjustment_spec.rb.adjustment state #closed? is false when adjustment state is open.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1:2\"}}","rspec.Spree::Adjustment at ./spec/models/spree/adjustment_spec.rb.adjustment state #closed? is true when adjustment state is closed.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1:1\"}}","rspec.Spree::Adjustment at ./spec/models/spree/adjustment_spec.rb.competing_promos scope a custom source_type has been added to competing_promos selects adjustments with registered source_types.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2:1\"}}","rspec.Spree::Adjustment at ./spec/models/spree/adjustment_spec.rb.competing_promos scope no custom source_types have been added to competing_promos selects promotion adjustments by default.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1:1\"}}","rspec.Spree::Adjustment at ./spec/models/spree/adjustment_spec.rb.non_tax scope select non-tax adjustments.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","rspec.Spree::Adjustment at ./spec/models/spree/adjustment_spec.rb.scopes .for_complete_order example at ./spec/models/spree/adjustment_spec.rb:30.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","rspec.Spree::Adjustment at ./spec/models/spree/adjustment_spec.rb.scopes .for_complete_order example at ./spec/models/spree/adjustment_spec.rb:31.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:2\"}}","rspec.Spree::Adjustment at ./spec/models/spree/adjustment_spec.rb.scopes .for_incomplete_order example at ./spec/models/spree/adjustment_spec.rb:42.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","rspec.Spree::Adjustment at ./spec/models/spree/adjustment_spec.rb.scopes .for_incomplete_order example at ./spec/models/spree/adjustment_spec.rb:43.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:2\"}}","rspec.Spree::Asset at ./spec/models/spree/asset_spec.rb.#product returns the product for the asset.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","rspec.Spree::Asset at ./spec/models/spree/asset_spec.rb..with_session_uploaded_assets_uuid returns assets with the given uuid.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","rspec.Spree::Asset at ./spec/models/spree/asset_spec.rb.behaves like lifecycle events lifecycle events asset.created publishes created event when record is created.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1:1\"}}","rspec.Spree::Asset at ./spec/models/spree/asset_spec.rb.behaves like lifecycle events lifecycle events asset.deleted publishes deleted event when record is deleted.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:3:1\"}}","rspec.Spree::Asset at ./spec/models/spree/asset_spec.rb.behaves like lifecycle events lifecycle events asset.updated publishes updated event when record is updated.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:2:1\"}}","rspec.Spree::Asset at ./spec/models/spree/asset_spec.rb.behaves like metadata can query records by metadata properties.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:10\"}}","rspec.Spree::Asset at ./spec/models/spree/asset_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:10.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","rspec.Spree::Asset at ./spec/models/spree/asset_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:11.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","rspec.Spree::Asset at ./spec/models/spree/asset_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:4.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::Asset at ./spec/models/spree/asset_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:5.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","rspec.Spree::Asset at ./spec/models/spree/asset_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:7.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","rspec.Spree::Asset at ./spec/models/spree/asset_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:8.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","rspec.Spree::Asset at ./spec/models/spree/asset_spec.rb.behaves like metadata reads data as not symbolized keys.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8\"}}","rspec.Spree::Asset at ./spec/models/spree/asset_spec.rb.behaves like metadata reads data as symbolized keys.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7\"}}","rspec.Spree::Asset at ./spec/models/spree/asset_spec.rb.delegated methods delegates :attached? to attachment.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2\"}}","rspec.Spree::Asset at ./spec/models/spree/asset_spec.rb.delegated methods delegates :blob to attachment.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:5\"}}","rspec.Spree::Asset at ./spec/models/spree/asset_spec.rb.delegated methods delegates :filename to attachment.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:6\"}}","rspec.Spree::Asset at ./spec/models/spree/asset_spec.rb.delegated methods delegates :key to attachment.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","rspec.Spree::Asset at ./spec/models/spree/asset_spec.rb.delegated methods delegates :variable? to attachment.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:4\"}}","rspec.Spree::Asset at ./spec/models/spree/asset_spec.rb.delegated methods delegates :variant to attachment.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3\"}}","rspec.Spree::Asset at ./spec/models/spree/asset_spec.rb.external URL #external_url returns nil if the external URL is blank.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2:2\"}}","rspec.Spree::Asset at ./spec/models/spree/asset_spec.rb.external URL #external_url returns the external URL.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2:1\"}}","rspec.Spree::Asset at ./spec/models/spree/asset_spec.rb.external URL #external_url= sets the external URL.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:3:1\"}}","rspec.Spree::Asset at ./spec/models/spree/asset_spec.rb.external URL .with_external_url returns assets with the given external URL.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1:1\"}}","rspec.Spree::Asset at ./spec/models/spree/asset_spec.rb.external URL .with_external_url returns no assets if the external URL is blank.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1:2\"}}","rspec.Spree::Asset at ./spec/models/spree/asset_spec.rb.named variants defines :large variant with correct options.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:5\"}}","rspec.Spree::Asset at ./spec/models/spree/asset_spec.rb.named variants defines :medium variant with correct options.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4\"}}","rspec.Spree::Asset at ./spec/models/spree/asset_spec.rb.named variants defines :mini variant with correct options.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","rspec.Spree::Asset at ./spec/models/spree/asset_spec.rb.named variants defines :og_image variant with correct options.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:7\"}}","rspec.Spree::Asset at ./spec/models/spree/asset_spec.rb.named variants defines :small variant with correct options.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3\"}}","rspec.Spree::Asset at ./spec/models/spree/asset_spec.rb.named variants defines :xlarge variant with correct options.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:6\"}}","rspec.Spree::Asset at ./spec/models/spree/asset_spec.rb.named variants defines preprocessed variants based on config.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","rspec.Spree::Base at ./spec/models/spree/base_spec.rb..json_api_columns example at ./spec/models/spree/base_spec.rb:60.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","rspec.Spree::Base at ./spec/models/spree/base_spec.rb..json_api_columns example at ./spec/models/spree/base_spec.rb:61.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3\"}}","rspec.Spree::Base at ./spec/models/spree/base_spec.rb..json_api_columns skips sensitive data.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","rspec.Spree::Base at ./spec/models/spree/base_spec.rb..json_api_permitted_attributes example at ./spec/models/spree/base_spec.rb:65.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","rspec.Spree::Base at ./spec/models/spree/base_spec.rb..json_api_type example at ./spec/models/spree/base_spec.rb:50.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.Spree::Base at ./spec/models/spree/base_spec.rb..json_api_type example at ./spec/models/spree/base_spec.rb:51.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","rspec.Spree::Base at ./spec/models/spree/base_spec.rb.AR overrides does not disable non-spree, Rails 5 models to validate their associated belongs_to model.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","rspec.Spree::Base at ./spec/models/spree/base_spec.rb.AR overrides does not override Rails 5 default belongs_to_required_by_default.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::BaseAnalyticsEventHandler at ./spec/models/spree/base_analytics_event_handler_spec.rb.#client raises NotImplementedError.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::BaseAnalyticsEventHandler at ./spec/models/spree/base_analytics_event_handler_spec.rb.#event_human_name returns nil for unsupported events.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2\"}}","rspec.Spree::BaseAnalyticsEventHandler at ./spec/models/spree/base_analytics_event_handler_spec.rb.#event_human_name returns the label for supported events.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","rspec.Spree::BaseAnalyticsEventHandler at ./spec/models/spree/base_analytics_event_handler_spec.rb.#handle_event raises NotImplementedError.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","rspec.Spree::BaseAnalyticsEventHandler at ./spec/models/spree/base_analytics_event_handler_spec.rb.#identity_hash when user is not present returns hash with nil user_id, visitor_id and session_id.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1\"}}","rspec.Spree::BaseAnalyticsEventHandler at ./spec/models/spree/base_analytics_event_handler_spec.rb.#identity_hash when user is present returns hash with user_id, visitor_id and session_id.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:1\"}}","rspec.Spree::BaseAnalyticsEventHandler at ./spec/models/spree/base_analytics_event_handler_spec.rb.#initialize sets user, session and request.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.Spree::BaseHelper at ./spec/helpers/base_helper_spec.rb.#display_price when there is no current order returns the price including default vat.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1:1\"}}","rspec.Spree::BaseHelper at ./spec/helpers/base_helper_spec.rb.#display_price when there is no current order with a default VAT returns the price adding the VAT.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1:2:1\"}}","rspec.Spree::BaseHelper at ./spec/helpers/base_helper_spec.rb.#display_price with an order that has a tax zone that matches a VAT returns the price adding the VAT.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2:2:1\"}}","rspec.Spree::BaseHelper at ./spec/helpers/base_helper_spec.rb.#display_price with an order that has a tax zone that matches no VAT returns the price excluding VAT.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2:1:1\"}}","rspec.Spree::BaseHelper at ./spec/helpers/base_helper_spec.rb.#spree_favicon_path when a store has its own favicon example at ./spec/helpers/base_helper_spec.rb:324.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1:1\"}}","rspec.Spree::BaseHelper at ./spec/helpers/base_helper_spec.rb.#spree_favicon_path when a store has no favicon example at ./spec/helpers/base_helper_spec.rb:331.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:2:1\"}}","rspec.Spree::BaseHelper at ./spec/helpers/base_helper_spec.rb.#spree_storefront_resource_url for Product URL example at ./spec/helpers/base_helper_spec.rb:56.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","rspec.Spree::BaseHelper at ./spec/helpers/base_helper_spec.rb.#spree_storefront_resource_url for Product URL for product with custom domain returns the product url.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:6:1\"}}","rspec.Spree::BaseHelper at ./spec/helpers/base_helper_spec.rb.#spree_storefront_resource_url for Product URL for product with relative option returns the product url.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:7:1\"}}","rspec.Spree::BaseHelper at ./spec/helpers/base_helper_spec.rb.#spree_storefront_resource_url for Product URL when a locale is passed example at ./spec/helpers/base_helper_spec.rb:63.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:2:1\"}}","rspec.Spree::BaseHelper at ./spec/helpers/base_helper_spec.rb.#spree_storefront_resource_url for Product URL when locale_param is present example at ./spec/helpers/base_helper_spec.rb:71.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:3:1\"}}","rspec.Spree::BaseHelper at ./spec/helpers/base_helper_spec.rb.#spree_storefront_resource_url for Product URL when preview_id is not present returns the product url.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:4:1\"}}","rspec.Spree::BaseHelper at ./spec/helpers/base_helper_spec.rb.#spree_storefront_resource_url for Product URL when preview_id is present returns the product preview url.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:5:1\"}}","rspec.Spree::BaseHelper at ./spec/helpers/base_helper_spec.rb.#spree_storefront_resource_url for Taxon URL example at ./spec/helpers/base_helper_spec.rb:102.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","rspec.Spree::BaseHelper at ./spec/helpers/base_helper_spec.rb.#spree_storefront_resource_url for Taxon URL when a locale is passed example at ./spec/helpers/base_helper_spec.rb:105.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:2:1\"}}","rspec.Spree::BaseHelper at ./spec/helpers/base_helper_spec.rb.#spree_storefront_resource_url for Taxon URL when locale_param is present example at ./spec/helpers/base_helper_spec.rb:113.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:3:1\"}}","rspec.Spree::BaseHelper at ./spec/helpers/base_helper_spec.rb.available_countries with checkout zone assigned to the store return only the countries defined by the checkout_zone_id.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","rspec.Spree::BaseHelper at ./spec/helpers/base_helper_spec.rb.available_countries with no checkout zone defined return complete list of countries.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","rspec.Spree::BaseHelper at ./spec/helpers/base_helper_spec.rb.defining custom image helpers does not raise errors when helper method called.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3\"}}","rspec.Spree::BaseHelper at ./spec/helpers/base_helper_spec.rb.defining custom image helpers does not raise errors when style exists.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","rspec.Spree::BaseHelper at ./spec/helpers/base_helper_spec.rb.defining custom image helpers raises NoMethodError when statement with name equal to style name called.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4\"}}","rspec.Spree::BaseHelper at ./spec/helpers/base_helper_spec.rb.defining custom image helpers raises NoMethodError when style is not exists.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","rspec.Spree::BaseHelper at ./spec/helpers/base_helper_spec.rb.link_to_tracking returns nothing when no shipping method.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3\"}}","rspec.Spree::BaseHelper at ./spec/helpers/base_helper_spec.rb.link_to_tracking returns nothing when no tracking.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:4\"}}","rspec.Spree::BaseHelper at ./spec/helpers/base_helper_spec.rb.link_to_tracking returns tracking link if available.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","rspec.Spree::BaseHelper at ./spec/helpers/base_helper_spec.rb.link_to_tracking returns tracking without link if link unavailable.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2\"}}","rspec.Spree::BaseHelper at ./spec/helpers/base_helper_spec.rb.pretty_date prints in a format.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","rspec.Spree::BaseHelper at ./spec/helpers/base_helper_spec.rb.pretty_date return empty string when nil is supplied.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2\"}}","rspec.Spree::BaseHelper at ./spec/helpers/base_helper_spec.rb.pretty_time prints in a format.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","rspec.Spree::BaseHelper at ./spec/helpers/base_helper_spec.rb.pretty_time return empty string when nil is supplied.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2\"}}","rspec.Spree::BaseHelper at ./spec/helpers/base_helper_spec.rb.spree_base_cache_key when try_spree_current_user defined when admin user returns base cache key.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:1:1\"}}","rspec.Spree::BaseHelper at ./spec/helpers/base_helper_spec.rb.spree_base_cache_key when try_spree_current_user defined when spree_current_user is nil returns base cache key.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:3:1\"}}","rspec.Spree::BaseHelper at ./spec/helpers/base_helper_spec.rb.spree_base_cache_key when try_spree_current_user defined when user without admin role returns base cache key.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:2:1\"}}","rspec.Spree::BaseHelper at ./spec/helpers/base_helper_spec.rb.spree_base_cache_key when try_spree_current_user is undefined returns base cache key.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1\"}}","rspec.Spree::CSV::CustomerPresenter at ./spec/presenters/spree/csv/customer_presenter_spec.rb.#call returns array with correct values.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::CSV::CustomerPresenter at ./spec/presenters/spree/csv/customer_presenter_spec.rb.#call when customer does not accept email marketing returns say_no for email marketing.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","rspec.Spree::CSV::CustomerPresenter at ./spec/presenters/spree/csv/customer_presenter_spec.rb.#call when customer has no address returns nil for address fields.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","rspec.Spree::CSV::CustomerPresenter at ./spec/presenters/spree/csv/customer_presenter_spec.rb.#call when customer has no orders returns zero for total orders and amount spent.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1\"}}","rspec.Spree::CSV::CustomerPresenter at ./spec/presenters/spree/csv/customer_presenter_spec.rb.HEADERS constant contains all expected headers.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.Spree::CSV::CustomerPresenter at ./spec/presenters/spree/csv/customer_presenter_spec.rb.metafields includes metafield values at the end of the array.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","rspec.Spree::CSV::CustomerPresenter at ./spec/presenters/spree/csv/customer_presenter_spec.rb.metafields when customer has no metafield value returns nil for metafield.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","rspec.Spree::CSV::GiftCardPresenter at ./spec/presenters/spree/csv/gift_card_presenter_spec.rb.#call returns the correct CSV data.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::CSV::GiftCardPresenter at ./spec/presenters/spree/csv/gift_card_presenter_spec.rb.#call when gift card has no expiration date returns nil for expires at.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","rspec.Spree::CSV::GiftCardPresenter at ./spec/presenters/spree/csv/gift_card_presenter_spec.rb.#call when gift card has no user returns nil for customer fields.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","rspec.Spree::CSV::GiftCardPresenter at ./spec/presenters/spree/csv/gift_card_presenter_spec.rb.HEADERS has the correct headers.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.Spree::CSV::GiftCardPresenter at ./spec/presenters/spree/csv/gift_card_presenter_spec.rb.metafields includes metafield values at the end of the array.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","rspec.Spree::CSV::GiftCardPresenter at ./spec/presenters/spree/csv/gift_card_presenter_spec.rb.metafields when gift card has no metafield value returns nil for metafield.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","rspec.Spree::CSV::NewsletterSubscriberPresenter at ./spec/presenters/spree/csv/newsletter_subscriber_presenter_spec.rb.#call returns array with correct values.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::CSV::NewsletterSubscriberPresenter at ./spec/presenters/spree/csv/newsletter_subscriber_presenter_spec.rb.#call when subscriber has no user returns nil for customer name and id.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","rspec.Spree::CSV::NewsletterSubscriberPresenter at ./spec/presenters/spree/csv/newsletter_subscriber_presenter_spec.rb.#call when subscriber is not verified returns say_no for verified and nil for verified_at.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","rspec.Spree::CSV::NewsletterSubscriberPresenter at ./spec/presenters/spree/csv/newsletter_subscriber_presenter_spec.rb.HEADERS constant contains all expected headers.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.Spree::CSV::NewsletterSubscriberPresenter at ./spec/presenters/spree/csv/newsletter_subscriber_presenter_spec.rb.metafields includes metafield values at the end of the array.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","rspec.Spree::CSV::NewsletterSubscriberPresenter at ./spec/presenters/spree/csv/newsletter_subscriber_presenter_spec.rb.metafields when subscriber has no metafield value returns nil for metafield.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","rspec.Spree::CSV::OrderLineItemPresenter at ./spec/presenters/spree/csv/order_line_items_presenter_spec.rb.#call returns array with correct values.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::CSV::OrderLineItemPresenter at ./spec/presenters/spree/csv/order_line_items_presenter_spec.rb.#call when index is not zero returns line item specific fields.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2\"}}","rspec.Spree::CSV::OrderLineItemPresenter at ./spec/presenters/spree/csv/order_line_items_presenter_spec.rb.#call when index is not zero returns nil for order-level fields.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","rspec.Spree::CSV::OrderLineItemPresenter at ./spec/presenters/spree/csv/order_line_items_presenter_spec.rb.#format_date formats date according to store timezone.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","rspec.Spree::CSV::OrderLineItemPresenter at ./spec/presenters/spree/csv/order_line_items_presenter_spec.rb.#format_date returns nil for blank date.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","rspec.Spree::CSV::OrderLineItemPresenter at ./spec/presenters/spree/csv/order_line_items_presenter_spec.rb.#taxon_dict returns empty array for nil taxon.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","rspec.Spree::CSV::OrderLineItemPresenter at ./spec/presenters/spree/csv/order_line_items_presenter_spec.rb.#taxon_dict splits taxon pretty name into array.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.Spree::CSV::OrderLineItemPresenter at ./spec/presenters/spree/csv/order_line_items_presenter_spec.rb.metafields when index is not zero does not include metafields.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1\"}}","rspec.Spree::CSV::OrderLineItemPresenter at ./spec/presenters/spree/csv/order_line_items_presenter_spec.rb.metafields when index is zero includes metafields at the end of the array.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1\"}}","rspec.Spree::CSV::ProductVariantPresenter at ./spec/presenters/spree/csv/product_variant_presenter_spec.rb.#call images host when default host is set returns images with default host.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1:1\"}}","rspec.Spree::CSV::ProductVariantPresenter at ./spec/presenters/spree/csv/product_variant_presenter_spec.rb.#call images host when there is no default host returns images with the store url.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:2:1\"}}","rspec.Spree::CSV::ProductVariantPresenter at ./spec/presenters/spree/csv/product_variant_presenter_spec.rb.#call images host when there is no default host when custom domain is set returns images with the custom domain.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:2:2:1\"}}","rspec.Spree::CSV::ProductVariantPresenter at ./spec/presenters/spree/csv/product_variant_presenter_spec.rb.#call returns array with correct values.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::CSV::ProductVariantPresenter at ./spec/presenters/spree/csv/product_variant_presenter_spec.rb.#call when index is not zero returns nil for product-level fields.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","rspec.Spree::CSV::ProductVariantPresenter at ./spec/presenters/spree/csv/product_variant_presenter_spec.rb.#call when index is not zero returns variant specific fields.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2\"}}","rspec.Spree::CSV::ProductVariantPresenter at ./spec/presenters/spree/csv/product_variant_presenter_spec.rb.#option_type returns nil for non-existent index.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","rspec.Spree::CSV::ProductVariantPresenter at ./spec/presenters/spree/csv/product_variant_presenter_spec.rb.#option_type returns option type at given index.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.Spree::CSV::ProductVariantPresenter at ./spec/presenters/spree/csv/product_variant_presenter_spec.rb.#option_value returns nil for option type without value.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","rspec.Spree::CSV::ProductVariantPresenter at ./spec/presenters/spree/csv/product_variant_presenter_spec.rb.#option_value returns option value presentation for given option type.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","rspec.Spree::CSV::ProductVariantPresenter at ./spec/presenters/spree/csv/product_variant_presenter_spec.rb.metafields when index is not zero does not include metafields.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1\"}}","rspec.Spree::CSV::ProductVariantPresenter at ./spec/presenters/spree/csv/product_variant_presenter_spec.rb.metafields when index is zero includes metafields at the end of the array.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1\"}}","rspec.Spree::CSV::ProductVariantPresenter at ./spec/presenters/spree/csv/product_variant_presenter_spec.rb.shipping_category when product has no shipping category explicitly set exports the assigned shipping category.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1\"}}","rspec.Spree::CSV::ProductVariantPresenter at ./spec/presenters/spree/csv/product_variant_presenter_spec.rb.shipping_category when product has shipping category exports shipping category name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:1\"}}","rspec.Spree::CalculatedAdjustments at ./spec/lib/calculated_adjustments_spec.rb.adds has_one :calculator relationship.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","rspec.Spree::Calculator at ./spec/models/spree/calculator_spec.rb.with computable and compute methods stubbed out with a Spree::LineItem calls compute_line_item.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","rspec.Spree::Calculator at ./spec/models/spree/calculator_spec.rb.with computable and compute methods stubbed out with a Spree::Order calls compute_order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","rspec.Spree::Calculator at ./spec/models/spree/calculator_spec.rb.with computable and compute methods stubbed out with a Spree::Shipment calls compute_shipment.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:1\"}}","rspec.Spree::Calculator at ./spec/models/spree/calculator_spec.rb.with computable and compute methods stubbed out with a arbitrary object calls the correct compute.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:4:1\"}}","rspec.Spree::Calculator at ./spec/models/spree/calculator_spec.rb.with computable with no stubbing with a Spree::LineItem raises NotImplementedError.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1:1\"}}","rspec.Spree::Calculator at ./spec/models/spree/calculator_spec.rb.with computable with no stubbing with a Spree::Order raises NotImplementedError.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:1\"}}","rspec.Spree::Calculator at ./spec/models/spree/calculator_spec.rb.with computable with no stubbing with a Spree::Shipment raises NotImplementedError.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:3:1\"}}","rspec.Spree::Calculator at ./spec/models/spree/calculator_spec.rb.with computable with no stubbing with a arbitrary object raises NotImplementedError.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:4:1\"}}","rspec.Spree::Calculator::DefaultTax at ./spec/models/spree/calculator/default_tax_spec.rb.#compute when given a shipment is 5% of 15.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1\"}}","rspec.Spree::Calculator::DefaultTax at ./spec/models/spree/calculator/default_tax_spec.rb.#compute when given a shipment takes discounts into consideration.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:2\"}}","rspec.Spree::Calculator::DefaultTax at ./spec/models/spree/calculator/default_tax_spec.rb.#compute when given an order when more than one item matches the tax category is equal to the sum of the item totals * rate.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:1\"}}","rspec.Spree::Calculator::DefaultTax at ./spec/models/spree/calculator/default_tax_spec.rb.#compute when given an order when no line items match the tax category is 0.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","rspec.Spree::Calculator::DefaultTax at ./spec/models/spree/calculator/default_tax_spec.rb.#compute when given an order when one item matches the tax category correctly rounds to within two decimal places example at ./spec/models/spree/calculator/default_tax_spec.rb:50.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:2:1\"}}","rspec.Spree::Calculator::DefaultTax at ./spec/models/spree/calculator/default_tax_spec.rb.#compute when given an order when one item matches the tax category is equal to the item total * rate.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","rspec.Spree::Calculator::DefaultTax at ./spec/models/spree/calculator/default_tax_spec.rb.#compute when given an order when tax is included in price will return the deducted amount from the totals.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:4:1\"}}","rspec.Spree::Calculator::DefaultTax at ./spec/models/spree/calculator/default_tax_spec.rb.#compute when tax is included in price when the variant matches the tax category is equal to the item's full price * rate.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1:2\"}}","rspec.Spree::Calculator::DefaultTax at ./spec/models/spree/calculator/default_tax_spec.rb.#compute when tax is included in price when the variant matches the tax category when line item is discounted is equal to the item's discounted total * rate.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1:1:1\"}}","rspec.Spree::Calculator::DefaultTax at ./spec/models/spree/calculator/default_tax_spec.rb.#compute when tax is not included in price when the line item is discounted is equal to the item's pre-tax total * rate.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1:1\"}}","rspec.Spree::Calculator::DefaultTax at ./spec/models/spree/calculator/default_tax_spec.rb.#compute when tax is not included in price when the variant matches the tax category is equal to the item pre-tax total * rate.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:2:1\"}}","rspec.Spree::Calculator::DefaultTax at ./spec/models/spree/calculator/default_tax_spec.rb.when given a line_item #compute_line_item computes the line item right.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","rspec.Spree::Calculator::DefaultTax at ./spec/models/spree/calculator/default_tax_spec.rb.when given a line_item #compute_line_item with a 40$ promo computes the line item right.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:2:1\"}}","rspec.Spree::Calculator::FlatPercentItemTotal at ./spec/models/spree/calculator/flat_percent_item_total_spec.rb.compute returns object.amount if computed amount is greater.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","rspec.Spree::Calculator::FlatPercentItemTotal at ./spec/models/spree/calculator/flat_percent_item_total_spec.rb.compute rounds result correctly.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::Calculator::FlatRate at ./spec/models/spree/calculator/flat_rate_spec.rb.#compute behaves like computing amount correctly computes the amount as 0 when currency does not match the line_item's currency.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2\"}}","rspec.Spree::Calculator::FlatRate at ./spec/models/spree/calculator/flat_rate_spec.rb.#compute behaves like computing amount correctly computes the amount as 0 when currency is blank.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:3\"}}","rspec.Spree::Calculator::FlatRate at ./spec/models/spree/calculator/flat_rate_spec.rb.#compute behaves like computing amount correctly computes the amount as 0 when there is no object.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:5\"}}","rspec.Spree::Calculator::FlatRate at ./spec/models/spree/calculator/flat_rate_spec.rb.#compute behaves like computing amount correctly computes the amount as the rate when currency matches the line_item's currency.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","rspec.Spree::Calculator::FlatRate at ./spec/models/spree/calculator/flat_rate_spec.rb.#compute behaves like computing amount correctly computes the amount as the rate when the currencies use different casing.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:4\"}}","rspec.Spree::Calculator::FlatRate at ./spec/models/spree/calculator/flat_rate_spec.rb.#compute example at ./spec/models/spree/calculator/flat_rate_spec.rb:10.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::Calculator::FlatRate at ./spec/models/spree/calculator/flat_rate_spec.rb.#compute when apply_only_on_full_priced_items is true when line item does not have compare at price behaves like computing amount correctly computes the amount as 0 when currency does not match the line_item's currency.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:2:1:2\"}}","rspec.Spree::Calculator::FlatRate at ./spec/models/spree/calculator/flat_rate_spec.rb.#compute when apply_only_on_full_priced_items is true when line item does not have compare at price behaves like computing amount correctly computes the amount as 0 when currency is blank.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:2:1:3\"}}","rspec.Spree::Calculator::FlatRate at ./spec/models/spree/calculator/flat_rate_spec.rb.#compute when apply_only_on_full_priced_items is true when line item does not have compare at price behaves like computing amount correctly computes the amount as 0 when there is no object.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:2:1:5\"}}","rspec.Spree::Calculator::FlatRate at ./spec/models/spree/calculator/flat_rate_spec.rb.#compute when apply_only_on_full_priced_items is true when line item does not have compare at price behaves like computing amount correctly computes the amount as the rate when currency matches the line_item's currency.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:2:1:1\"}}","rspec.Spree::Calculator::FlatRate at ./spec/models/spree/calculator/flat_rate_spec.rb.#compute when apply_only_on_full_priced_items is true when line item does not have compare at price behaves like computing amount correctly computes the amount as the rate when the currencies use different casing.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:2:1:4\"}}","rspec.Spree::Calculator::FlatRate at ./spec/models/spree/calculator/flat_rate_spec.rb.#compute when apply_only_on_full_priced_items is true when line item has compare at price returns 0.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1:1\"}}","rspec.Spree::Calculator::FlexiRate at ./spec/models/spree/calculator/flexi_rate_spec.rb.#compute example at ./spec/models/spree/calculator/flexi_rate_spec.rb:10.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::Calculator::FlexiRate at ./spec/models/spree/calculator/flexi_rate_spec.rb.#compute when apply_only_on_full_priced_items is true behaves like computes amount correctly allows creation of new object with all the attributes.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:6\"}}","rspec.Spree::Calculator::FlexiRate at ./spec/models/spree/calculator/flexi_rate_spec.rb.#compute when apply_only_on_full_priced_items is true behaves like computes amount correctly computes amount correctly when additional_items and first_item have values AND max items has value.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:5\"}}","rspec.Spree::Calculator::FlexiRate at ./spec/models/spree/calculator/flexi_rate_spec.rb.#compute when apply_only_on_full_priced_items is true behaves like computes amount correctly computes amount correctly when additional_items and first_item have values.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:4\"}}","rspec.Spree::Calculator::FlexiRate at ./spec/models/spree/calculator/flexi_rate_spec.rb.#compute when apply_only_on_full_priced_items is true behaves like computes amount correctly computes amount correctly when additional_items has a value.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:3\"}}","rspec.Spree::Calculator::FlexiRate at ./spec/models/spree/calculator/flexi_rate_spec.rb.#compute when apply_only_on_full_priced_items is true behaves like computes amount correctly computes amount correctly when all fees are 0.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:1\"}}","rspec.Spree::Calculator::FlexiRate at ./spec/models/spree/calculator/flexi_rate_spec.rb.#compute when apply_only_on_full_priced_items is true behaves like computes amount correctly computes amount correctly when first_item has a value.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:2\"}}","rspec.Spree::Calculator::FlexiRate at ./spec/models/spree/calculator/flexi_rate_spec.rb.#compute when apply_only_on_full_priced_items is true returns 0.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","rspec.Spree::Calculator::PercentOnLineItem at ./spec/models/spree/calculator/percent_on_line_item_spec.rb.#compute behaves like computing amount correctly returns object.amount if computed amount is greater.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2\"}}","rspec.Spree::Calculator::PercentOnLineItem at ./spec/models/spree/calculator/percent_on_line_item_spec.rb.#compute behaves like computing amount correctly rounds result correctly.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","rspec.Spree::Calculator::PercentOnLineItem at ./spec/models/spree/calculator/percent_on_line_item_spec.rb.#compute example at ./spec/models/spree/calculator/percent_on_line_item_spec.rb:10.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::Calculator::PercentOnLineItem at ./spec/models/spree/calculator/percent_on_line_item_spec.rb.#compute when apply_only_on_full_priced_items preference is true when line item does not have a compare at price behaves like computing amount correctly returns object.amount if computed amount is greater.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:2:1:2\"}}","rspec.Spree::Calculator::PercentOnLineItem at ./spec/models/spree/calculator/percent_on_line_item_spec.rb.#compute when apply_only_on_full_priced_items preference is true when line item does not have a compare at price behaves like computing amount correctly rounds result correctly.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:2:1:1\"}}","rspec.Spree::Calculator::PercentOnLineItem at ./spec/models/spree/calculator/percent_on_line_item_spec.rb.#compute when apply_only_on_full_priced_items preference is true when line item has a compare at price returns 0.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1:1\"}}","rspec.Spree::Calculator::PriceSack at ./spec/models/spree/calculator/price_sack_spec.rb.computes the correct amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3\"}}","rspec.Spree::Calculator::PriceSack at ./spec/models/spree/calculator/price_sack_spec.rb.computes with a shipment object.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2\"}}","rspec.Spree::Calculator::PriceSack at ./spec/models/spree/calculator/price_sack_spec.rb.computes with an order object.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","rspec.Spree::Calculator::Returns::DefaultRefundAmount at ./spec/models/spree/calculator/refunds/default_refund_amount_spec.rb.an exchange example at ./spec/models/spree/calculator/refunds/default_refund_amount_spec.rb:45.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.Spree::Calculator::Returns::DefaultRefundAmount at ./spec/models/spree/calculator/refunds/default_refund_amount_spec.rb.not an exchange no promotions or taxes example at ./spec/models/spree/calculator/refunds/default_refund_amount_spec.rb:19.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","rspec.Spree::Calculator::Returns::DefaultRefundAmount at ./spec/models/spree/calculator/refunds/default_refund_amount_spec.rb.not an exchange order adjustments example at ./spec/models/spree/calculator/refunds/default_refund_amount_spec.rb:30.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","rspec.Spree::Calculator::Returns::DefaultRefundAmount at ./spec/models/spree/calculator/refunds/default_refund_amount_spec.rb.not an exchange shipping adjustments example at ./spec/models/spree/calculator/refunds/default_refund_amount_spec.rb:38.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","rspec.Spree::Calculator::Shipping::DigitalDelivery at ./spec/models/spree/calculator/shipping/digital_delivery_spec.rb.#available? returns false for a mixed order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","rspec.Spree::Calculator::Shipping::DigitalDelivery at ./spec/models/spree/calculator/shipping/digital_delivery_spec.rb.#available? returns false for an exclusively non-digital order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3\"}}","rspec.Spree::Calculator::Shipping::DigitalDelivery at ./spec/models/spree/calculator/shipping/digital_delivery_spec.rb.#available? returns true for a digital order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","rspec.Spree::Calculator::Shipping::DigitalDelivery at ./spec/models/spree/calculator/shipping/digital_delivery_spec.rb.#compute_package alwayses return the preferred_amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","rspec.Spree::Calculator::Shipping::DigitalDelivery at ./spec/models/spree/calculator/shipping/digital_delivery_spec.rb.#compute_package ignores the passed in object.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.Spree::Calculator::Shipping::DigitalDelivery at ./spec/models/spree/calculator/shipping/digital_delivery_spec.rb.has a description for the class.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","rspec.Spree::Calculator::Shipping::FlatPercentItemTotal at ./spec/models/spree/calculator/shipping/flat_percent_item_total_spec.rb.rounds result correctly.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","rspec.Spree::Calculator::Shipping::FlatRate at ./spec/models/spree/calculator/shipping/flat_rate_spec.rb.with both weight and price constraints returns amount based on the contents weight and price.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","rspec.Spree::Calculator::Shipping::FlatRate at ./spec/models/spree/calculator/shipping/flat_rate_spec.rb.with price constraints returns amount based on the contents weight.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","rspec.Spree::Calculator::Shipping::FlatRate at ./spec/models/spree/calculator/shipping/flat_rate_spec.rb.with weight constraints returns amount based on the contents item total.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.Spree::Calculator::Shipping::FlatRate at ./spec/models/spree/calculator/shipping/flat_rate_spec.rb.without any constraints returns the amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::Calculator::Shipping::FlexiRate at ./spec/models/spree/calculator/shipping/flexi_rate_spec.rb.compute allows creation of new object with all the attributes.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","rspec.Spree::Calculator::Shipping::FlexiRate at ./spec/models/spree/calculator/shipping/flexi_rate_spec.rb.compute computes amount correctly when additional_items and first_item have values AND max items has value.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","rspec.Spree::Calculator::Shipping::FlexiRate at ./spec/models/spree/calculator/shipping/flexi_rate_spec.rb.compute computes amount correctly when additional_items and first_item have values.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","rspec.Spree::Calculator::Shipping::FlexiRate at ./spec/models/spree/calculator/shipping/flexi_rate_spec.rb.compute computes amount correctly when additional_items has a value.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","rspec.Spree::Calculator::Shipping::FlexiRate at ./spec/models/spree/calculator/shipping/flexi_rate_spec.rb.compute computes amount correctly when all fees are 0.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::Calculator::Shipping::FlexiRate at ./spec/models/spree/calculator/shipping/flexi_rate_spec.rb.compute computes amount correctly when first_item has a value.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","rspec.Spree::Calculator::Shipping::PerItem at ./spec/models/spree/calculator/shipping/per_item_spec.rb.correctly calculates per item shipping.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","rspec.Spree::Calculator::Shipping::PriceSack at ./spec/models/spree/calculator/shipping/price_sack_spec.rb.computes the correct amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","rspec.Spree::Calculator::TieredFlatRate at ./spec/models/spree/calculator/tiered_flat_rate_spec.rb.#compute when amount falls within the first tier example at ./spec/models/spree/calculator/tiered_flat_rate_spec.rb:40.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","rspec.Spree::Calculator::TieredFlatRate at ./spec/models/spree/calculator/tiered_flat_rate_spec.rb.#compute when amount falls within the second tier example at ./spec/models/spree/calculator/tiered_flat_rate_spec.rb:46.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","rspec.Spree::Calculator::TieredFlatRate at ./spec/models/spree/calculator/tiered_flat_rate_spec.rb.#valid? when tiers is a hash and one of the keys is not a positive number example at ./spec/models/spree/calculator/tiered_flat_rate_spec.rb:19.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1:1\"}}","rspec.Spree::Calculator::TieredFlatRate at ./spec/models/spree/calculator/tiered_flat_rate_spec.rb.#valid? when tiers is not a hash example at ./spec/models/spree/calculator/tiered_flat_rate_spec.rb:12.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","rspec.Spree::Calculator::TieredPercent at ./spec/models/spree/calculator/tiered_percent_spec.rb.#compute when amount falls within the first tier example at ./spec/models/spree/calculator/tiered_percent_spec.rb:58.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","rspec.Spree::Calculator::TieredPercent at ./spec/models/spree/calculator/tiered_percent_spec.rb.#compute when amount falls within the second tier example at ./spec/models/spree/calculator/tiered_percent_spec.rb:64.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","rspec.Spree::Calculator::TieredPercent at ./spec/models/spree/calculator/tiered_percent_spec.rb.#valid? when base percent is greater than 100 example at ./spec/models/spree/calculator/tiered_percent_spec.rb:18.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","rspec.Spree::Calculator::TieredPercent at ./spec/models/spree/calculator/tiered_percent_spec.rb.#valid? when base percent is less than zero example at ./spec/models/spree/calculator/tiered_percent_spec.rb:12.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","rspec.Spree::Calculator::TieredPercent at ./spec/models/spree/calculator/tiered_percent_spec.rb.#valid? when tiers is a hash and one of the keys is not a positive number example at ./spec/models/spree/calculator/tiered_percent_spec.rb:31.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1:1\"}}","rspec.Spree::Calculator::TieredPercent at ./spec/models/spree/calculator/tiered_percent_spec.rb.#valid? when tiers is a hash and one of the values is not a percent example at ./spec/models/spree/calculator/tiered_percent_spec.rb:37.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:2:1\"}}","rspec.Spree::Calculator::TieredPercent at ./spec/models/spree/calculator/tiered_percent_spec.rb.#valid? when tiers is not a hash example at ./spec/models/spree/calculator/tiered_percent_spec.rb:24.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","rspec.Spree::Cart::AddItem at ./spec/services/spree/cart/add_item_spec.rb.add line item to order change by one and recalculate amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::Cart::AddItem at ./spec/services/spree/cart/add_item_spec.rb.not given a shipment ensures updated shipments.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","rspec.Spree::Cart::AddItem at ./spec/services/spree/cart/add_item_spec.rb.pass invalid arguments different quantity in argument and in options take value from options.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1:1\"}}","rspec.Spree::Cart::AddItem at ./spec/services/spree/cart/add_item_spec.rb.pass invalid arguments different quantity no quantity in argument and in params set default.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2:1\"}}","rspec.Spree::Cart::AddItem at ./spec/services/spree/cart/add_item_spec.rb.pass invalid arguments not permitted example at ./spec/services/spree/cart/add_item_spec.rb:171.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:3:1\"}}","rspec.Spree::Cart::AddItem at ./spec/services/spree/cart/add_item_spec.rb.pass invalid arguments pass non-existing variant example at ./spec/services/spree/cart/add_item_spec.rb:184.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:4:1\"}}","rspec.Spree::Cart::AddItem at ./spec/services/spree/cart/add_item_spec.rb.pass invalid arguments variant has been descontinued example at ./spec/services/spree/cart/add_item_spec.rb:207.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:6:1\"}}","rspec.Spree::Cart::AddItem at ./spec/services/spree/cart/add_item_spec.rb.pass invalid arguments variant have not desired quantity example at ./spec/services/spree/cart/add_item_spec.rb:196.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:5:1\"}}","rspec.Spree::Cart::AddItem at ./spec/services/spree/cart/add_item_spec.rb.pass valid params hash in options example at ./spec/services/spree/cart/add_item_spec.rb:136.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","rspec.Spree::Cart::AddItem at ./spec/services/spree/cart/add_item_spec.rb.running promotions VAT for variant with percent promotion updates included_tax_total after adding two line items.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:3:2\"}}","rspec.Spree::Cart::AddItem at ./spec/services/spree/cart/add_item_spec.rb.running promotions VAT for variant with percent promotion updates included_tax_total.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:3:1\"}}","rspec.Spree::Cart::AddItem at ./spec/services/spree/cart/add_item_spec.rb.running promotions one active line item promotion creates valid discount on order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2:1\"}}","rspec.Spree::Cart::AddItem at ./spec/services/spree/cart/add_item_spec.rb.running promotions one active order promotion creates valid discount on order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1:1\"}}","rspec.Spree::Cart::AddItem at ./spec/services/spree/cart/add_item_spec.rb.setting metadata private metadata example at ./spec/services/spree/cart/add_item_spec.rb:221.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1:1\"}}","rspec.Spree::Cart::AddItem at ./spec/services/spree/cart/add_item_spec.rb.setting metadata public metadata example at ./spec/services/spree/cart/add_item_spec.rb:229.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:2:1\"}}","rspec.Spree::Cart::AddItem at ./spec/services/spree/cart/add_item_spec.rb.when variant has price in the cart currency, but with amount set to nil does not add the item and raises error.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1\"}}","rspec.Spree::Cart::AddItem at ./spec/services/spree/cart/add_item_spec.rb.with given shipment ensure shipment calls update_amounts instead of order calling ensure_updated_shipments.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","rspec.Spree::Cart::AddItem at ./spec/services/spree/cart/add_item_spec.rb.with same line item not to add.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.Spree::Cart::AddItem at ./spec/services/spree/cart/add_item_spec.rb.with store_credits payment example at ./spec/services/spree/cart/add_item_spec.rb:62.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","rspec.Spree::Cart::Associate at ./spec/services/spree/cart/associate_spec.rb.when already assigned order is given returns failure.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.Spree::Cart::Associate at ./spec/services/spree/cart/associate_spec.rb.when guest order is given assigns order to user.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::Cart::ChangeCurrency at ./spec/services/spree/cart/change_currency_spec.rb.when switching to a supported currency when product has a price in given currency changes order and line items currency.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","rspec.Spree::Cart::ChangeCurrency at ./spec/services/spree/cart/change_currency_spec.rb.when switching to a supported currency when product has a price in given currency removes the shipment and restarts the checkout flow.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2\"}}","rspec.Spree::Cart::ChangeCurrency at ./spec/services/spree/cart/change_currency_spec.rb.when switching to a supported currency when product has a price in given currency when the order has no shipment does not restart the checkout flow.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:1\"}}","rspec.Spree::Cart::ChangeCurrency at ./spec/services/spree/cart/change_currency_spec.rb.when switching to an unsupported currency returns failure.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.Spree::Cart::ChangeCurrency at ./spec/services/spree/cart/change_currency_spec.rb.when there are items that are not available in the new currency removes them from the Cart.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","rspec.Spree::Cart::Create at ./spec/services/spree/cart/create_spec.rb.create an order example at ./spec/services/spree/cart/create_spec.rb:18.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::Cart::Create at ./spec/services/spree/cart/create_spec.rb.create an order with store currency example at ./spec/services/spree/cart/create_spec.rb:48.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","rspec.Spree::Cart::Create at ./spec/services/spree/cart/create_spec.rb.create an order with store in params example at ./spec/services/spree/cart/create_spec.rb:32.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.Spree::Cart::Create at ./spec/services/spree/cart/create_spec.rb.returns failure when no store is passed example at ./spec/services/spree/cart/create_spec.rb:64.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","rspec.Spree::Cart::Destroy at ./spec/services/spree/cart/destroy_spec.rb.when nil is given returns failure.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.Spree::Cart::Destroy at ./spec/services/spree/cart/destroy_spec.rb.when order is given when can be destroyed cancel not shipped shipments.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3\"}}","rspec.Spree::Cart::Destroy at ./spec/services/spree/cart/destroy_spec.rb.when order is given when can be destroyed destroys line_items, addresses, shipments and payments.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:5\"}}","rspec.Spree::Cart::Destroy at ./spec/services/spree/cart/destroy_spec.rb.when order is given when can be destroyed destroys the order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:4\"}}","rspec.Spree::Cart::Destroy at ./spec/services/spree/cart/destroy_spec.rb.when order is given when can be destroyed returns success.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","rspec.Spree::Cart::Destroy at ./spec/services/spree/cart/destroy_spec.rb.when order is given when can be destroyed voids pending payments.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2\"}}","rspec.Spree::Cart::Destroy at ./spec/services/spree/cart/destroy_spec.rb.when order is given when can be destroyed when addresses are assigned to other orders destroys line_items, shipments and payments, but keeps addresses.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:6:2\"}}","rspec.Spree::Cart::Destroy at ./spec/services/spree/cart/destroy_spec.rb.when order is given when can be destroyed when addresses are assigned to other orders destroys the order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:6:1\"}}","rspec.Spree::Cart::Destroy at ./spec/services/spree/cart/destroy_spec.rb.when order is given when can be destroyed when empty service is called first destroys the order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:7:1\"}}","rspec.Spree::Cart::Destroy at ./spec/services/spree/cart/destroy_spec.rb.when order is given when cannot be destroyed returns failure.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","rspec.Spree::Cart::Empty at ./spec/services/spree/cart/empty_spec.rb.when nil is given returns failure.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.Spree::Cart::Empty at ./spec/services/spree/cart/empty_spec.rb.when order is given completed order returns failure.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","rspec.Spree::Cart::Empty at ./spec/services/spree/cart/empty_spec.rb.when order is given incomplete order clears out line items, adjustments and update totals.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2\"}}","rspec.Spree::Cart::Empty at ./spec/services/spree/cart/empty_spec.rb.when order is given incomplete order returns success.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","rspec.Spree::Cart::RemoveItem at ./spec/services/spree/cart/remove_item_spec.rb.given a shipment ensure shipment calls update_amounts instead of order calling ensure_updated_shipments.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","rspec.Spree::Cart::RemoveItem at ./spec/services/spree/cart/remove_item_spec.rb.line items with more than one quantity remove quantity from line item.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.Spree::Cart::RemoveItem at ./spec/services/spree/cart/remove_item_spec.rb.not given a shipment ensures updated shipments.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","rspec.Spree::Cart::RemoveItem at ./spec/services/spree/cart/remove_item_spec.rb.raise error when try remove non existing item.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","rspec.Spree::Cart::RemoveItem at ./spec/services/spree/cart/remove_item_spec.rb.single line item remove item from order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::Cart::RemoveItem at ./spec/services/spree/cart/remove_item_spec.rb.when store_credits payment example at ./spec/services/spree/cart/remove_item_spec.rb:72.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","rspec.Spree::Cart::RemoveLineItem at ./spec/services/spree/cart/remove_line_item_spec.rb.given a shipment ensure shipment calls update_amounts instead of order calling ensure_updated_shipments.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.Spree::Cart::RemoveLineItem at ./spec/services/spree/cart/remove_line_item_spec.rb.not given a shipment ensures updated shipments.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","rspec.Spree::Cart::RemoveLineItem at ./spec/services/spree/cart/remove_line_item_spec.rb.remove line item with any quantity with any quantity.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","rspec.Spree::Cart::RemoveLineItem at ./spec/services/spree/cart/remove_line_item_spec.rb.remove line item with many unique items from order with many unique items.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","rspec.Spree::Cart::RemoveOutOfStockItems at ./spec/services/spree/cart/remove_out_of_stock_items_spec.rb.evaluate service to success.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","rspec.Spree::Cart::RemoveOutOfStockItems at ./spec/services/spree/cart/remove_out_of_stock_items_spec.rb.removes line item and render discontinued flash message.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2\"}}","rspec.Spree::Cart::RemoveOutOfStockItems at ./spec/services/spree/cart/remove_out_of_stock_items_spec.rb.removes line item and render out of stock flash message.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3\"}}","rspec.Spree::Cart::RemoveOutOfStockItems at ./spec/services/spree/cart/remove_out_of_stock_items_spec.rb.renders discontinued flash message when a variant is discontinued.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6\"}}","rspec.Spree::Cart::RemoveOutOfStockItems at ./spec/services/spree/cart/remove_out_of_stock_items_spec.rb.renders discontinued flash message when line item is deleted.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4\"}}","rspec.Spree::Cart::RemoveOutOfStockItems at ./spec/services/spree/cart/remove_out_of_stock_items_spec.rb.renders discontinued flash message when line item is discontinued.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5\"}}","rspec.Spree::Cart::SetQuantity at ./spec/services/spree/cart/set_quantity_spec.rb.with backorderable item returns successful result.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.Spree::Cart::SetQuantity at ./spec/services/spree/cart/set_quantity_spec.rb.with non-backorderable item with insufficient stock quantity return result with success equal false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","rspec.Spree::Cart::SetQuantity at ./spec/services/spree/cart/set_quantity_spec.rb.with non-backorderable item with sufficient stock quantity returns successful result.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","rspec.Spree::Checkout::AddStoreCredit at ./spec/services/spree/checkout/add_store_credit_spec.rb.#call the available store credit is not enough to pay for the entire order creates a store credit payment for the available amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","rspec.Spree::Checkout::AddStoreCredit at ./spec/services/spree/checkout/add_store_credit_spec.rb.#call there are multiple store credits uses the primary store credit type over the secondary.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1\"}}","rspec.Spree::Checkout::AddStoreCredit at ./spec/services/spree/checkout/add_store_credit_spec.rb.#call there is enough store credit to pay for the entire order with no amount specified creates a store credit payment for the full amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1:1\"}}","rspec.Spree::Checkout::AddStoreCredit at ./spec/services/spree/checkout/add_store_credit_spec.rb.#call there is enough store credit to pay for the entire order with store credit amount specified creates a store credit payment for the specified amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:1\"}}","rspec.Spree::Checkout::AddStoreCredit at ./spec/services/spree/checkout/add_store_credit_spec.rb.#call there is no store credit does not create a store credit payment.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","rspec.Spree::Checkout::AddStoreCredit at ./spec/services/spree/checkout/add_store_credit_spec.rb.#call there is no store credit returns error.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2\"}}","rspec.Spree::Checkout::Advance at ./spec/services/spree/checkout/advance_spec.rb.#call when next service fails returns failure result.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1\"}}","rspec.Spree::Checkout::Advance at ./spec/services/spree/checkout/advance_spec.rb.#call when order is complete stops advancement.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5:1\"}}","rspec.Spree::Checkout::Advance at ./spec/services/spree/checkout/advance_spec.rb.#call with no specific target state advances the order until it cannot proceed further.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","rspec.Spree::Checkout::Advance at ./spec/services/spree/checkout/advance_spec.rb.#call with no specific target state updates order states after advancement.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2\"}}","rspec.Spree::Checkout::Advance at ./spec/services/spree/checkout/advance_spec.rb.#call with no specific target state when no transition has been made responds with an error.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:1\"}}","rspec.Spree::Checkout::Advance at ./spec/services/spree/checkout/advance_spec.rb.#call with shipping method selection on shipping method failure keeps the old shipping method.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:2:1\"}}","rspec.Spree::Checkout::Advance at ./spec/services/spree/checkout/advance_spec.rb.#call with shipping method selection updates shipping method during advancement.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","rspec.Spree::Checkout::Advance at ./spec/services/spree/checkout/advance_spec.rb.#call with specific target state advances the order to target state.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:3\"}}","rspec.Spree::Checkout::Advance at ./spec/services/spree/checkout/advance_spec.rb.#call with specific target state returns failure for invalid state.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","rspec.Spree::Checkout::Advance at ./spec/services/spree/checkout/advance_spec.rb.#call with specific target state returns success if order already passed target state.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2\"}}","rspec.Spree::Checkout::Advance at ./spec/services/spree/checkout/advance_spec.rb.#call with specific target state when unable to reach the targeted state responds with an error.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:4:1\"}}","rspec.Spree::Checkout::GetShippingRates at ./spec/services/spree/checkout/get_shipping_rates_spec.rb.with line items and shipping address with already present shipments behaves like applies standard shipping costs for shipment.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:2:1\"}}","rspec.Spree::Checkout::GetShippingRates at ./spec/services/spree/checkout/get_shipping_rates_spec.rb.with line items and shipping address with already present shipments behaves like applies standard shipping costs updates shipment total.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:2:2\"}}","rspec.Spree::Checkout::GetShippingRates at ./spec/services/spree/checkout/get_shipping_rates_spec.rb.with line items and shipping address with already present shipments behaves like generates shipping rates doesn't update checkout state.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1:2\"}}","rspec.Spree::Checkout::GetShippingRates at ./spec/services/spree/checkout/get_shipping_rates_spec.rb.with line items and shipping address with already present shipments behaves like generates shipping rates returns shipping rates.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1:1\"}}","rspec.Spree::Checkout::GetShippingRates at ./spec/services/spree/checkout/get_shipping_rates_spec.rb.with line items and shipping address with already present shipments replaces current shipments with new ones.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:3\"}}","rspec.Spree::Checkout::GetShippingRates at ./spec/services/spree/checkout/get_shipping_rates_spec.rb.with line items and shipping address with free shipping promotion applies promotion.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3:1\"}}","rspec.Spree::Checkout::GetShippingRates at ./spec/services/spree/checkout/get_shipping_rates_spec.rb.with line items and shipping address without shipments behaves like applies standard shipping costs for shipment.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:2:1\"}}","rspec.Spree::Checkout::GetShippingRates at ./spec/services/spree/checkout/get_shipping_rates_spec.rb.with line items and shipping address without shipments behaves like applies standard shipping costs updates shipment total.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:2:2\"}}","rspec.Spree::Checkout::GetShippingRates at ./spec/services/spree/checkout/get_shipping_rates_spec.rb.with line items and shipping address without shipments behaves like generates shipping rates doesn't update checkout state.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1:2\"}}","rspec.Spree::Checkout::GetShippingRates at ./spec/services/spree/checkout/get_shipping_rates_spec.rb.with line items and shipping address without shipments behaves like generates shipping rates returns shipping rates.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1:1\"}}","rspec.Spree::Checkout::GetShippingRates at ./spec/services/spree/checkout/get_shipping_rates_spec.rb.without line items behaves like failure doesn't generate shipping rates.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:2\"}}","rspec.Spree::Checkout::GetShippingRates at ./spec/services/spree/checkout/get_shipping_rates_spec.rb.without line items behaves like failure returns error.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","rspec.Spree::Checkout::GetShippingRates at ./spec/services/spree/checkout/get_shipping_rates_spec.rb.without shipping address behaves like failure doesn't generate shipping rates.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2\"}}","rspec.Spree::Checkout::GetShippingRates at ./spec/services/spree/checkout/get_shipping_rates_spec.rb.without shipping address behaves like failure returns error.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","rspec.Spree::Checkout::RemoveStoreCredit at ./spec/services/spree/checkout/remove_store_credit_spec.rb.#call when order is complete example at ./spec/services/spree/checkout/remove_store_credit_spec.rb:32.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","rspec.Spree::Checkout::RemoveStoreCredit at ./spec/services/spree/checkout/remove_store_credit_spec.rb.#call when order is not complete example at ./spec/services/spree/checkout/remove_store_credit_spec.rb:19.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","rspec.Spree::Checkout::RemoveStoreCredit at ./spec/services/spree/checkout/remove_store_credit_spec.rb.#call when order is not complete example at ./spec/services/spree/checkout/remove_store_credit_spec.rb:20.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2\"}}","rspec.Spree::Checkout::SelectShippingMethod at ./spec/services/spree/checkout/select_shipping_method_spec.rb.multiple shipments update all shipments example at ./spec/services/spree/checkout/select_shipping_method_spec.rb:110.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","rspec.Spree::Checkout::SelectShippingMethod at ./spec/services/spree/checkout/select_shipping_method_spec.rb.multiple shipments update all shipments sets selected shipping method for all shipments.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:2\"}}","rspec.Spree::Checkout::SelectShippingMethod at ./spec/services/spree/checkout/select_shipping_method_spec.rb.multiple shipments update selected shipment example at ./spec/services/spree/checkout/select_shipping_method_spec.rb:97.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","rspec.Spree::Checkout::SelectShippingMethod at ./spec/services/spree/checkout/select_shipping_method_spec.rb.multiple shipments update selected shipment sets selected shipping method for the specified shipment.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:2\"}}","rspec.Spree::Checkout::SelectShippingMethod at ./spec/services/spree/checkout/select_shipping_method_spec.rb.one shipment missing shipping method example at ./spec/services/spree/checkout/select_shipping_method_spec.rb:71.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","rspec.Spree::Checkout::SelectShippingMethod at ./spec/services/spree/checkout/select_shipping_method_spec.rb.one shipment missing shipping method example at ./spec/services/spree/checkout/select_shipping_method_spec.rb:72.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2\"}}","rspec.Spree::Checkout::SelectShippingMethod at ./spec/services/spree/checkout/select_shipping_method_spec.rb.one shipment missing shipping method example at ./spec/services/spree/checkout/select_shipping_method_spec.rb:73.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:3\"}}","rspec.Spree::Checkout::SelectShippingMethod at ./spec/services/spree/checkout/select_shipping_method_spec.rb.one shipment valid shipping method example at ./spec/services/spree/checkout/select_shipping_method_spec.rb:53.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","rspec.Spree::Checkout::SelectShippingMethod at ./spec/services/spree/checkout/select_shipping_method_spec.rb.one shipment valid shipping method example at ./spec/services/spree/checkout/select_shipping_method_spec.rb:54.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2\"}}","rspec.Spree::Checkout::SelectShippingMethod at ./spec/services/spree/checkout/select_shipping_method_spec.rb.one shipment valid shipping method example at ./spec/services/spree/checkout/select_shipping_method_spec.rb:55.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3\"}}","rspec.Spree::Checkout::SelectShippingMethod at ./spec/services/spree/checkout/select_shipping_method_spec.rb.one shipment valid shipping method sets selected shipping method for shipment.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:4\"}}","rspec.Spree::Checkout::Update at ./spec/services/spree/checkout/update_spec.rb.#transform_address_params with bill_address order params will return hash contain country_id.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","rspec.Spree::Checkout::Update at ./spec/services/spree/checkout/update_spec.rb.#transform_address_params with bill_address order params will return hash without country_iso.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2\"}}","rspec.Spree::Checkout::Update at ./spec/services/spree/checkout/update_spec.rb.#transform_address_params with ship_address order params will return hash contain country_id.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","rspec.Spree::Checkout::Update at ./spec/services/spree/checkout/update_spec.rb.#transform_address_params with ship_address order params will return hash without country_iso.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2\"}}","rspec.Spree::Checkout::Update at ./spec/services/spree/checkout/update_spec.rb.address ownership validation when address_attributes contains id of address with no user returns success.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4:1\"}}","rspec.Spree::Checkout::Update at ./spec/services/spree/checkout/update_spec.rb.address ownership validation when address_attributes contains id of the same user address returns success.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3:1\"}}","rspec.Spree::Checkout::Update at ./spec/services/spree/checkout/update_spec.rb.address ownership validation when address_attributes does not contain id returns success.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:5:1\"}}","rspec.Spree::Checkout::Update at ./spec/services/spree/checkout/update_spec.rb.address ownership validation when bill_address_attributes contains id of another user address does not associate the other user address with the order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:2\"}}","rspec.Spree::Checkout::Update at ./spec/services/spree/checkout/update_spec.rb.address ownership validation when bill_address_attributes contains id of another user address returns failure.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","rspec.Spree::Checkout::Update at ./spec/services/spree/checkout/update_spec.rb.address ownership validation when ship_address_attributes contains id of another user address does not associate the other user address with the order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:2\"}}","rspec.Spree::Checkout::Update at ./spec/services/spree/checkout/update_spec.rb.address ownership validation when ship_address_attributes contains id of another user address returns failure.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","rspec.Spree::Checkout::Update at ./spec/services/spree/checkout/update_spec.rb.update address at address state when address did not change behaves like checkout is in address step keeps checkout in address step.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1:2:1\"}}","rspec.Spree::Checkout::Update at ./spec/services/spree/checkout/update_spec.rb.update address at address state when address did not change behaves like user default addresses did not change does not change user default addresses.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1:1:1\"}}","rspec.Spree::Checkout::Update at ./spec/services/spree/checkout/update_spec.rb.update address at address state when address did not change does not change order addresses.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1:3\"}}","rspec.Spree::Checkout::Update at ./spec/services/spree/checkout/update_spec.rb.update address at address state when bill address changed behaves like checkout is in address step keeps checkout in address step.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:3:2:1\"}}","rspec.Spree::Checkout::Update at ./spec/services/spree/checkout/update_spec.rb.update address at address state when bill address changed behaves like user default addresses did not change does not change user default addresses.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:3:1:1\"}}","rspec.Spree::Checkout::Update at ./spec/services/spree/checkout/update_spec.rb.update address at address state when bill address changed should update order bill address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:3:3\"}}","rspec.Spree::Checkout::Update at ./spec/services/spree/checkout/update_spec.rb.update address at address state when ship address changed behaves like checkout is in address step keeps checkout in address step.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:2:2:1\"}}","rspec.Spree::Checkout::Update at ./spec/services/spree/checkout/update_spec.rb.update address at address state when ship address changed behaves like user default addresses did not change does not change user default addresses.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:2:1:1\"}}","rspec.Spree::Checkout::Update at ./spec/services/spree/checkout/update_spec.rb.update address at address state when ship address changed should update order ship address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:2:3\"}}","rspec.Spree::Checkout::Update at ./spec/services/spree/checkout/update_spec.rb.update address at address state when ship and bill address changed behaves like checkout is in address step keeps checkout in address step.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:4:2:1\"}}","rspec.Spree::Checkout::Update at ./spec/services/spree/checkout/update_spec.rb.update address at address state when ship and bill address changed behaves like user default addresses did not change does not change user default addresses.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:4:1:1\"}}","rspec.Spree::Checkout::Update at ./spec/services/spree/checkout/update_spec.rb.update address at address state when ship and bill address changed should update both order addresses.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:4:3\"}}","rspec.Spree::Checkout::Update at ./spec/services/spree/checkout/update_spec.rb.update address at cart state should not set order back to address state if do_not_change_state is true.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:2\"}}","rspec.Spree::Checkout::Update at ./spec/services/spree/checkout/update_spec.rb.update address at cart state should set order back to address state if quick checkout cancelled.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:3\"}}","rspec.Spree::Checkout::Update at ./spec/services/spree/checkout/update_spec.rb.update address at cart state should set order back to address state.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","rspec.Spree::Checkout::Update at ./spec/services/spree/checkout/update_spec.rb.update selected shipping rate should set order back to delivery state.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","rspec.Spree::Classification at ./spec/models/spree/classification_spec.rb..grouped_taxon_ids_for_products returns the correct taxon ids.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1\"}}","rspec.Spree::Classification at ./spec/models/spree/classification_spec.rb..grouped_taxon_ids_for_products when empty product ids returns an empty array.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:3:1\"}}","rspec.Spree::Classification at ./spec/models/spree/classification_spec.rb..grouped_taxon_ids_for_products when empty taxon groups returns an empty array.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:2:1\"}}","rspec.Spree::Classification at ./spec/models/spree/classification_spec.rb.cannot link the same taxon to the same product more than once.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","rspec.Spree::Classification at ./spec/models/spree/classification_spec.rb.counter cache classification_count on product correctly counts multiple classifications.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2:3\"}}","rspec.Spree::Classification at ./spec/models/spree/classification_spec.rb.counter cache classification_count on product decrements when a classification is destroyed.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2:2\"}}","rspec.Spree::Classification at ./spec/models/spree/classification_spec.rb.counter cache classification_count on product increments when a classification is created.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2:1\"}}","rspec.Spree::Classification at ./spec/models/spree/classification_spec.rb.counter cache classification_count on taxon correctly counts multiple classifications.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1:3\"}}","rspec.Spree::Classification at ./spec/models/spree/classification_spec.rb.counter cache classification_count on taxon decrements when a classification is destroyed.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1:2\"}}","rspec.Spree::Classification at ./spec/models/spree/classification_spec.rb.counter cache classification_count on taxon increments when a classification is created.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1:1\"}}","rspec.Spree::Classification at ./spec/models/spree/classification_spec.rb.destroying classification resets positions.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","rspec.Spree::Classification at ./spec/models/spree/classification_spec.rb.has a valid fixtures.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2\"}}","rspec.Spree::Classification at ./spec/models/spree/classification_spec.rb.removing product from taxon resets positions.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","rspec.Spree::Classification at ./spec/models/spree/classification_spec.rb.removing taxon from product resets positions.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","rspec.Spree::Classification at ./spec/models/spree/classification_spec.rb.replacing product's taxons resets positions.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","rspec.Spree::Classification at ./spec/models/spree/classification_spec.rb.replacing taxon's products resets positions.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","rspec.Spree::Classifications::Reposition at ./spec/services/spree/classifications/reposition_spec.rb.failure example at ./spec/services/spree/classifications/reposition_spec.rb:20.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.Spree::Classifications::Reposition at ./spec/services/spree/classifications/reposition_spec.rb.failure example at ./spec/services/spree/classifications/reposition_spec.rb:21.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","rspec.Spree::Classifications::Reposition at ./spec/services/spree/classifications/reposition_spec.rb.success example at ./spec/services/spree/classifications/reposition_spec.rb:12.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::Classifications::Reposition at ./spec/services/spree/classifications/reposition_spec.rb.success example at ./spec/services/spree/classifications/reposition_spec.rb:13.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","rspec.Spree::Classifications::Reposition at ./spec/services/spree/classifications/reposition_spec.rb.success example at ./spec/services/spree/classifications/reposition_spec.rb:14.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","rspec.Spree::Core::ControllerHelpers::Auth at ./spec/lib/spree/core/controller_helpers/auth_spec.rb.#current_ability returns Spree::Ability instance.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::Core::ControllerHelpers::Auth at ./spec/lib/spree/core/controller_helpers/auth_spec.rb.#store_location sets session return url.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.Spree::Core::ControllerHelpers::Auth at ./spec/lib/spree/core/controller_helpers/auth_spec.rb.#try_spree_current_user calls current_spree_user when define current_spree_user method.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","rspec.Spree::Core::ControllerHelpers::Auth at ./spec/lib/spree/core/controller_helpers/auth_spec.rb.#try_spree_current_user calls spree_current_user when define spree_current_user method.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","rspec.Spree::Core::ControllerHelpers::Auth at ./spec/lib/spree/core/controller_helpers/auth_spec.rb.#try_spree_current_user returns nil.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3\"}}","rspec.Spree::Core::ControllerHelpers::Currency at ./spec/lib/spree/core/controller_helpers/currency_spec.rb.#currency_param different than store locale example at ./spec/lib/spree/core/controller_helpers/currency_spec.rb:47.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","rspec.Spree::Core::ControllerHelpers::Currency at ./spec/lib/spree/core/controller_helpers/currency_spec.rb.#currency_param same as store default locale example at ./spec/lib/spree/core/controller_helpers/currency_spec.rb:41.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","rspec.Spree::Core::ControllerHelpers::Currency at ./spec/lib/spree/core/controller_helpers/currency_spec.rb.#current_currency returns current store default currency.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::Core::ControllerHelpers::Currency at ./spec/lib/spree/core/controller_helpers/currency_spec.rb.#current_currency sets Spree::Current.currency.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","rspec.Spree::Core::ControllerHelpers::Currency at ./spec/lib/spree/core/controller_helpers/currency_spec.rb.#supported_currencies returns supported currencies.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.Spree::Core::ControllerHelpers::Locale at ./spec/lib/spree/core/controller_helpers/locale_spec.rb.#current_locale not taking locale from user config_locale present returns config_locale if present.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:1\"}}","rspec.Spree::Core::ControllerHelpers::Locale at ./spec/lib/spree/core/controller_helpers/locale_spec.rb.#current_locale not taking locale from user store with locale set return supported locale when passed as param.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1:2\"}}","rspec.Spree::Core::ControllerHelpers::Locale at ./spec/lib/spree/core/controller_helpers/locale_spec.rb.#current_locale not taking locale from user store with locale set returns current store default locale.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1:1\"}}","rspec.Spree::Core::ControllerHelpers::Locale at ./spec/lib/spree/core/controller_helpers/locale_spec.rb.#current_locale not taking locale from user store without locale set with I18n.default_locale set fallbacks to the default application locale.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:3:2:1\"}}","rspec.Spree::Core::ControllerHelpers::Locale at ./spec/lib/spree/core/controller_helpers/locale_spec.rb.#current_locale not taking locale from user store without locale set without I18n.default_locale set fallbacks to english.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:3:1:1\"}}","rspec.Spree::Core::ControllerHelpers::Locale at ./spec/lib/spree/core/controller_helpers/locale_spec.rb.#current_locale taking locale from user and store with locale set returns locale set within user.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","rspec.Spree::Core::ControllerHelpers::Locale at ./spec/lib/spree/core/controller_helpers/locale_spec.rb.#locale_param different than store locale example at ./spec/lib/spree/core/controller_helpers/locale_spec.rb:110.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","rspec.Spree::Core::ControllerHelpers::Locale at ./spec/lib/spree/core/controller_helpers/locale_spec.rb.#locale_param same as store default locale example at ./spec/lib/spree/core/controller_helpers/locale_spec.rb:102.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","rspec.Spree::Core::ControllerHelpers::Locale at ./spec/lib/spree/core/controller_helpers/locale_spec.rb.#set_locale sets the default and the current locale.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","rspec.Spree::Core::ControllerHelpers::Locale at ./spec/lib/spree/core/controller_helpers/locale_spec.rb.#set_locale when always using translations sets only the current locale.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1\"}}","rspec.Spree::Core::ControllerHelpers::Locale at ./spec/lib/spree/core/controller_helpers/locale_spec.rb.#supported_locales returns supported currencies.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.Spree::Core::ControllerHelpers::Locale at ./spec/lib/spree/core/controller_helpers/locale_spec.rb.#supported_locales returns supported locales.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","rspec.Spree::Core::ControllerHelpers::Order at ./spec/lib/spree/core/controller_helpers/order_spec.rb.#associate_user user is blank calls Spree::Order#associate_user! method.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","rspec.Spree::Core::ControllerHelpers::Order at ./spec/lib/spree/core/controller_helpers/order_spec.rb.#associate_user user isn't blank does not calls Spree::Order#associate_user! method.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","rspec.Spree::Core::ControllerHelpers::Order at ./spec/lib/spree/core/controller_helpers/order_spec.rb.#create_token_cookie creates a new token cookie.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","rspec.Spree::Core::ControllerHelpers::Order at ./spec/lib/spree/core/controller_helpers/order_spec.rb.#current_currency returns current currency.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","rspec.Spree::Core::ControllerHelpers::Order at ./spec/lib/spree/core/controller_helpers/order_spec.rb.#current_order create_order_if_necessary option is false returns current order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","rspec.Spree::Core::ControllerHelpers::Order at ./spec/lib/spree/core/controller_helpers/order_spec.rb.#current_order create_order_if_necessary option is true creates new order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","rspec.Spree::Core::ControllerHelpers::Order at ./spec/lib/spree/core/controller_helpers/order_spec.rb.#current_order creating a token cookie for a cart with token creates a new token cookie.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:1:1\"}}","rspec.Spree::Core::ControllerHelpers::Order at ./spec/lib/spree/core/controller_helpers/order_spec.rb.#current_order creating a token cookie for a cart with token on a custom domain creates a new token cookie on a custom domain.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:1:2:1\"}}","rspec.Spree::Core::ControllerHelpers::Order at ./spec/lib/spree/core/controller_helpers/order_spec.rb.#current_order creating a token cookie for a cart without token does nothing.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:2:1\"}}","rspec.Spree::Core::ControllerHelpers::Order at ./spec/lib/spree/core/controller_helpers/order_spec.rb.#current_order creating a token cookie for a checkout without token does nothing.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:4:1\"}}","rspec.Spree::Core::ControllerHelpers::Order at ./spec/lib/spree/core/controller_helpers/order_spec.rb.#current_order creating a token cookie with a checkout token creates a new token cookie.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:3:1\"}}","rspec.Spree::Core::ControllerHelpers::Order at ./spec/lib/spree/core/controller_helpers/order_spec.rb.#current_order creating a token cookie with a checkout token on a custom domain creates a new token cookie on a custom domain.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:3:2:1\"}}","rspec.Spree::Core::ControllerHelpers::Order at ./spec/lib/spree/core/controller_helpers/order_spec.rb.#ip_address returns remote ip.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","rspec.Spree::Core::ControllerHelpers::Order at ./spec/lib/spree/core/controller_helpers/order_spec.rb.#set_current_order user has no incomplete orders other than current one does not call Spree::Order#merge!.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1\"}}","rspec.Spree::Core::ControllerHelpers::Order at ./spec/lib/spree/core/controller_helpers/order_spec.rb.#set_current_order user has some incomplete orders other than current one within different store does not call Spree::Order#merge!.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:2:1\"}}","rspec.Spree::Core::ControllerHelpers::Order at ./spec/lib/spree/core/controller_helpers/order_spec.rb.#set_current_order user has some incomplete orders other than current one within the same store calls Spree::Order#merge!.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1:1\"}}","rspec.Spree::Core::ControllerHelpers::Order at ./spec/lib/spree/core/controller_helpers/order_spec.rb.#simple_current_order returns Spree::Order instance.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","rspec.Spree::Core::ControllerHelpers::Order at ./spec/lib/spree/core/controller_helpers/order_spec.rb.#simple_current_order returns an empty order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::Core::ControllerHelpers::Search at ./spec/lib/spree/core/controller_helpers/search_spec.rb.#build_searcher returns Spree::Core::Search::Base instance.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::Core::ControllerHelpers::Store at ./spec/lib/spree/core/controller_helpers/store_spec.rb.#current_price_options when there is a default tax zone when there is a current order example at ./spec/lib/spree/core/controller_helpers/store_spec.rb:164.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:2:1\"}}","rspec.Spree::Core::ControllerHelpers::Store at ./spec/lib/spree/core/controller_helpers/store_spec.rb.#current_price_options when there is a default tax zone when there is a current order sets Spree::Current.zone to the order tax zone.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:2:2\"}}","rspec.Spree::Core::ControllerHelpers::Store at ./spec/lib/spree/core/controller_helpers/store_spec.rb.#current_price_options when there is a default tax zone when there is no current order returns the default tax zone.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1:1\"}}","rspec.Spree::Core::ControllerHelpers::Store at ./spec/lib/spree/core/controller_helpers/store_spec.rb.#current_price_options when there is a default tax zone when there is no current order sets Spree::Current.zone to the default tax zone.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1:2\"}}","rspec.Spree::Core::ControllerHelpers::Store at ./spec/lib/spree/core/controller_helpers/store_spec.rb.#current_price_options when there is no default tax zone when there is a current order example at ./spec/lib/spree/core/controller_helpers/store_spec.rb:225.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:2:1\"}}","rspec.Spree::Core::ControllerHelpers::Store at ./spec/lib/spree/core/controller_helpers/store_spec.rb.#current_price_options when there is no default tax zone when there is a current order sets Spree::Current.zone to the order tax zone.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:2:2\"}}","rspec.Spree::Core::ControllerHelpers::Store at ./spec/lib/spree/core/controller_helpers/store_spec.rb.#current_price_options when there is no default tax zone when there is no current order when store has a checkout_zone returns the store checkout_zone.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1:1:1\"}}","rspec.Spree::Core::ControllerHelpers::Store at ./spec/lib/spree/core/controller_helpers/store_spec.rb.#current_price_options when there is no default tax zone when there is no current order when store has a checkout_zone sets Spree::Current.zone to the store checkout_zone.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1:1:2\"}}","rspec.Spree::Core::ControllerHelpers::Store at ./spec/lib/spree/core/controller_helpers/store_spec.rb.#current_price_options when there is no default tax zone when there is no current order when store has no checkout_zone returns nil when asked for the current tax zone.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1:2:1\"}}","rspec.Spree::Core::ControllerHelpers::Store at ./spec/lib/spree/core/controller_helpers/store_spec.rb.#current_price_options when there is no default tax zone when there is no current order when store has no checkout_zone sets Spree::Current.zone to nil.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1:2:2\"}}","rspec.Spree::Core::ControllerHelpers::Store at ./spec/lib/spree/core/controller_helpers/store_spec.rb.#current_store by domain returns current store.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","rspec.Spree::Core::ControllerHelpers::Store at ./spec/lib/spree/core/controller_helpers/store_spec.rb.#current_store by subdomain returns current store.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","rspec.Spree::Core::ControllerHelpers::Store at ./spec/lib/spree/core/controller_helpers/store_spec.rb.#current_store default store returns current store.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","rspec.Spree::Core::ControllerHelpers::Store at ./spec/lib/spree/core/controller_helpers/store_spec.rb.#ensure_current_store on a object that accepts a single store when an object already has a store assigned and the same store is re-assigned no exception is raised.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:3:1\"}}","rspec.Spree::Core::ControllerHelpers::Store at ./spec/lib/spree/core/controller_helpers/store_spec.rb.#ensure_current_store on a object that accepts a single store when an object already has a store assigned raises an exception.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:2:1\"}}","rspec.Spree::Core::ControllerHelpers::Store at ./spec/lib/spree/core/controller_helpers/store_spec.rb.#ensure_current_store on a object that accepts a single store when no store is present sets the current_store.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1:1\"}}","rspec.Spree::Core::ControllerHelpers::Store at ./spec/lib/spree/core/controller_helpers/store_spec.rb.#ensure_current_store on an object that accepts multiple stores when the object has a store and the same store is attempted to be added object is not changed.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:3:1\"}}","rspec.Spree::Core::ControllerHelpers::Store at ./spec/lib/spree/core/controller_helpers/store_spec.rb.#ensure_current_store on an object that accepts multiple stores when the object has a store pre assigned adds the new store without removing the original store.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:2:1\"}}","rspec.Spree::Core::ControllerHelpers::Store at ./spec/lib/spree/core/controller_helpers/store_spec.rb.#ensure_current_store on an object that accepts multiple stores when the object has no stores associated associates the object with the current_store.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1:1\"}}","rspec.Spree::Core::ControllerHelpers::Store at ./spec/lib/spree/core/controller_helpers/store_spec.rb.#ensure_current_store when object is nil returns nil.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:1\"}}","rspec.Spree::Core::ControllerHelpers::Store at ./spec/lib/spree/core/controller_helpers/store_spec.rb.#raise_record_not_found_if_store_is_not_found when store is found does not raise an exception.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3:1\"}}","rspec.Spree::Core::ControllerHelpers::Store at ./spec/lib/spree/core/controller_helpers/store_spec.rb.#raise_record_not_found_if_store_is_not_found when the store is not found raises an exception.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1\"}}","rspec.Spree::Core::ControllerHelpers::Store at ./spec/lib/spree/core/controller_helpers/store_spec.rb.#raise_record_not_found_if_store_is_not_found with root_domain set does not raise an exception.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1\"}}","rspec.Spree::Core::ControllerHelpers::StrongParameters at ./spec/lib/spree/core/controller_helpers/strong_parameters_spec.rb.#permitted_attributes returns Spree::PermittedAttributes module.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::Core::ControllerHelpers::StrongParameters at ./spec/lib/spree/core/controller_helpers/strong_parameters_spec.rb.#permitted_checkout_attributes returns Array class.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","rspec.Spree::Core::ControllerHelpers::StrongParameters at ./spec/lib/spree/core/controller_helpers/strong_parameters_spec.rb.#permitted_order_attributes returns Array class.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","rspec.Spree::Core::ControllerHelpers::StrongParameters at ./spec/lib/spree/core/controller_helpers/strong_parameters_spec.rb.#permitted_payment_attributes returns Array class.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.Spree::Core::ControllerHelpers::StrongParameters at ./spec/lib/spree/core/controller_helpers/strong_parameters_spec.rb.#permitted_product_attributes returns Array class.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","rspec.Spree::Core::ControllerHelpers::StrongParameters at ./spec/lib/spree/core/controller_helpers/strong_parameters_spec.rb.#permitted_store_attributes returns Array class.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","rspec.Spree::Core::Dependencies at ./spec/models/spree/app_dependencies_spec.rb.#_class clears memoization when value changes.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:4\"}}","rspec.Spree::Core::Dependencies at ./spec/models/spree/app_dependencies_spec.rb.#_class memoizes the resolved class.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3\"}}","rspec.Spree::Core::Dependencies at ./spec/models/spree/app_dependencies_spec.rb.#_class returns the class directly when set as class.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","rspec.Spree::Core::Dependencies at ./spec/models/spree/app_dependencies_spec.rb.#_class returns the constantized class for string values.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.Spree::Core::Dependencies at ./spec/models/spree/app_dependencies_spec.rb.#current_values marks non-overridden dependencies correctly.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2\"}}","rspec.Spree::Core::Dependencies at ./spec/models/spree/app_dependencies_spec.rb.#current_values marks overridden dependencies correctly.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:3\"}}","rspec.Spree::Core::Dependencies at ./spec/models/spree/app_dependencies_spec.rb.#current_values returns all dependencies with metadata.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","rspec.Spree::Core::Dependencies at ./spec/models/spree/app_dependencies_spec.rb.#overridden? returns false for non-overridden dependencies.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","rspec.Spree::Core::Dependencies at ./spec/models/spree/app_dependencies_spec.rb.#overridden? returns true for overridden dependencies.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2\"}}","rspec.Spree::Core::Dependencies at ./spec/models/spree/app_dependencies_spec.rb.#overridden? works with string argument.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3\"}}","rspec.Spree::Core::Dependencies at ./spec/models/spree/app_dependencies_spec.rb.#override_info returns nil for non-overridden dependencies.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","rspec.Spree::Core::Dependencies at ./spec/models/spree/app_dependencies_spec.rb.#override_info returns override info for overridden dependencies.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2\"}}","rspec.Spree::Core::Dependencies at ./spec/models/spree/app_dependencies_spec.rb.#overrides includes override metadata.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3\"}}","rspec.Spree::Core::Dependencies at ./spec/models/spree/app_dependencies_spec.rb.#overrides returns empty hash when no overrides.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","rspec.Spree::Core::Dependencies at ./spec/models/spree/app_dependencies_spec.rb.#overrides tracks overridden dependencies.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","rspec.Spree::Core::Dependencies at ./spec/models/spree/app_dependencies_spec.rb.#validate! raises Spree::DependencyError for invalid dependencies.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","rspec.Spree::Core::Dependencies at ./spec/models/spree/app_dependencies_spec.rb.backwards compatibility allows to overwrite the value with a class.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","rspec.Spree::Core::Dependencies at ./spec/models/spree/app_dependencies_spec.rb.backwards compatibility allows to overwrite the value with a string.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","rspec.Spree::Core::Dependencies at ./spec/models/spree/app_dependencies_spec.rb.backwards compatibility returns the default value as string.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::Core::Dependencies at ./spec/models/spree/app_dependencies_spec.rb.backwards compatibility works with constantize for string values.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","rspec.Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb.adds adjustments.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:24\"}}","rspec.Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb.adds line item adjustments from promotion.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:25\"}}","rspec.Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb.adds line item adjustments from taxation.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:26\"}}","rspec.Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb.assigning a user to an order as a user does not assign the order to the other user.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1\"}}","rspec.Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb.assigning a user to an order as an admin a user's id is not provided doesn't unassociate the admin from the order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1:1\"}}","rspec.Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb.assigns order[email] over user email to order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3\"}}","rspec.Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb.build a source payment using years and month.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:32\"}}","rspec.Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb.builds a payment using state.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29\"}}","rspec.Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb.builds a payment using status as fallback.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:30\"}}","rspec.Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb.builds a payment with an optional created_at.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:34\"}}","rspec.Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb.calculates final order total correctly.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:27\"}}","rspec.Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb.can build an order from API shipping address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10\"}}","rspec.Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb.can build an order from API with country attributes.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11\"}}","rspec.Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb.can build an order from API with just line items.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5\"}}","rspec.Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb.can build an order from API with state attributes.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13\"}}","rspec.Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb.can build an order from API with variant sku.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8\"}}","rspec.Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb.can import an order number.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","rspec.Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb.ensures_country_id for country fields.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19\"}}","rspec.Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb.ensures_state_id for state fields.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:21\"}}","rspec.Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb.handles adjustment building exceptions.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:28\"}}","rspec.Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb.handles country lookup exceptions.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12\"}}","rspec.Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb.handles exceptions when sku is not found.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9\"}}","rspec.Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb.handles line_item building exceptions.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6\"}}","rspec.Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb.handles line_item updating exceptions.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7\"}}","rspec.Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb.handles payment building exceptions.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:31\"}}","rspec.Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb.handles shipment building exceptions.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:23\"}}","rspec.Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb.handles source building exceptions when do not have years and month.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:33\"}}","rspec.Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb.optionally add completed at.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2\"}}","rspec.Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb.raises error clears out order from db.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:35:1\"}}","rspec.Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb.raises with proper message when can't find country.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:20\"}}","rspec.Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb.shipments accepts admin name for stock location.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:22:4\"}}","rspec.Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb.shipments allocates inventory units to the correct shipments.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:22:3\"}}","rspec.Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb.shipments builds them properly.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:22:2\"}}","rspec.Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb.shipments ensures variant exists and is not deleted.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:22:1\"}}","rspec.Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb.shipments raises if can't find stock location.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:22:5\"}}","rspec.Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb.shipments when a shipping adjustment is present creates the shipping adjustment.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:22:6:1\"}}","rspec.Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb.shipments when completed_at and shipped_at present builds them properly.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:22:7:1\"}}","rspec.Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb.variant not deleted ensures variant id from api.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:17:1\"}}","rspec.Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb.variant was deleted raise error as variant shouldn't be found.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:1\"}}","rspec.Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb.with a different currency can handle it when a line order price is specified.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:2\"}}","rspec.Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb.with a different currency sets the order currency.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:1\"}}","rspec.Spree::Core::NumberGenerator at ./spec/lib/spree/core/number_generator_spec.rb.#included generates .number_generator on host returns number generator.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:1\"}}","rspec.Spree::Core::NumberGenerator at ./spec/lib/spree/core/number_generator_spec.rb.#included generates validation hooks on host when permalink field value is nil on defaults and generated candidate is NOT unique and exactly half of the value space taken sets permalink field.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1:1:2:2:1\"}}","rspec.Spree::Core::NumberGenerator at ./spec/lib/spree/core/number_generator_spec.rb.#included generates validation hooks on host when permalink field value is nil on defaults and generated candidate is NOT unique and less than half of the value space taken sets permalink field.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1:1:2:1:1\"}}","rspec.Spree::Core::NumberGenerator at ./spec/lib/spree/core/number_generator_spec.rb.#included generates validation hooks on host when permalink field value is nil on defaults and generated candidate is NOT unique and more than half of the value space is taken sets permalink field.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1:1:2:3:1\"}}","rspec.Spree::Core::NumberGenerator at ./spec/lib/spree/core/number_generator_spec.rb.#included generates validation hooks on host when permalink field value is nil on defaults and generated candidate is unique sets permalink field.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1:1:1:1\"}}","rspec.Spree::Core::NumberGenerator at ./spec/lib/spree/core/number_generator_spec.rb.#included generates validation hooks on host when permalink field value is nil with length: option and generated candidate is NOT unique and exactly half of the value space taken sets permalink field.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1:2:2:2:1\"}}","rspec.Spree::Core::NumberGenerator at ./spec/lib/spree/core/number_generator_spec.rb.#included generates validation hooks on host when permalink field value is nil with length: option and generated candidate is NOT unique and less than half of the value space taken sets permalink field.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1:2:2:1:1\"}}","rspec.Spree::Core::NumberGenerator at ./spec/lib/spree/core/number_generator_spec.rb.#included generates validation hooks on host when permalink field value is nil with length: option and generated candidate is NOT unique and more than half of the value space is taken sets permalink field.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1:2:2:3:1\"}}","rspec.Spree::Core::NumberGenerator at ./spec/lib/spree/core/number_generator_spec.rb.#included generates validation hooks on host when permalink field value is nil with length: option and generated candidate is unique sets permalink field.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1:2:1:1\"}}","rspec.Spree::Core::NumberGenerator at ./spec/lib/spree/core/number_generator_spec.rb.#included generates validation hooks on host when permalink field value is nil with letters option and generated candidate is NOT unique and exactly half of the value space taken sets permalink field.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1:3:2:2:1\"}}","rspec.Spree::Core::NumberGenerator at ./spec/lib/spree/core/number_generator_spec.rb.#included generates validation hooks on host when permalink field value is nil with letters option and generated candidate is NOT unique and less than half of the value space taken sets permalink field.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1:3:2:1:1\"}}","rspec.Spree::Core::NumberGenerator at ./spec/lib/spree/core/number_generator_spec.rb.#included generates validation hooks on host when permalink field value is nil with letters option and generated candidate is NOT unique and more than half of the value space is taken sets permalink field.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1:3:2:3:1\"}}","rspec.Spree::Core::NumberGenerator at ./spec/lib/spree/core/number_generator_spec.rb.#included generates validation hooks on host when permalink field value is nil with letters option and generated candidate is unique sets permalink field.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1:3:1:1\"}}","rspec.Spree::Core::NumberGenerator at ./spec/lib/spree/core/number_generator_spec.rb.#included generates validation hooks on host when permalink field value is present does not touch field.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:2:1\"}}","rspec.Spree::Core::NumberGenerator at ./spec/lib/spree/core/number_generator_spec.rb.#length returns attribute value from options.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","rspec.Spree::Core::NumberGenerator at ./spec/lib/spree/core/number_generator_spec.rb.#length= writes attribute value.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","rspec.Spree::Core::NumberGenerator at ./spec/lib/spree/core/number_generator_spec.rb.#prefix returns attribute value from options.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::Core::NumberGenerator at ./spec/lib/spree/core/number_generator_spec.rb.#prefix= writes attribute value.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.Spree::Core::NumberGenerator at ./spec/lib/spree/core/number_generator_spec.rb.generator method redefinition allows to override generator method.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","rspec.Spree::Core::Partials at ./spec/lib/spree/core/partials_spec.rb.#initialize accepts config and environment parameters.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::Core::Partials at ./spec/lib/spree/core/partials_spec.rb.#initialize sets config and environment.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","rspec.Spree::Core::Partials at ./spec/lib/spree/core/partials_spec.rb.#keys returns partial member names without _partials suffix.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","rspec.Spree::Core::Partials at ./spec/lib/spree/core/partials_spec.rb.#partial_members returns only members ending with _partials.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.Spree::Core::Partials at ./spec/lib/spree/core/partials_spec.rb.dynamically defined methods defines getter methods for all _partials attributes.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","rspec.Spree::Core::Partials at ./spec/lib/spree/core/partials_spec.rb.dynamically defined methods defines setter methods for all _partials attributes.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2\"}}","rspec.Spree::Core::Partials at ./spec/lib/spree/core/partials_spec.rb.dynamically defined methods does not define methods for non-partials attributes.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3\"}}","rspec.Spree::Core::Partials at ./spec/lib/spree/core/partials_spec.rb.getter methods calls the config with the full _partials attribute name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","rspec.Spree::Core::Partials at ./spec/lib/spree/core/partials_spec.rb.getter methods works with different partial types.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2\"}}","rspec.Spree::Core::Partials at ./spec/lib/spree/core/partials_spec.rb.setter methods sets the config with the full _partials attribute name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","rspec.Spree::Core::Partials at ./spec/lib/spree/core/partials_spec.rb.setter methods works with different partial types.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2\"}}","rspec.Spree::Core::TokenGenerator at ./spec/lib/spree/core/token_generator_spec.rb.generate_token generates random token with timestamp.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::Country at ./spec/models/spree/country_spec.rb.#default? no arguments returns false for other countries.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:2\"}}","rspec.Spree::Country at ./spec/models/spree/country_spec.rb.#default? no arguments returns true for store default country.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","rspec.Spree::Country at ./spec/models/spree/country_spec.rb.#default? other store passed returns false for other countries.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:2\"}}","rspec.Spree::Country at ./spec/models/spree/country_spec.rb.#default? other store passed returns true for store default country.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","rspec.Spree::Country at ./spec/models/spree/country_spec.rb..by_iso will return Country by iso.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.Spree::Country at ./spec/models/spree/country_spec.rb..by_iso will return Country by iso3.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","rspec.Spree::Country at ./spec/models/spree/country_spec.rb..by_iso will return Country by lower iso.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:4\"}}","rspec.Spree::Country at ./spec/models/spree/country_spec.rb..by_iso will return nil with wrong iso or iso3.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3\"}}","rspec.Spree::Country at ./spec/models/spree/country_spec.rb.validates uniqueness.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","rspec.Spree::CouponCode at ./spec/models/spree/coupon_code_spec.rb.validations code validates presence.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","rspec.Spree::CouponCode at ./spec/models/spree/coupon_code_spec.rb.validations code validates uniqueness.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2\"}}","rspec.Spree::CouponCodes::BulkGenerateJob at ./spec/jobs/spree/coupon_codes/bulk_generate_job_spec.rb.#perform generates coupon codes.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb.#can_capture? when payment is checkout behaves like can be captured can be captured.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1:1\"}}","rspec.Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb.#can_capture? when payment is invalid cannot be captured.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3:1\"}}","rspec.Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb.#can_capture? when payment is pending behaves like can be captured can be captured.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1:1\"}}","rspec.Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb.#can_credit? when payment is completed when credit_allowed bigger than zero can credit.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:2:1\"}}","rspec.Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb.#can_credit? when payment is completed when credit_allowed is zero behaves like can not credit can not credit.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1:1:1\"}}","rspec.Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb.#can_credit? when payment is not completed behaves like can not credit can not credit.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:1:1\"}}","rspec.Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb.#can_void? when payment is not voided is true.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1\"}}","rspec.Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb.#can_void? when payment is voided is false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1\"}}","rspec.Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb.#cc_type= assigns the type based on card number in the event of js failure.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2\"}}","rspec.Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb.#cc_type= converts between the different types.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1\"}}","rspec.Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb.#display_brand when the cc_type does not exist example at ./spec/models/spree/credit_card_spec.rb:431.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:20:1:1\"}}","rspec.Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb.#display_brand when the cc_type exist example at ./spec/models/spree/credit_card_spec.rb:437.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:20:2:1\"}}","rspec.Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb.#expiry= can set with a 2-digit month and 2-digit year without whitespace and slash.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:5\"}}","rspec.Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb.#expiry= can set with a 2-digit month and 4-digit year without whitespace and slash.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:4\"}}","rspec.Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb.#expiry= can set with a 2-digit month and 4-digit year without whitespace.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:3\"}}","rspec.Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb.#expiry= can set with a 2-digit month and 4-digit year.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:2\"}}","rspec.Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb.#expiry= can set with a 2-digit month and year.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1\"}}","rspec.Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb.#expiry= does not blow up when passed an empty string.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:6\"}}","rspec.Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb.#expiry= does not blow up when passed one number.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:7\"}}","rspec.Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb.#first_name extracts the first name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:1\"}}","rspec.Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb.#last_name extracts the last name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:1\"}}","rspec.Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb.#number= does not raise an exception on non-string input.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2\"}}","rspec.Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb.#number= strips non-numeric characters from card input.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1\"}}","rspec.Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb.#save does not actually store the number.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","rspec.Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb.#save does not actually store the security code.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2\"}}","rspec.Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb.#to_active_merchant converts to an ActiveMerchant::Billing::CreditCard object.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:1\"}}","rspec.Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb.#valid? encrypted data is present does not validate presence of number or cvv.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:5:1\"}}","rspec.Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb.#valid? imported is true does not validate presence of number or cvv.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:6:1\"}}","rspec.Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb.#valid? only validates on create.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:4\"}}","rspec.Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb.#valid? validates name presence.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:3\"}}","rspec.Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb.#valid? validates presence of number.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","rspec.Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb.#valid? validates presence of security code.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2\"}}","rspec.Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb.#verification_value= accepts a valid 3-digit value.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1\"}}","rspec.Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb.#verification_value= accepts a valid 4-digit value.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:2\"}}","rspec.Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb.#verification_value= stringifies an integer.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:3\"}}","rspec.Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb.#verification_value= strips any whitespace.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:4\"}}","rspec.Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb.#wallet_type when the wallet_type does not exist example at ./spec/models/spree/credit_card_spec.rb:446.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:21:1:1\"}}","rspec.Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb.#wallet_type when the wallet_type exists example at ./spec/models/spree/credit_card_spec.rb:452.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:21:2:1\"}}","rspec.Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb.Associations is able to access its payments.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:1\"}}","rspec.Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb.Scopes #capturable does not include credit cards without profile or payment id.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:2:2\"}}","rspec.Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb.Scopes #capturable includes only capturable credit cards.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:2:1\"}}","rspec.Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb.Scopes #not_expired does not include outdated credit cards.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:1:2\"}}","rspec.Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb.Scopes #not_expired includes only not expired credit cards.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:1:1\"}}","rspec.Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb.allows default credit cards for different users.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:17\"}}","rspec.Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb.allows this card to save even if the previously default card has expired.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18\"}}","rspec.Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb.behaves like metadata can query records by metadata properties.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:10\"}}","rspec.Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:10.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","rspec.Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:11.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","rspec.Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:4.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:5.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","rspec.Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:7.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","rspec.Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:8.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","rspec.Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb.behaves like metadata reads data as not symbolized keys.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8\"}}","rspec.Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb.behaves like metadata reads data as symbolized keys.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7\"}}","rspec.Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb.ensures only one credit card per user is default at a time.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16\"}}","rspec.Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb.responds to track_data.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2\"}}","rspec.Spree::CreditCards::Destroy at ./spec/services/spree/credit_cards/destroy_spec.rb.#call destroy credit_card and update payment state.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::CreditCards::Destroy at ./spec/services/spree/credit_cards/destroy_spec.rb.#destroy remove credit_card.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","rspec.Spree::CreditCards::Destroy at ./spec/services/spree/credit_cards/destroy_spec.rb.#invalidate_payments destroy credit_card and invalidate valid checkout payments.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.Spree::CreditCards::Destroy at ./spec/services/spree/credit_cards/destroy_spec.rb.#void_payments destroy credit_card and void valid payments.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","rspec.Spree::CurrencyHelper at ./spec/helpers/currency_helper_spec.rb.#currency_money returns Money::Currency instance for given currency.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","rspec.Spree::CurrencyHelper at ./spec/helpers/currency_helper_spec.rb.#currency_money uses current_currency when no argument is provided.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2\"}}","rspec.Spree::CurrencyHelper at ./spec/helpers/currency_helper_spec.rb.#currency_presentation example at ./spec/helpers/currency_helper_spec.rb:32.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","rspec.Spree::CurrencyHelper at ./spec/helpers/currency_helper_spec.rb.#currency_symbol example at ./spec/helpers/currency_helper_spec.rb:28.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","rspec.Spree::CurrencyHelper at ./spec/helpers/currency_helper_spec.rb.#preferred_currencies returns array of supported currencies from current store as `Money::Currency`.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","rspec.Spree::CurrencyHelper at ./spec/helpers/currency_helper_spec.rb.#should_render_currency_dropdown? store with multiple currencies example at ./spec/helpers/currency_helper_spec.rb:17.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","rspec.Spree::CurrencyHelper at ./spec/helpers/currency_helper_spec.rb.#should_render_currency_dropdown? store with single currency example at ./spec/helpers/currency_helper_spec.rb:23.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","rspec.Spree::CurrencyHelper at ./spec/helpers/currency_helper_spec.rb.#supported_currency_options example at ./spec/helpers/currency_helper_spec.rb:12.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::Current at ./spec/models/spree/current_spec.rb.#currency when currency is not set returns the default currency from the store.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","rspec.Spree::Current at ./spec/models/spree/current_spec.rb.#currency when currency is set returns the set currency.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","rspec.Spree::Current at ./spec/models/spree/current_spec.rb.#global_pricing_context memoizes the context.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:5\"}}","rspec.Spree::Current at ./spec/models/spree/current_spec.rb.#global_pricing_context returns a Spree::Pricing::Context.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","rspec.Spree::Current at ./spec/models/spree/current_spec.rb.#global_pricing_context uses the current currency.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3\"}}","rspec.Spree::Current at ./spec/models/spree/current_spec.rb.#global_pricing_context uses the current store.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2\"}}","rspec.Spree::Current at ./spec/models/spree/current_spec.rb.#global_pricing_context uses the current zone.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:4\"}}","rspec.Spree::Current at ./spec/models/spree/current_spec.rb.#price_lists excludes inactive price lists.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:4\"}}","rspec.Spree::Current at ./spec/models/spree/current_spec.rb.#price_lists includes active price lists.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2\"}}","rspec.Spree::Current at ./spec/models/spree/current_spec.rb.#price_lists includes scheduled price lists within date range.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3\"}}","rspec.Spree::Current at ./spec/models/spree/current_spec.rb.#price_lists memoizes the price lists.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:6\"}}","rspec.Spree::Current at ./spec/models/spree/current_spec.rb.#price_lists returns price lists for the current store.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","rspec.Spree::Current at ./spec/models/spree/current_spec.rb.#price_lists returns price lists ordered by position.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:5\"}}","rspec.Spree::Current at ./spec/models/spree/current_spec.rb.#store when store is not set returns the default store.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","rspec.Spree::Current at ./spec/models/spree/current_spec.rb.#store when store is set returns the set store.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","rspec.Spree::Current at ./spec/models/spree/current_spec.rb.#zone when zone is not set and no default tax zone exists when store has a checkout_zone returns the store checkout_zone.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3:1:1\"}}","rspec.Spree::Current at ./spec/models/spree/current_spec.rb.#zone when zone is not set and no default tax zone exists when store has no checkout_zone returns nil.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3:2:1\"}}","rspec.Spree::Current at ./spec/models/spree/current_spec.rb.#zone when zone is not set returns the default tax zone.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","rspec.Spree::Current at ./spec/models/spree/current_spec.rb.#zone when zone is set returns the set zone.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","rspec.Spree::Current at ./spec/models/spree/current_spec.rb..reset clears memoized global_pricing_context.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:3\"}}","rspec.Spree::Current at ./spec/models/spree/current_spec.rb..reset clears memoized price_lists.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2\"}}","rspec.Spree::Current at ./spec/models/spree/current_spec.rb..reset resets all attributes.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","rspec.Spree::CustomDomain at ./spec/models/spree/custom_domain_spec.rb.Callbacks touch store touches the store when the custom domain is created.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","rspec.Spree::CustomDomain at ./spec/models/spree/custom_domain_spec.rb.Validations #sanitize_url removes https:// and http:// from the url.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","rspec.Spree::CustomDomain at ./spec/models/spree/custom_domain_spec.rb.Validations #url_is_valid is invalid with wrong number of parts.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:3\"}}","rspec.Spree::CustomDomain at ./spec/models/spree/custom_domain_spec.rb.Validations #url_is_valid is valid with composed tlds.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2\"}}","rspec.Spree::CustomDomain at ./spec/models/spree/custom_domain_spec.rb.Validations #url_is_valid is valid with valid url.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","rspec.Spree::CustomerGroup at ./spec/models/spree/customer_group_spec.rb.#add_customers adds customers to the group.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","rspec.Spree::CustomerGroup at ./spec/models/spree/customer_group_spec.rb.#add_customers does not touch users that were already in the group.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:8\"}}","rspec.Spree::CustomerGroup at ./spec/models/spree/customer_group_spec.rb.#add_customers handles empty array.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:5\"}}","rspec.Spree::CustomerGroup at ./spec/models/spree/customer_group_spec.rb.#add_customers handles nil.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:6\"}}","rspec.Spree::CustomerGroup at ./spec/models/spree/customer_group_spec.rb.#add_customers returns 0 when no users are added.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:4\"}}","rspec.Spree::CustomerGroup at ./spec/models/spree/customer_group_spec.rb.#add_customers returns the count of added customers.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2\"}}","rspec.Spree::CustomerGroup at ./spec/models/spree/customer_group_spec.rb.#add_customers skips users already in the group.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:3\"}}","rspec.Spree::CustomerGroup at ./spec/models/spree/customer_group_spec.rb.#add_customers touches the added users.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:7\"}}","rspec.Spree::CustomerGroup at ./spec/models/spree/customer_group_spec.rb.#remove_customers does not touch users that were not in the group.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:7\"}}","rspec.Spree::CustomerGroup at ./spec/models/spree/customer_group_spec.rb.#remove_customers handles empty array.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:4\"}}","rspec.Spree::CustomerGroup at ./spec/models/spree/customer_group_spec.rb.#remove_customers handles nil.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:5\"}}","rspec.Spree::CustomerGroup at ./spec/models/spree/customer_group_spec.rb.#remove_customers removes customers from the group.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","rspec.Spree::CustomerGroup at ./spec/models/spree/customer_group_spec.rb.#remove_customers returns 0 when users are not in the group.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:3\"}}","rspec.Spree::CustomerGroup at ./spec/models/spree/customer_group_spec.rb.#remove_customers returns the count of removed customers.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2\"}}","rspec.Spree::CustomerGroup at ./spec/models/spree/customer_group_spec.rb.#remove_customers touches the removed users.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:6\"}}","rspec.Spree::CustomerGroup at ./spec/models/spree/customer_group_spec.rb.#users_count returns the number of users in the group.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","rspec.Spree::CustomerGroup at ./spec/models/spree/customer_group_spec.rb.associations example at ./spec/models/spree/customer_group_spec.rb:10.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","rspec.Spree::CustomerGroup at ./spec/models/spree/customer_group_spec.rb.associations example at ./spec/models/spree/customer_group_spec.rb:8.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::CustomerGroup at ./spec/models/spree/customer_group_spec.rb.associations example at ./spec/models/spree/customer_group_spec.rb:9.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","rspec.Spree::CustomerGroup at ./spec/models/spree/customer_group_spec.rb.scopes .for_store returns groups for the specified store.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","rspec.Spree::CustomerGroup at ./spec/models/spree/customer_group_spec.rb.soft delete supports soft deletion.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","rspec.Spree::CustomerGroup at ./spec/models/spree/customer_group_spec.rb.validations example at ./spec/models/spree/customer_group_spec.rb:14.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.Spree::CustomerGroup at ./spec/models/spree/customer_group_spec.rb.validations example at ./spec/models/spree/customer_group_spec.rb:15.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","rspec.Spree::CustomerGroup at ./spec/models/spree/customer_group_spec.rb.validations uniqueness allows same name in different store.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:2\"}}","rspec.Spree::CustomerGroup at ./spec/models/spree/customer_group_spec.rb.validations uniqueness validates uniqueness of name within store scope.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:1\"}}","rspec.Spree::CustomerGroupUser at ./spec/models/spree/customer_group_user_spec.rb.associations example at ./spec/models/spree/customer_group_user_spec.rb:8.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::CustomerGroupUser at ./spec/models/spree/customer_group_user_spec.rb.associations example at ./spec/models/spree/customer_group_user_spec.rb:9.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","rspec.Spree::CustomerGroupUser at ./spec/models/spree/customer_group_user_spec.rb.validations example at ./spec/models/spree/customer_group_user_spec.rb:13.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.Spree::CustomerGroupUser at ./spec/models/spree/customer_group_user_spec.rb.validations example at ./spec/models/spree/customer_group_user_spec.rb:14.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","rspec.Spree::CustomerGroupUser at ./spec/models/spree/customer_group_user_spec.rb.validations uniqueness allows same user in different groups.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:2\"}}","rspec.Spree::CustomerGroupUser at ./spec/models/spree/customer_group_user_spec.rb.validations uniqueness validates uniqueness of customer_group_id within user scope.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:1\"}}","rspec.Spree::CustomerReturn at ./spec/models/spree/customer_return_spec.rb.#currency example at ./spec/models/spree/customer_return_spec.rb:170.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1\"}}","rspec.Spree::CustomerReturn at ./spec/models/spree/customer_return_spec.rb.#display_pre_tax_total example at ./spec/models/spree/customer_return_spec.rb:133.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","rspec.Spree::CustomerReturn at ./spec/models/spree/customer_return_spec.rb.#display_pre_tax_total returns a Spree::Money.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","rspec.Spree::CustomerReturn at ./spec/models/spree/customer_return_spec.rb.#fully_reimbursed? when all return items are decided when all return items are accepted when all return items have a reimbursement when all reimbursements are reimbursed example at ./spec/models/spree/customer_return_spec.rb:310.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:2:2:2:2:1\"}}","rspec.Spree::CustomerReturn at ./spec/models/spree/customer_return_spec.rb.#fully_reimbursed? when all return items are decided when all return items are accepted when all return items have a reimbursement when some reimbursements are not reimbursed example at ./spec/models/spree/customer_return_spec.rb:304.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:2:2:2:1:1\"}}","rspec.Spree::CustomerReturn at ./spec/models/spree/customer_return_spec.rb.#fully_reimbursed? when all return items are decided when all return items are accepted when some return items have no reimbursement example at ./spec/models/spree/customer_return_spec.rb:297.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:2:2:1:1\"}}","rspec.Spree::CustomerReturn at ./spec/models/spree/customer_return_spec.rb.#fully_reimbursed? when all return items are decided when all return items are rejected example at ./spec/models/spree/customer_return_spec.rb:290.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:2:1:1\"}}","rspec.Spree::CustomerReturn at ./spec/models/spree/customer_return_spec.rb.#fully_reimbursed? when some return items are undecided example at ./spec/models/spree/customer_return_spec.rb:283.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:1:1\"}}","rspec.Spree::CustomerReturn at ./spec/models/spree/customer_return_spec.rb.#order return item without inventory unit returns nil.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:2:1\"}}","rspec.Spree::CustomerReturn at ./spec/models/spree/customer_return_spec.rb.#order returns the order associated with the return item's inventory unit.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1\"}}","rspec.Spree::CustomerReturn at ./spec/models/spree/customer_return_spec.rb.#order_id has an associated return item is the return item's inventory unit's order id.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:2:1\"}}","rspec.Spree::CustomerReturn at ./spec/models/spree/customer_return_spec.rb.#order_id return item is not associated yet is nil.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1:1\"}}","rspec.Spree::CustomerReturn at ./spec/models/spree/customer_return_spec.rb.#pre_tax_total returns the sum of the return item's pre_tax_amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","rspec.Spree::CustomerReturn at ./spec/models/spree/customer_return_spec.rb..after_save to a different stock location does not raise an error when no stock item exists in the stock location.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2:2\"}}","rspec.Spree::CustomerReturn at ./spec/models/spree/customer_return_spec.rb..after_save to a different stock location does not update the stock item counts in the original stock location.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2:3\"}}","rspec.Spree::CustomerReturn at ./spec/models/spree/customer_return_spec.rb..after_save to a different stock location updates the stock item counts in new stock location.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2:1\"}}","rspec.Spree::CustomerReturn at ./spec/models/spree/customer_return_spec.rb..after_save to the initial stock location marks all inventory units are returned.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1:1\"}}","rspec.Spree::CustomerReturn at ./spec/models/spree/customer_return_spec.rb..after_save to the initial stock location updates the stock item counts in the stock location.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1:2\"}}","rspec.Spree::CustomerReturn at ./spec/models/spree/customer_return_spec.rb..after_save to the initial stock location with Config.track_inventory_levels == false does not update the stock item counts in the stock location.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1:3:1\"}}","rspec.Spree::CustomerReturn at ./spec/models/spree/customer_return_spec.rb..validation #must_have_return_authorization return item belongs to return authorization is valid.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:2:1\"}}","rspec.Spree::CustomerReturn at ./spec/models/spree/customer_return_spec.rb..validation #must_have_return_authorization return item does not belong to return authorization adds an error message.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1:2\"}}","rspec.Spree::CustomerReturn at ./spec/models/spree/customer_return_spec.rb..validation #must_have_return_authorization return item does not belong to return authorization is not valid.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1:1\"}}","rspec.Spree::CustomerReturn at ./spec/models/spree/customer_return_spec.rb..validation #return_items_belong_to_same_order return items are part of different orders adds an error message.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1:2\"}}","rspec.Spree::CustomerReturn at ./spec/models/spree/customer_return_spec.rb..validation #return_items_belong_to_same_order return items are part of different orders is not valid.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1:1\"}}","rspec.Spree::CustomerReturn at ./spec/models/spree/customer_return_spec.rb..validation #return_items_belong_to_same_order return items are part of the same order is valid.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:2:1\"}}","rspec.Spree::CustomerReturn at ./spec/models/spree/customer_return_spec.rb.behaves like metadata can query records by metadata properties.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:10\"}}","rspec.Spree::CustomerReturn at ./spec/models/spree/customer_return_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:10.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","rspec.Spree::CustomerReturn at ./spec/models/spree/customer_return_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:11.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","rspec.Spree::CustomerReturn at ./spec/models/spree/customer_return_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:4.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::CustomerReturn at ./spec/models/spree/customer_return_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:5.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","rspec.Spree::CustomerReturn at ./spec/models/spree/customer_return_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:7.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","rspec.Spree::CustomerReturn at ./spec/models/spree/customer_return_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:8.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","rspec.Spree::CustomerReturn at ./spec/models/spree/customer_return_spec.rb.behaves like metadata reads data as not symbolized keys.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8\"}}","rspec.Spree::CustomerReturn at ./spec/models/spree/customer_return_spec.rb.behaves like metadata reads data as symbolized keys.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7\"}}","rspec.Spree::CustomerReturn at ./spec/models/spree/customer_return_spec.rb.lifecycle events customer_return.created publishes created event when record is created.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","rspec.Spree::CustomerReturn at ./spec/models/spree/customer_return_spec.rb.lifecycle events customer_return.deleted publishes deleted event when record is destroyed.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:1\"}}","rspec.Spree::CustomerReturn at ./spec/models/spree/customer_return_spec.rb.lifecycle events customer_return.updated publishes updated event when record is updated.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","rspec.Spree::CustomerReturn at ./spec/models/spree/customer_return_spec.rb.whitelisted_ransackable_attributes example at ./spec/models/spree/customer_return_spec.rb:120.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","rspec.Spree::DataFeed::Google at ./spec/models/spree/data_feed/google_spec.rb.#create when slug is not provided generates slug automatically.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","rspec.Spree::DataFeed::Google at ./spec/models/spree/data_feed/google_spec.rb.#create when slug is provided uses the slug provided.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","rspec.Spree::DataFeed::Google at ./spec/models/spree/data_feed/google_spec.rb.#formatted_url returns full url to the data feed.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.Spree::DataFeed::Google at ./spec/models/spree/data_feed/google_spec.rb..label returns a descriptive label.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","rspec.Spree::DataFeeds::Google::RequiredAttributes at ./spec/services/spree/data_feeds/google/required_attributes_spec.rb.#call does not mutate product name when generating titles for multiple variants.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::DataFeeds::Google::Rss at ./spec/services/spree/data_feeds/google/rss_spec.rb.optional item attributes are generated correctly adds brand to item attributes.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","rspec.Spree::DataFeeds::Google::Rss at ./spec/services/spree/data_feeds/google/rss_spec.rb.required item attributes are generated correctly availability date is nil shows that product availability date is nil.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:10:2\"}}","rspec.Spree::DataFeeds::Google::Rss at ./spec/services/spree/data_feeds/google/rss_spec.rb.required item attributes are generated correctly availability date is nil shows that product is in stock.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:10:1\"}}","rspec.Spree::DataFeeds::Google::Rss at ./spec/services/spree/data_feeds/google/rss_spec.rb.required item attributes are generated correctly includes description.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:4\"}}","rspec.Spree::DataFeeds::Google::Rss at ./spec/services/spree/data_feeds/google/rss_spec.rb.required item attributes are generated correctly includes id.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.Spree::DataFeeds::Google::Rss at ./spec/services/spree/data_feeds/google/rss_spec.rb.required item attributes are generated correctly includes image link.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:6\"}}","rspec.Spree::DataFeeds::Google::Rss at ./spec/services/spree/data_feeds/google/rss_spec.rb.required item attributes are generated correctly includes link.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:5\"}}","rspec.Spree::DataFeeds::Google::Rss at ./spec/services/spree/data_feeds/google/rss_spec.rb.required item attributes are generated correctly includes price.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:7\"}}","rspec.Spree::DataFeeds::Google::Rss at ./spec/services/spree/data_feeds/google/rss_spec.rb.required item attributes are generated correctly includes product id as item_group_id.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","rspec.Spree::DataFeeds::Google::Rss at ./spec/services/spree/data_feeds/google/rss_spec.rb.required item attributes are generated correctly includes title.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3\"}}","rspec.Spree::DataFeeds::Google::Rss at ./spec/services/spree/data_feeds/google/rss_spec.rb.required item attributes are generated correctly product is set to available shows that product availability date is the same.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:8:2\"}}","rspec.Spree::DataFeeds::Google::Rss at ./spec/services/spree/data_feeds/google/rss_spec.rb.required item attributes are generated correctly product is set to available shows that product is in stock.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:8:1\"}}","rspec.Spree::DataFeeds::Google::Rss at ./spec/services/spree/data_feeds/google/rss_spec.rb.required item attributes are generated correctly product is set to backorderable shows that product is on backorder.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:9:1\"}}","rspec.Spree::DataFeeds::Google::Rss at ./spec/services/spree/data_feeds/google/rss_spec.rb.store header is generated correctly include store name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::DataFeeds::Google::Rss at ./spec/services/spree/data_feeds/google/rss_spec.rb.store header is generated correctly includes store description.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","rspec.Spree::DataFeeds::Google::Rss at ./spec/services/spree/data_feeds/google/rss_spec.rb.store header is generated correctly includes store url.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","rspec.Spree::Digital at ./spec/models/spree/digital_spec.rb.behaves like lifecycle events lifecycle events digital.created publishes created event when record is created.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","rspec.Spree::Digital at ./spec/models/spree/digital_spec.rb.behaves like lifecycle events lifecycle events digital.deleted publishes deleted event when record is deleted.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:1\"}}","rspec.Spree::Digital at ./spec/models/spree/digital_spec.rb.behaves like lifecycle events lifecycle events digital.updated publishes updated event when record is updated.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","rspec.Spree::Digital at ./spec/models/spree/digital_spec.rb.validates presence of attachment and variant.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4\"}}","rspec.Spree::Digital at ./spec/models/spree/digital_spec.rb.validates presence of attachment.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3\"}}","rspec.Spree::Digital at ./spec/models/spree/digital_spec.rb.validates presence of variant.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2\"}}","rspec.Spree::DigitalLink at ./spec/models/spree/digital_link_spec.rb.#access_limit_exceeded? count exceeded but the store does not limit digital download count example at ./spec/models/spree/digital_link_spec.rb:114.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2:1\"}}","rspec.Spree::DigitalLink at ./spec/models/spree/digital_link_spec.rb.#access_limit_exceeded? count exceeded example at ./spec/models/spree/digital_link_spec.rb:102.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1:1\"}}","rspec.Spree::DigitalLink at ./spec/models/spree/digital_link_spec.rb.#access_limit_exceeded? still in count range example at ./spec/models/spree/digital_link_spec.rb:120.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:3:1\"}}","rspec.Spree::DigitalLink at ./spec/models/spree/digital_link_spec.rb.#authorizable? count exceeded but the store does not limit digital download count example at ./spec/models/spree/digital_link_spec.rb:146.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:2:1\"}}","rspec.Spree::DigitalLink at ./spec/models/spree/digital_link_spec.rb.#authorizable? count exceeded example at ./spec/models/spree/digital_link_spec.rb:134.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1:1\"}}","rspec.Spree::DigitalLink at ./spec/models/spree/digital_link_spec.rb.#authorizable? out of date but the store does not track date of expire example at ./spec/models/spree/digital_link_spec.rb:176.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:5:1\"}}","rspec.Spree::DigitalLink at ./spec/models/spree/digital_link_spec.rb.#authorizable? out of date example at ./spec/models/spree/digital_link_spec.rb:164.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:4:1\"}}","rspec.Spree::DigitalLink at ./spec/models/spree/digital_link_spec.rb.#authorizable? still in count range example at ./spec/models/spree/digital_link_spec.rb:152.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:3:1\"}}","rspec.Spree::DigitalLink at ./spec/models/spree/digital_link_spec.rb.#authorizable? still in date example at ./spec/models/spree/digital_link_spec.rb:182.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:6:1\"}}","rspec.Spree::DigitalLink at ./spec/models/spree/digital_link_spec.rb.#expired? out of date but the store does not track date of expire example at ./spec/models/spree/digital_link_spec.rb:82.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2:1\"}}","rspec.Spree::DigitalLink at ./spec/models/spree/digital_link_spec.rb.#expired? out of date example at ./spec/models/spree/digital_link_spec.rb:70.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1:1\"}}","rspec.Spree::DigitalLink at ./spec/models/spree/digital_link_spec.rb.#expired? still in date example at ./spec/models/spree/digital_link_spec.rb:88.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:3:1\"}}","rspec.Spree::DigitalLink at ./spec/models/spree/digital_link_spec.rb.#reset! resets access_counter.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","rspec.Spree::DigitalLink at ./spec/models/spree/digital_link_spec.rb.#reset! resets created_at timestamp.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2\"}}","rspec.Spree::DigitalLink at ./spec/models/spree/digital_link_spec.rb.authorize! does not touch the digital_link if not authorized.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:3\"}}","rspec.Spree::DigitalLink at ./spec/models/spree/digital_link_spec.rb.authorize! increments the access counter.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1\"}}","rspec.Spree::DigitalLink at ./spec/models/spree/digital_link_spec.rb.authorize! touches the digital_link when autorized.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:2\"}}","rspec.Spree::DigitalLink at ./spec/models/spree/digital_link_spec.rb.behaves like lifecycle events lifecycle events digital_link.created publishes created event when record is created.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","rspec.Spree::DigitalLink at ./spec/models/spree/digital_link_spec.rb.behaves like lifecycle events lifecycle events digital_link.deleted publishes deleted event when record is deleted.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:1\"}}","rspec.Spree::DigitalLink at ./spec/models/spree/digital_link_spec.rb.behaves like lifecycle events lifecycle events digital_link.updated publishes updated event when record is updated.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","rspec.Spree::DigitalLink at ./spec/models/spree/digital_link_spec.rb.validates access_counter validates access_counter 0 is valid.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3\"}}","rspec.Spree::DigitalLink at ./spec/models/spree/digital_link_spec.rb.validates access_counter validates access_counter 0 or greater.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2\"}}","rspec.Spree::DigitalLink at ./spec/models/spree/digital_link_spec.rb.validates access_counter validates access_counter numericality.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","rspec.Spree::DigitalLink at ./spec/models/spree/digital_link_spec.rb.validates presence of digital and line_item.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2\"}}","rspec.Spree::DigitalLink at ./spec/models/spree/digital_link_spec.rb.validates presence of digital.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4\"}}","rspec.Spree::DigitalLink at ./spec/models/spree/digital_link_spec.rb.validates presence of line_item.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3\"}}","rspec.Spree::DisplayMoney at ./spec/models/spree/concerns/display_money_spec.rb..money_methods currency is defined generates a display_* method that builds a Spree::Money with currency.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","rspec.Spree::DisplayMoney at ./spec/models/spree/concerns/display_money_spec.rb..money_methods currency is not defined generates a display_method that builds a Spree::Money without options.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","rspec.Spree::DisplayMoney at ./spec/models/spree/concerns/display_money_spec.rb..money_methods currency is not defined wrapped method accepts `:currency` keyword argument defined method passes the received keyword argument to the wrapped method.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","rspec.Spree::DisplayMoney at ./spec/models/spree/concerns/display_money_spec.rb..money_methods currency is not defined wrapped method accepts `currency` argument defined method passes the received keyword argument to the wrapped method.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:1\"}}","rspec.Spree::DisplayMoney at ./spec/models/spree/concerns/display_money_spec.rb..money_methods with multiple + options generates a display_* method that builds a Spree::Money with the specified options.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","rspec.Spree::Event at ./spec/models/spree/event_spec.rb.#action extracts the action from the event name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","rspec.Spree::Event at ./spec/models/spree/event_spec.rb.#action handles multi-part actions.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2\"}}","rspec.Spree::Event at ./spec/models/spree/event_spec.rb.#attributes returns a hash representation with string keys.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1\"}}","rspec.Spree::Event at ./spec/models/spree/event_spec.rb.#initialize accepts custom metadata.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","rspec.Spree::Event at ./spec/models/spree/event_spec.rb.#initialize accepts explicit store_id.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:9\"}}","rspec.Spree::Event at ./spec/models/spree/event_spec.rb.#initialize creates an event with name and payload.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::Event at ./spec/models/spree/event_spec.rb.#initialize deep stringifies payload keys.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7\"}}","rspec.Spree::Event at ./spec/models/spree/event_spec.rb.#initialize freezes the payload and metadata.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","rspec.Spree::Event at ./spec/models/spree/event_spec.rb.#initialize generates an id.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","rspec.Spree::Event at ./spec/models/spree/event_spec.rb.#initialize includes spree_version in metadata.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","rspec.Spree::Event at ./spec/models/spree/event_spec.rb.#initialize sets created_at.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","rspec.Spree::Event at ./spec/models/spree/event_spec.rb.#initialize sets store_id from Spree::Current.store.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8\"}}","rspec.Spree::Event at ./spec/models/spree/event_spec.rb.#inspect returns a readable string representation.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1\"}}","rspec.Spree::Event at ./spec/models/spree/event_spec.rb.#matches? matches exact event names.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","rspec.Spree::Event at ./spec/models/spree/event_spec.rb.#matches? matches global wildcard.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:3\"}}","rspec.Spree::Event at ./spec/models/spree/event_spec.rb.#matches? matches wildcard patterns.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2\"}}","rspec.Spree::Event at ./spec/models/spree/event_spec.rb.#resource_type extracts the resource type from the event name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","rspec.Spree::Event at ./spec/models/spree/event_spec.rb.#resource_type handles nested event names.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2\"}}","rspec.Spree::Event at ./spec/models/spree/event_spec.rb.#store memoizes the store lookup.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3\"}}","rspec.Spree::Event at ./spec/models/spree/event_spec.rb.#store returns nil when store_id is blank.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","rspec.Spree::Event at ./spec/models/spree/event_spec.rb.#store returns the store for the store_id.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","rspec.Spree::Event at ./spec/models/spree/event_spec.rb..matches? handles complex patterns.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:4\"}}","rspec.Spree::Event at ./spec/models/spree/event_spec.rb..matches? matches exact names.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","rspec.Spree::Event at ./spec/models/spree/event_spec.rb..matches? matches global wildcard.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:3\"}}","rspec.Spree::Event at ./spec/models/spree/event_spec.rb..matches? matches wildcard patterns.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2\"}}","rspec.Spree::Event at ./spec/models/spree/event_spec.rb.validations is valid with name and store_id.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3\"}}","rspec.Spree::Event at ./spec/models/spree/event_spec.rb.validations requires name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.Spree::Event at ./spec/models/spree/event_spec.rb.validations requires store_id.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","rspec.Spree::EventLogSubscriber at ./spec/subscribers/spree/event_log_subscriber_spec.rb..attach_to_notifications can be called multiple times safely (for code reload support).{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","rspec.Spree::EventLogSubscriber at ./spec/subscribers/spree/event_log_subscriber_spec.rb..attach_to_notifications subscribes to Spree events.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::EventLogSubscriber at ./spec/subscribers/spree/event_log_subscriber_spec.rb..detach_from_notifications unsubscribes from notifications.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.Spree::EventLogSubscriber at ./spec/subscribers/spree/event_log_subscriber_spec.rb.logging events filtering sensitive parameters does not filter non-sensitive data.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:4\"}}","rspec.Spree::EventLogSubscriber at ./spec/subscribers/spree/event_log_subscriber_spec.rb.logging events filtering sensitive parameters filters credit card number from payload.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:2\"}}","rspec.Spree::EventLogSubscriber at ./spec/subscribers/spree/event_log_subscriber_spec.rb.logging events filtering sensitive parameters filters password from payload.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","rspec.Spree::EventLogSubscriber at ./spec/subscribers/spree/event_log_subscriber_spec.rb.logging events filtering sensitive parameters filters verification_value from payload.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:3\"}}","rspec.Spree::EventLogSubscriber at ./spec/subscribers/spree/event_log_subscriber_spec.rb.logging events logs events to Rails logger.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","rspec.Spree::Events at ./spec/lib/spree/events_spec.rb..disable disables events within the block.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","rspec.Spree::Events at ./spec/lib/spree/events_spec.rb..disable handles nested disable blocks.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:3\"}}","rspec.Spree::Events at ./spec/lib/spree/events_spec.rb..disable restores enabled state after the block.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2\"}}","rspec.Spree::Events at ./spec/lib/spree/events_spec.rb..enabled? returns false when disabled.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2\"}}","rspec.Spree::Events at ./spec/lib/spree/events_spec.rb..enabled? returns true by default.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","rspec.Spree::Events at ./spec/lib/spree/events_spec.rb..patterns returns all registered patterns.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","rspec.Spree::Events at ./spec/lib/spree/events_spec.rb..publish notifies subscribers synchronously when async: false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","rspec.Spree::Events at ./spec/lib/spree/events_spec.rb..publish publishes an event.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::Events at ./spec/lib/spree/events_spec.rb..register_subscribers! registers subscribers from Spree.subscribers.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1\"}}","rspec.Spree::Events at ./spec/lib/spree/events_spec.rb..register_subscribers! resolves subscriber classes fresh (for code reload support).{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2\"}}","rspec.Spree::Events at ./spec/lib/spree/events_spec.rb..reset! clears all subscriptions.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1\"}}","rspec.Spree::Events at ./spec/lib/spree/events_spec.rb..resolve_subscriber handles string class names.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:3\"}}","rspec.Spree::Events at ./spec/lib/spree/events_spec.rb..resolve_subscriber resolves subscriber by name in development.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:2\"}}","rspec.Spree::Events at ./spec/lib/spree/events_spec.rb..resolve_subscriber returns nil for anonymous classes.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:5\"}}","rspec.Spree::Events at ./spec/lib/spree/events_spec.rb..resolve_subscriber returns nil for invalid class names.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:4\"}}","rspec.Spree::Events at ./spec/lib/spree/events_spec.rb..resolve_subscriber returns the subscriber directly in production.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1\"}}","rspec.Spree::Events at ./spec/lib/spree/events_spec.rb..subscribe raises error when no subscriber provided.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:5\"}}","rspec.Spree::Events at ./spec/lib/spree/events_spec.rb..subscribe subscribes with a block.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.Spree::Events at ./spec/lib/spree/events_spec.rb..subscribe subscribes with a class.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","rspec.Spree::Events at ./spec/lib/spree/events_spec.rb..subscribe supports global wildcard.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:4\"}}","rspec.Spree::Events at ./spec/lib/spree/events_spec.rb..subscribe supports pattern matching with wildcards.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3\"}}","rspec.Spree::Events at ./spec/lib/spree/events_spec.rb..subscriptions returns all subscriptions.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","rspec.Spree::Events at ./spec/lib/spree/events_spec.rb..unsubscribe removes a subscriber.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","rspec.Spree::Events at ./spec/lib/spree/events_spec.rb.multiple subscribers handles mixed pattern and exact subscribers.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:2\"}}","rspec.Spree::Events at ./spec/lib/spree/events_spec.rb.multiple subscribers notifies all matching subscribers.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1\"}}","rspec.Spree::Events::AssetSerializer at ./spec/serializers/spree/events/asset_serializer_spec.rb.#as_json includes alt text.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","rspec.Spree::Events::AssetSerializer at ./spec/serializers/spree/events/asset_serializer_spec.rb.#as_json includes identity attributes.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::Events::AssetSerializer at ./spec/serializers/spree/events/asset_serializer_spec.rb.#as_json includes position.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","rspec.Spree::Events::AssetSerializer at ./spec/serializers/spree/events/asset_serializer_spec.rb.#as_json includes timestamps.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","rspec.Spree::Events::AssetSerializer at ./spec/serializers/spree/events/asset_serializer_spec.rb.#as_json includes viewable polymorphic reference.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","rspec.Spree::Events::BaseSerializer at ./spec/serializers/spree/events/base_serializer_spec.rb.#as_json formats timestamps as ISO8601.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","rspec.Spree::Events::BaseSerializer at ./spec/serializers/spree/events/base_serializer_spec.rb.#as_json returns a hash with attributes.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::Events::BaseSerializer at ./spec/serializers/spree/events/base_serializer_spec.rb.#attribute returns nil if the attribute does not exist.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2\"}}","rspec.Spree::Events::BaseSerializer at ./spec/serializers/spree/events/base_serializer_spec.rb.#attribute returns the attribute value if it exists.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","rspec.Spree::Events::BaseSerializer at ./spec/serializers/spree/events/base_serializer_spec.rb.#event_name returns the event name from context.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","rspec.Spree::Events::BaseSerializer at ./spec/serializers/spree/events/base_serializer_spec.rb.#money returns decimal value for BigDecimal.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3\"}}","rspec.Spree::Events::BaseSerializer at ./spec/serializers/spree/events/base_serializer_spec.rb.#money returns decimal value for numbers.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2\"}}","rspec.Spree::Events::BaseSerializer at ./spec/serializers/spree/events/base_serializer_spec.rb.#money returns nil for nil values.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","rspec.Spree::Events::BaseSerializer at ./spec/serializers/spree/events/base_serializer_spec.rb.#timestamp returns ISO8601 formatted string.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","rspec.Spree::Events::BaseSerializer at ./spec/serializers/spree/events/base_serializer_spec.rb.#timestamp returns nil for nil values.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","rspec.Spree::Events::BaseSerializer at ./spec/serializers/spree/events/base_serializer_spec.rb..serialize creates an instance and calls as_json.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.Spree::Events::CustomerReturnSerializer at ./spec/serializers/spree/events/customer_return_serializer_spec.rb.#as_json includes foreign keys.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","rspec.Spree::Events::CustomerReturnSerializer at ./spec/serializers/spree/events/customer_return_serializer_spec.rb.#as_json includes identity attributes.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::Events::CustomerReturnSerializer at ./spec/serializers/spree/events/customer_return_serializer_spec.rb.#as_json includes timestamps.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","rspec.Spree::Events::DigitalLinkSerializer at ./spec/serializers/spree/events/digital_link_serializer_spec.rb.#as_json includes access_counter.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","rspec.Spree::Events::DigitalLinkSerializer at ./spec/serializers/spree/events/digital_link_serializer_spec.rb.#as_json includes foreign keys.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","rspec.Spree::Events::DigitalLinkSerializer at ./spec/serializers/spree/events/digital_link_serializer_spec.rb.#as_json includes identity attributes.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::Events::DigitalLinkSerializer at ./spec/serializers/spree/events/digital_link_serializer_spec.rb.#as_json includes timestamps.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","rspec.Spree::Events::DigitalSerializer at ./spec/serializers/spree/events/digital_serializer_spec.rb.#as_json includes identity attributes.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::Events::DigitalSerializer at ./spec/serializers/spree/events/digital_serializer_spec.rb.#as_json includes timestamps.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","rspec.Spree::Events::DigitalSerializer at ./spec/serializers/spree/events/digital_serializer_spec.rb.#as_json includes variant_id.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","rspec.Spree::Events::ExportSerializer at ./spec/serializers/spree/events/export_serializer_spec.rb.#as_json includes foreign keys.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","rspec.Spree::Events::ExportSerializer at ./spec/serializers/spree/events/export_serializer_spec.rb.#as_json includes format.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","rspec.Spree::Events::ExportSerializer at ./spec/serializers/spree/events/export_serializer_spec.rb.#as_json includes identity attributes.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::Events::ExportSerializer at ./spec/serializers/spree/events/export_serializer_spec.rb.#as_json includes timestamps.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","rspec.Spree::Events::ExportSerializer at ./spec/serializers/spree/events/export_serializer_spec.rb.#as_json includes type.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","rspec.Spree::Events::GiftCardBatchSerializer at ./spec/serializers/spree/events/gift_card_batch_serializer_spec.rb.#as_json includes amount fields.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","rspec.Spree::Events::GiftCardBatchSerializer at ./spec/serializers/spree/events/gift_card_batch_serializer_spec.rb.#as_json includes codes_count.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","rspec.Spree::Events::GiftCardBatchSerializer at ./spec/serializers/spree/events/gift_card_batch_serializer_spec.rb.#as_json includes expires_at.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","rspec.Spree::Events::GiftCardBatchSerializer at ./spec/serializers/spree/events/gift_card_batch_serializer_spec.rb.#as_json includes foreign keys.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","rspec.Spree::Events::GiftCardBatchSerializer at ./spec/serializers/spree/events/gift_card_batch_serializer_spec.rb.#as_json includes identity attributes.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::Events::GiftCardBatchSerializer at ./spec/serializers/spree/events/gift_card_batch_serializer_spec.rb.#as_json includes prefix.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","rspec.Spree::Events::GiftCardBatchSerializer at ./spec/serializers/spree/events/gift_card_batch_serializer_spec.rb.#as_json includes timestamps.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7\"}}","rspec.Spree::Events::GiftCardSerializer at ./spec/serializers/spree/events/gift_card_serializer_spec.rb.#as_json includes amount fields.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","rspec.Spree::Events::GiftCardSerializer at ./spec/serializers/spree/events/gift_card_serializer_spec.rb.#as_json includes currency.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","rspec.Spree::Events::GiftCardSerializer at ./spec/serializers/spree/events/gift_card_serializer_spec.rb.#as_json includes dates.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","rspec.Spree::Events::GiftCardSerializer at ./spec/serializers/spree/events/gift_card_serializer_spec.rb.#as_json includes foreign keys.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","rspec.Spree::Events::GiftCardSerializer at ./spec/serializers/spree/events/gift_card_serializer_spec.rb.#as_json includes identity attributes.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::Events::GiftCardSerializer at ./spec/serializers/spree/events/gift_card_serializer_spec.rb.#as_json includes state as string.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","rspec.Spree::Events::GiftCardSerializer at ./spec/serializers/spree/events/gift_card_serializer_spec.rb.#as_json includes timestamps.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7\"}}","rspec.Spree::Events::ImportRowSerializer at ./spec/serializers/spree/events/import_row_serializer_spec.rb.#as_json includes identity attributes.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::Events::ImportRowSerializer at ./spec/serializers/spree/events/import_row_serializer_spec.rb.#as_json includes import reference.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","rspec.Spree::Events::ImportRowSerializer at ./spec/serializers/spree/events/import_row_serializer_spec.rb.#as_json includes item polymorphic reference.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","rspec.Spree::Events::ImportRowSerializer at ./spec/serializers/spree/events/import_row_serializer_spec.rb.#as_json includes row_number.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","rspec.Spree::Events::ImportRowSerializer at ./spec/serializers/spree/events/import_row_serializer_spec.rb.#as_json includes status.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","rspec.Spree::Events::ImportRowSerializer at ./spec/serializers/spree/events/import_row_serializer_spec.rb.#as_json includes timestamps.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7\"}}","rspec.Spree::Events::ImportRowSerializer at ./spec/serializers/spree/events/import_row_serializer_spec.rb.#as_json includes validation_errors.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","rspec.Spree::Events::ImportRowSerializer at ./spec/serializers/spree/events/import_row_serializer_spec.rb.#as_json with validation errors includes validation error message.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8:1\"}}","rspec.Spree::Events::ImportSerializer at ./spec/serializers/spree/events/import_serializer_spec.rb.#as_json includes identity attributes.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::Events::ImportSerializer at ./spec/serializers/spree/events/import_serializer_spec.rb.#as_json includes owner polymorphic reference.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","rspec.Spree::Events::ImportSerializer at ./spec/serializers/spree/events/import_serializer_spec.rb.#as_json includes rows_count.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","rspec.Spree::Events::ImportSerializer at ./spec/serializers/spree/events/import_serializer_spec.rb.#as_json includes status as string.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","rspec.Spree::Events::ImportSerializer at ./spec/serializers/spree/events/import_serializer_spec.rb.#as_json includes timestamps.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7\"}}","rspec.Spree::Events::ImportSerializer at ./spec/serializers/spree/events/import_serializer_spec.rb.#as_json includes type.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","rspec.Spree::Events::ImportSerializer at ./spec/serializers/spree/events/import_serializer_spec.rb.#as_json includes user_id.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","rspec.Spree::Events::InvitationSerializer at ./spec/serializers/spree/events/invitation_serializer_spec.rb.#as_json includes dates.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7\"}}","rspec.Spree::Events::InvitationSerializer at ./spec/serializers/spree/events/invitation_serializer_spec.rb.#as_json includes identity attributes.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::Events::InvitationSerializer at ./spec/serializers/spree/events/invitation_serializer_spec.rb.#as_json includes invitee polymorphic reference.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","rspec.Spree::Events::InvitationSerializer at ./spec/serializers/spree/events/invitation_serializer_spec.rb.#as_json includes inviter polymorphic reference.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","rspec.Spree::Events::InvitationSerializer at ./spec/serializers/spree/events/invitation_serializer_spec.rb.#as_json includes resource polymorphic reference.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","rspec.Spree::Events::InvitationSerializer at ./spec/serializers/spree/events/invitation_serializer_spec.rb.#as_json includes role_id.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","rspec.Spree::Events::InvitationSerializer at ./spec/serializers/spree/events/invitation_serializer_spec.rb.#as_json includes status as string.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","rspec.Spree::Events::InvitationSerializer at ./spec/serializers/spree/events/invitation_serializer_spec.rb.#as_json includes timestamps.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8\"}}","rspec.Spree::Events::LineItemSerializer at ./spec/serializers/spree/events/line_item_serializer_spec.rb.#as_json includes adjustment totals.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","rspec.Spree::Events::LineItemSerializer at ./spec/serializers/spree/events/line_item_serializer_spec.rb.#as_json includes foreign keys.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","rspec.Spree::Events::LineItemSerializer at ./spec/serializers/spree/events/line_item_serializer_spec.rb.#as_json includes identity attributes.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::Events::LineItemSerializer at ./spec/serializers/spree/events/line_item_serializer_spec.rb.#as_json includes price fields.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","rspec.Spree::Events::LineItemSerializer at ./spec/serializers/spree/events/line_item_serializer_spec.rb.#as_json includes quantity.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","rspec.Spree::Events::LineItemSerializer at ./spec/serializers/spree/events/line_item_serializer_spec.rb.#as_json includes timestamps.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","rspec.Spree::Events::NewsletterSubscriberSerializer at ./spec/serializers/spree/events/newsletter_subscriber_serializer_spec.rb.#as_json includes identity attributes.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::Events::NewsletterSubscriberSerializer at ./spec/serializers/spree/events/newsletter_subscriber_serializer_spec.rb.#as_json includes timestamps.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","rspec.Spree::Events::NewsletterSubscriberSerializer at ./spec/serializers/spree/events/newsletter_subscriber_serializer_spec.rb.#as_json includes user_id.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","rspec.Spree::Events::NewsletterSubscriberSerializer at ./spec/serializers/spree/events/newsletter_subscriber_serializer_spec.rb.#as_json includes verified status.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","rspec.Spree::Events::NewsletterSubscriberSerializer at ./spec/serializers/spree/events/newsletter_subscriber_serializer_spec.rb.#as_json when not verified returns verified as false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5:1\"}}","rspec.Spree::Events::OrderSerializer at ./spec/serializers/spree/events/order_serializer_spec.rb.#as_json does not include associations.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:9\"}}","rspec.Spree::Events::OrderSerializer at ./spec/serializers/spree/events/order_serializer_spec.rb.#as_json includes email.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","rspec.Spree::Events::OrderSerializer at ./spec/serializers/spree/events/order_serializer_spec.rb.#as_json includes foreign keys.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7\"}}","rspec.Spree::Events::OrderSerializer at ./spec/serializers/spree/events/order_serializer_spec.rb.#as_json includes identity attributes.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::Events::OrderSerializer at ./spec/serializers/spree/events/order_serializer_spec.rb.#as_json includes item count and currency.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","rspec.Spree::Events::OrderSerializer at ./spec/serializers/spree/events/order_serializer_spec.rb.#as_json includes state attributes as strings.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","rspec.Spree::Events::OrderSerializer at ./spec/serializers/spree/events/order_serializer_spec.rb.#as_json includes tax totals.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","rspec.Spree::Events::OrderSerializer at ./spec/serializers/spree/events/order_serializer_spec.rb.#as_json includes timestamps.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8\"}}","rspec.Spree::Events::OrderSerializer at ./spec/serializers/spree/events/order_serializer_spec.rb.#as_json includes totals.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","rspec.Spree::Events::PaymentSerializer at ./spec/serializers/spree/events/payment_serializer_spec.rb.#as_json does not include associations.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7\"}}","rspec.Spree::Events::PaymentSerializer at ./spec/serializers/spree/events/payment_serializer_spec.rb.#as_json includes amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","rspec.Spree::Events::PaymentSerializer at ./spec/serializers/spree/events/payment_serializer_spec.rb.#as_json includes foreign keys.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","rspec.Spree::Events::PaymentSerializer at ./spec/serializers/spree/events/payment_serializer_spec.rb.#as_json includes identity attributes.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::Events::PaymentSerializer at ./spec/serializers/spree/events/payment_serializer_spec.rb.#as_json includes source polymorphic reference.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","rspec.Spree::Events::PaymentSerializer at ./spec/serializers/spree/events/payment_serializer_spec.rb.#as_json includes state as string.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","rspec.Spree::Events::PaymentSerializer at ./spec/serializers/spree/events/payment_serializer_spec.rb.#as_json includes timestamps.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","rspec.Spree::Events::PostCategorySerializer at ./spec/serializers/spree/events/post_category_serializer_spec.rb.#as_json includes identity attributes.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::Events::PostCategorySerializer at ./spec/serializers/spree/events/post_category_serializer_spec.rb.#as_json includes store_id.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","rspec.Spree::Events::PostCategorySerializer at ./spec/serializers/spree/events/post_category_serializer_spec.rb.#as_json includes timestamps.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","rspec.Spree::Events::PostSerializer at ./spec/serializers/spree/events/post_serializer_spec.rb.#as_json includes deleted_at.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","rspec.Spree::Events::PostSerializer at ./spec/serializers/spree/events/post_serializer_spec.rb.#as_json includes foreign keys.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","rspec.Spree::Events::PostSerializer at ./spec/serializers/spree/events/post_serializer_spec.rb.#as_json includes identity attributes.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::Events::PostSerializer at ./spec/serializers/spree/events/post_serializer_spec.rb.#as_json includes meta fields.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","rspec.Spree::Events::PostSerializer at ./spec/serializers/spree/events/post_serializer_spec.rb.#as_json includes published_at.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","rspec.Spree::Events::PostSerializer at ./spec/serializers/spree/events/post_serializer_spec.rb.#as_json includes timestamps.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","rspec.Spree::Events::PriceSerializer at ./spec/serializers/spree/events/price_serializer_spec.rb.#as_json includes amount fields.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","rspec.Spree::Events::PriceSerializer at ./spec/serializers/spree/events/price_serializer_spec.rb.#as_json includes deleted_at.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","rspec.Spree::Events::PriceSerializer at ./spec/serializers/spree/events/price_serializer_spec.rb.#as_json includes identity attributes.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::Events::PriceSerializer at ./spec/serializers/spree/events/price_serializer_spec.rb.#as_json includes timestamps.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","rspec.Spree::Events::PriceSerializer at ./spec/serializers/spree/events/price_serializer_spec.rb.#as_json includes variant_id.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","rspec.Spree::Events::ProductSerializer at ./spec/serializers/spree/events/product_serializer_spec.rb.#as_json does not include associations.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","rspec.Spree::Events::ProductSerializer at ./spec/serializers/spree/events/product_serializer_spec.rb.#as_json includes availability timestamps.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","rspec.Spree::Events::ProductSerializer at ./spec/serializers/spree/events/product_serializer_spec.rb.#as_json includes identity attributes.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::Events::ProductSerializer at ./spec/serializers/spree/events/product_serializer_spec.rb.#as_json includes status as string.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","rspec.Spree::Events::ProductSerializer at ./spec/serializers/spree/events/product_serializer_spec.rb.#as_json includes timestamps.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","rspec.Spree::Events::PromotionSerializer at ./spec/serializers/spree/events/promotion_serializer_spec.rb.#as_json includes code.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","rspec.Spree::Events::PromotionSerializer at ./spec/serializers/spree/events/promotion_serializer_spec.rb.#as_json includes date range.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7\"}}","rspec.Spree::Events::PromotionSerializer at ./spec/serializers/spree/events/promotion_serializer_spec.rb.#as_json includes description.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","rspec.Spree::Events::PromotionSerializer at ./spec/serializers/spree/events/promotion_serializer_spec.rb.#as_json includes identity attributes.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::Events::PromotionSerializer at ./spec/serializers/spree/events/promotion_serializer_spec.rb.#as_json includes multi-code settings.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","rspec.Spree::Events::PromotionSerializer at ./spec/serializers/spree/events/promotion_serializer_spec.rb.#as_json includes policy settings.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","rspec.Spree::Events::PromotionSerializer at ./spec/serializers/spree/events/promotion_serializer_spec.rb.#as_json includes promotion_category_id.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8\"}}","rspec.Spree::Events::PromotionSerializer at ./spec/serializers/spree/events/promotion_serializer_spec.rb.#as_json includes timestamps.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:9\"}}","rspec.Spree::Events::PromotionSerializer at ./spec/serializers/spree/events/promotion_serializer_spec.rb.#as_json includes type and kind.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","rspec.Spree::Events::RefundSerializer at ./spec/serializers/spree/events/refund_serializer_spec.rb.#as_json includes amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","rspec.Spree::Events::RefundSerializer at ./spec/serializers/spree/events/refund_serializer_spec.rb.#as_json includes foreign keys.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","rspec.Spree::Events::RefundSerializer at ./spec/serializers/spree/events/refund_serializer_spec.rb.#as_json includes identity attributes.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::Events::RefundSerializer at ./spec/serializers/spree/events/refund_serializer_spec.rb.#as_json includes timestamps.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","rspec.Spree::Events::RefundSerializer at ./spec/serializers/spree/events/refund_serializer_spec.rb.#as_json includes transaction_id.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","rspec.Spree::Events::Registry at ./spec/lib/spree/events/registry_spec.rb.#all_subscriptions returns a copy of the subscriptions.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2\"}}","rspec.Spree::Events::Registry at ./spec/lib/spree/events/registry_spec.rb.#all_subscriptions returns all registered subscriptions.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","rspec.Spree::Events::Registry at ./spec/lib/spree/events/registry_spec.rb.#clear! removes all subscriptions.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","rspec.Spree::Events::Registry at ./spec/lib/spree/events/registry_spec.rb.#patterns returns unique patterns.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","rspec.Spree::Events::Registry at ./spec/lib/spree/events/registry_spec.rb.#register allows multiple subscribers for the same pattern.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","rspec.Spree::Events::Registry at ./spec/lib/spree/events/registry_spec.rb.#register registers a subscriber for a pattern.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::Events::Registry at ./spec/lib/spree/events/registry_spec.rb.#register returns the subscription.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","rspec.Spree::Events::Registry at ./spec/lib/spree/events/registry_spec.rb.#register stores subscription options.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","rspec.Spree::Events::Registry at ./spec/lib/spree/events/registry_spec.rb.#registered? returns false for unregistered patterns.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2\"}}","rspec.Spree::Events::Registry at ./spec/lib/spree/events/registry_spec.rb.#registered? returns true for registered patterns.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","rspec.Spree::Events::Registry at ./spec/lib/spree/events/registry_spec.rb.#subscriptions_for returns empty array when no matches.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3\"}}","rspec.Spree::Events::Registry at ./spec/lib/spree/events/registry_spec.rb.#subscriptions_for returns subscriptions for exact match.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","rspec.Spree::Events::Registry at ./spec/lib/spree/events/registry_spec.rb.#subscriptions_for returns subscriptions matching wildcard patterns.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","rspec.Spree::Events::Registry at ./spec/lib/spree/events/registry_spec.rb.#subscriptions_for with global wildcard matches all events.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4:1\"}}","rspec.Spree::Events::Registry at ./spec/lib/spree/events/registry_spec.rb.#unregister keeps other subscribers intact.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3\"}}","rspec.Spree::Events::Registry at ./spec/lib/spree/events/registry_spec.rb.#unregister removes a specific subscriber.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.Spree::Events::Registry at ./spec/lib/spree/events/registry_spec.rb.#unregister returns false when subscriber not found.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","rspec.Spree::Events::Registry at ./spec/lib/spree/events/registry_spec.rb.thread safety handles concurrent registrations.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1\"}}","rspec.Spree::Events::ReimbursementSerializer at ./spec/serializers/spree/events/reimbursement_serializer_spec.rb.#as_json includes foreign keys.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","rspec.Spree::Events::ReimbursementSerializer at ./spec/serializers/spree/events/reimbursement_serializer_spec.rb.#as_json includes identity attributes.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::Events::ReimbursementSerializer at ./spec/serializers/spree/events/reimbursement_serializer_spec.rb.#as_json includes reimbursement_status.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","rspec.Spree::Events::ReimbursementSerializer at ./spec/serializers/spree/events/reimbursement_serializer_spec.rb.#as_json includes timestamps.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","rspec.Spree::Events::ReimbursementSerializer at ./spec/serializers/spree/events/reimbursement_serializer_spec.rb.#as_json includes total.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","rspec.Spree::Events::ReportSerializer at ./spec/serializers/spree/events/report_serializer_spec.rb.#as_json includes currency.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","rspec.Spree::Events::ReportSerializer at ./spec/serializers/spree/events/report_serializer_spec.rb.#as_json includes date range.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","rspec.Spree::Events::ReportSerializer at ./spec/serializers/spree/events/report_serializer_spec.rb.#as_json includes identity attributes.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::Events::ReportSerializer at ./spec/serializers/spree/events/report_serializer_spec.rb.#as_json includes store reference.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","rspec.Spree::Events::ReportSerializer at ./spec/serializers/spree/events/report_serializer_spec.rb.#as_json includes timestamps.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","rspec.Spree::Events::ReportSerializer at ./spec/serializers/spree/events/report_serializer_spec.rb.#as_json includes user reference.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","rspec.Spree::Events::ReturnAuthorizationSerializer at ./spec/serializers/spree/events/return_authorization_serializer_spec.rb.#as_json does not include associations.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","rspec.Spree::Events::ReturnAuthorizationSerializer at ./spec/serializers/spree/events/return_authorization_serializer_spec.rb.#as_json includes foreign keys.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","rspec.Spree::Events::ReturnAuthorizationSerializer at ./spec/serializers/spree/events/return_authorization_serializer_spec.rb.#as_json includes identity attributes.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::Events::ReturnAuthorizationSerializer at ./spec/serializers/spree/events/return_authorization_serializer_spec.rb.#as_json includes state as string.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","rspec.Spree::Events::ReturnAuthorizationSerializer at ./spec/serializers/spree/events/return_authorization_serializer_spec.rb.#as_json includes timestamps.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","rspec.Spree::Events::ReturnItemSerializer at ./spec/serializers/spree/events/return_item_serializer_spec.rb.#as_json includes amount fields.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","rspec.Spree::Events::ReturnItemSerializer at ./spec/serializers/spree/events/return_item_serializer_spec.rb.#as_json includes foreign keys.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","rspec.Spree::Events::ReturnItemSerializer at ./spec/serializers/spree/events/return_item_serializer_spec.rb.#as_json includes identity attributes.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::Events::ReturnItemSerializer at ./spec/serializers/spree/events/return_item_serializer_spec.rb.#as_json includes status fields.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","rspec.Spree::Events::ReturnItemSerializer at ./spec/serializers/spree/events/return_item_serializer_spec.rb.#as_json includes timestamps.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","rspec.Spree::Events::ShipmentSerializer at ./spec/serializers/spree/events/shipment_serializer_spec.rb.#as_json does not include associations.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7\"}}","rspec.Spree::Events::ShipmentSerializer at ./spec/serializers/spree/events/shipment_serializer_spec.rb.#as_json includes cost.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","rspec.Spree::Events::ShipmentSerializer at ./spec/serializers/spree/events/shipment_serializer_spec.rb.#as_json includes foreign keys.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","rspec.Spree::Events::ShipmentSerializer at ./spec/serializers/spree/events/shipment_serializer_spec.rb.#as_json includes identity attributes.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::Events::ShipmentSerializer at ./spec/serializers/spree/events/shipment_serializer_spec.rb.#as_json includes state as string.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","rspec.Spree::Events::ShipmentSerializer at ./spec/serializers/spree/events/shipment_serializer_spec.rb.#as_json includes timestamps.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","rspec.Spree::Events::ShipmentSerializer at ./spec/serializers/spree/events/shipment_serializer_spec.rb.#as_json includes tracking.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","rspec.Spree::Events::StockItemSerializer at ./spec/serializers/spree/events/stock_item_serializer_spec.rb.#as_json includes backorderable.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","rspec.Spree::Events::StockItemSerializer at ./spec/serializers/spree/events/stock_item_serializer_spec.rb.#as_json includes count_on_hand.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","rspec.Spree::Events::StockItemSerializer at ./spec/serializers/spree/events/stock_item_serializer_spec.rb.#as_json includes deleted_at.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","rspec.Spree::Events::StockItemSerializer at ./spec/serializers/spree/events/stock_item_serializer_spec.rb.#as_json includes foreign keys.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","rspec.Spree::Events::StockItemSerializer at ./spec/serializers/spree/events/stock_item_serializer_spec.rb.#as_json includes identity attributes.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::Events::StockItemSerializer at ./spec/serializers/spree/events/stock_item_serializer_spec.rb.#as_json includes timestamps.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","rspec.Spree::Events::StockMovementSerializer at ./spec/serializers/spree/events/stock_movement_serializer_spec.rb.#as_json includes action.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","rspec.Spree::Events::StockMovementSerializer at ./spec/serializers/spree/events/stock_movement_serializer_spec.rb.#as_json includes identity attributes.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::Events::StockMovementSerializer at ./spec/serializers/spree/events/stock_movement_serializer_spec.rb.#as_json includes originator polymorphic reference.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","rspec.Spree::Events::StockMovementSerializer at ./spec/serializers/spree/events/stock_movement_serializer_spec.rb.#as_json includes quantity.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","rspec.Spree::Events::StockMovementSerializer at ./spec/serializers/spree/events/stock_movement_serializer_spec.rb.#as_json includes stock_item_id.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","rspec.Spree::Events::StockMovementSerializer at ./spec/serializers/spree/events/stock_movement_serializer_spec.rb.#as_json includes timestamps.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","rspec.Spree::Events::StockTransferSerializer at ./spec/serializers/spree/events/stock_transfer_serializer_spec.rb.#as_json includes identity attributes.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::Events::StockTransferSerializer at ./spec/serializers/spree/events/stock_transfer_serializer_spec.rb.#as_json includes location foreign keys.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","rspec.Spree::Events::StockTransferSerializer at ./spec/serializers/spree/events/stock_transfer_serializer_spec.rb.#as_json includes reference.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","rspec.Spree::Events::StockTransferSerializer at ./spec/serializers/spree/events/stock_transfer_serializer_spec.rb.#as_json includes timestamps.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","rspec.Spree::Events::StockTransferSerializer at ./spec/serializers/spree/events/stock_transfer_serializer_spec.rb.#as_json includes type.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","rspec.Spree::Events::StoreCreditSerializer at ./spec/serializers/spree/events/store_credit_serializer_spec.rb.#as_json includes amount fields.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","rspec.Spree::Events::StoreCreditSerializer at ./spec/serializers/spree/events/store_credit_serializer_spec.rb.#as_json includes category and type ids.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","rspec.Spree::Events::StoreCreditSerializer at ./spec/serializers/spree/events/store_credit_serializer_spec.rb.#as_json includes deleted_at.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8\"}}","rspec.Spree::Events::StoreCreditSerializer at ./spec/serializers/spree/events/store_credit_serializer_spec.rb.#as_json includes identity attributes.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::Events::StoreCreditSerializer at ./spec/serializers/spree/events/store_credit_serializer_spec.rb.#as_json includes memo.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","rspec.Spree::Events::StoreCreditSerializer at ./spec/serializers/spree/events/store_credit_serializer_spec.rb.#as_json includes originator polymorphic reference.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7\"}}","rspec.Spree::Events::StoreCreditSerializer at ./spec/serializers/spree/events/store_credit_serializer_spec.rb.#as_json includes store_id.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","rspec.Spree::Events::StoreCreditSerializer at ./spec/serializers/spree/events/store_credit_serializer_spec.rb.#as_json includes timestamps.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:9\"}}","rspec.Spree::Events::StoreCreditSerializer at ./spec/serializers/spree/events/store_credit_serializer_spec.rb.#as_json includes user foreign keys.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","rspec.Spree::Events::UserSerializer at ./spec/serializers/spree/events/user_serializer_spec.rb.#as_json does not include sensitive data.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","rspec.Spree::Events::UserSerializer at ./spec/serializers/spree/events/user_serializer_spec.rb.#as_json includes identity attributes.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::Events::UserSerializer at ./spec/serializers/spree/events/user_serializer_spec.rb.#as_json includes timestamps.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","rspec.Spree::Events::VariantSerializer at ./spec/serializers/spree/events/variant_serializer_spec.rb.#as_json includes barcode.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","rspec.Spree::Events::VariantSerializer at ./spec/serializers/spree/events/variant_serializer_spec.rb.#as_json includes cost fields.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","rspec.Spree::Events::VariantSerializer at ./spec/serializers/spree/events/variant_serializer_spec.rb.#as_json includes deleted_at.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:10\"}}","rspec.Spree::Events::VariantSerializer at ./spec/serializers/spree/events/variant_serializer_spec.rb.#as_json includes dimensions.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","rspec.Spree::Events::VariantSerializer at ./spec/serializers/spree/events/variant_serializer_spec.rb.#as_json includes discontinue_on.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:9\"}}","rspec.Spree::Events::VariantSerializer at ./spec/serializers/spree/events/variant_serializer_spec.rb.#as_json includes foreign keys.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8\"}}","rspec.Spree::Events::VariantSerializer at ./spec/serializers/spree/events/variant_serializer_spec.rb.#as_json includes identity attributes.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::Events::VariantSerializer at ./spec/serializers/spree/events/variant_serializer_spec.rb.#as_json includes is_master.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","rspec.Spree::Events::VariantSerializer at ./spec/serializers/spree/events/variant_serializer_spec.rb.#as_json includes position.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","rspec.Spree::Events::VariantSerializer at ./spec/serializers/spree/events/variant_serializer_spec.rb.#as_json includes timestamps.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:11\"}}","rspec.Spree::Events::VariantSerializer at ./spec/serializers/spree/events/variant_serializer_spec.rb.#as_json includes track_inventory.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7\"}}","rspec.Spree::Events::WishedItemSerializer at ./spec/serializers/spree/events/wished_item_serializer_spec.rb.#as_json includes foreign keys.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","rspec.Spree::Events::WishedItemSerializer at ./spec/serializers/spree/events/wished_item_serializer_spec.rb.#as_json includes identity attributes.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::Events::WishedItemSerializer at ./spec/serializers/spree/events/wished_item_serializer_spec.rb.#as_json includes quantity.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","rspec.Spree::Events::WishedItemSerializer at ./spec/serializers/spree/events/wished_item_serializer_spec.rb.#as_json includes timestamps.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","rspec.Spree::Events::WishlistSerializer at ./spec/serializers/spree/events/wishlist_serializer_spec.rb.#as_json does not include token.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","rspec.Spree::Events::WishlistSerializer at ./spec/serializers/spree/events/wishlist_serializer_spec.rb.#as_json includes foreign keys.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","rspec.Spree::Events::WishlistSerializer at ./spec/serializers/spree/events/wishlist_serializer_spec.rb.#as_json includes identity attributes.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::Events::WishlistSerializer at ./spec/serializers/spree/events/wishlist_serializer_spec.rb.#as_json includes privacy settings.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","rspec.Spree::Events::WishlistSerializer at ./spec/serializers/spree/events/wishlist_serializer_spec.rb.#as_json includes timestamps.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","rspec.Spree::Exchange at ./spec/models/spree/exchange_spec.rb.#description describes the return items' change in options.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::Exchange at ./spec/models/spree/exchange_spec.rb.#display_amount is the total amount of all return items.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.Spree::Exchange at ./spec/models/spree/exchange_spec.rb.#perform! creates shipments for the order with the return items exchange inventory units.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","rspec.Spree::Exchange at ./spec/models/spree/exchange_spec.rb.#perform! when it cannot create shipments for all items raises an UnableToCreateShipments error.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","rspec.Spree::Exchange at ./spec/models/spree/exchange_spec.rb.#to_key example at ./spec/models/spree/exchange_spec.rb:65.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","rspec.Spree::Exchange at ./spec/models/spree/exchange_spec.rb..model_name example at ./spec/models/spree/exchange_spec.rb:73.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","rspec.Spree::Exchange at ./spec/models/spree/exchange_spec.rb..param_key example at ./spec/models/spree/exchange_spec.rb:69.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","rspec.Spree::Export at ./spec/models/spree/export_spec.rb.#event_serializer_class returns the correct event serializer class.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.Spree::Export at ./spec/models/spree/export_spec.rb.#export_file_name returns the correct file name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","rspec.Spree::Export at ./spec/models/spree/export_spec.rb.#generate generates the export.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","rspec.Spree::Export at ./spec/models/spree/export_spec.rb.#generate sends the export done email.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2\"}}","rspec.Spree::Export at ./spec/models/spree/export_spec.rb.#generate when the export type is Spree::Exports::Customers generates the export.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3:1\"}}","rspec.Spree::Export at ./spec/models/spree/export_spec.rb.#model_class returns the correct record class.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","rspec.Spree::Export at ./spec/models/spree/export_spec.rb.#normalize_search_params with Ruby hash input converts to JSON string.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:5:1\"}}","rspec.Spree::Export at ./spec/models/spree/export_spec.rb.#normalize_search_params with empty search_params does nothing.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2:1\"}}","rspec.Spree::Export at ./spec/models/spree/export_spec.rb.#normalize_search_params with invalid JSON string preserves the original string.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:4:1\"}}","rspec.Spree::Export at ./spec/models/spree/export_spec.rb.#normalize_search_params with nil search_params does nothing.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1:1\"}}","rspec.Spree::Export at ./spec/models/spree/export_spec.rb.#normalize_search_params with pre-normalized params does not double-process.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:6:1\"}}","rspec.Spree::Export at ./spec/models/spree/export_spec.rb.#normalize_search_params with valid JSON string ensures valid JSON output.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:3:2\"}}","rspec.Spree::Export at ./spec/models/spree/export_spec.rb.#normalize_search_params with valid JSON string maintains the same content.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:3:1\"}}","rspec.Spree::Export at ./spec/models/spree/export_spec.rb.#records_to_export with search params returns matching products.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2:1\"}}","rspec.Spree::Export at ./spec/models/spree/export_spec.rb.#records_to_export without search params returns all products.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1:1\"}}","rspec.Spree::Export at ./spec/models/spree/export_spec.rb.#send_export_done_email queues the export done email.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","rspec.Spree::Export at ./spec/models/spree/export_spec.rb.behaves like lifecycle events lifecycle events export.created publishes created event when record is created.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","rspec.Spree::Export at ./spec/models/spree/export_spec.rb.behaves like lifecycle events lifecycle events export.deleted publishes deleted event when record is deleted.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:1\"}}","rspec.Spree::Export at ./spec/models/spree/export_spec.rb.behaves like lifecycle events lifecycle events export.updated publishes updated event when record is updated.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","rspec.Spree::ExportMailer at ./spec/mailers/spree/export_mailer_spec.rb.#export_done includes download link in the body.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","rspec.Spree::ExportMailer at ./spec/mailers/spree/export_mailer_spec.rb.#export_done includes export attachment filename.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","rspec.Spree::ExportMailer at ./spec/mailers/spree/export_mailer_spec.rb.#export_done renders the subject.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::ExportMailer at ./spec/mailers/spree/export_mailer_spec.rb.#export_done sends to the correct recipient.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","rspec.Spree::ExportSubscriber at ./spec/subscribers/spree/export_subscriber_spec.rb.#generate_export_async does not call job if export_id is missing.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","rspec.Spree::ExportSubscriber at ./spec/subscribers/spree/export_subscriber_spec.rb.#generate_export_async extracts export_id from event payload.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","rspec.Spree::ExportSubscriber at ./spec/subscribers/spree/export_subscriber_spec.rb..event_handlers routes export.created to generate_export_async.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.Spree::ExportSubscriber at ./spec/subscribers/spree/export_subscriber_spec.rb..subscription_patterns subscribes to export.created event.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::Exports::Customers at ./spec/models/spree/exports/customers_spec.rb.#csv_headers when metafields exist includes metafield headers.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","rspec.Spree::Exports::Customers at ./spec/models/spree/exports/customers_spec.rb.#csv_headers when no metafields exist returns customer headers.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","rspec.Spree::Exports::GenerateJob at ./spec/jobs/spree/exports/generate_job_spec.rb.#perform calls generate on the export.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::Exports::GiftCards at ./spec/models/spree/exports/gift_cards_spec.rb.#csv_headers when metafields exist includes metafield headers.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","rspec.Spree::Exports::GiftCards at ./spec/models/spree/exports/gift_cards_spec.rb.#csv_headers when no metafields exist returns gift card headers.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","rspec.Spree::Exports::GiftCards at ./spec/models/spree/exports/gift_cards_spec.rb.#records_to_export when search_params filters by status includes only active gift cards.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","rspec.Spree::Exports::GiftCards at ./spec/models/spree/exports/gift_cards_spec.rb.#records_to_export when search_params is nil includes all gift cards for the store.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","rspec.Spree::Exports::NewsletterSubscribers at ./spec/models/spree/exports/newsletter_subscribers_spec.rb.#csv_headers when metafields exist includes metafield headers.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","rspec.Spree::Exports::NewsletterSubscribers at ./spec/models/spree/exports/newsletter_subscribers_spec.rb.#csv_headers when no metafields exist returns newsletter subscriber headers.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","rspec.Spree::Exports::Orders at ./spec/models/spree/exports/orders_spec.rb.#csv_headers when metafields exist includes metafield headers.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","rspec.Spree::Exports::Orders at ./spec/models/spree/exports/orders_spec.rb.#csv_headers when no metafields exist returns order line item headers.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","rspec.Spree::Exports::Orders at ./spec/models/spree/exports/orders_spec.rb.#multi_line_csv? returns true.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.Spree::Exports::Products at ./spec/models/spree/exports/products_spec.rb.#csv_headers when metafields exist includes metafield headers.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:1\"}}","rspec.Spree::Exports::Products at ./spec/models/spree/exports/products_spec.rb.#csv_headers when product_properties_enabled is false and no metafields returns product variant headers without properties.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","rspec.Spree::Exports::Products at ./spec/models/spree/exports/products_spec.rb.#csv_headers when product_properties_enabled is true includes property headers.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","rspec.Spree::Exports::Products at ./spec/models/spree/exports/products_spec.rb.#scope when search_params is nil excludes archived products.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","rspec.Spree::Exports::Products at ./spec/models/spree/exports/products_spec.rb.#scope when search_params is present includes all products.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","rspec.Spree::Filters::OptionsPresenter at ./spec/presenters/spree/filters/options_presenter_spec.rb.#to_a returns filterable Option Types and Values.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::Filters::PricePresenter at ./spec/presenters/spree/filters/price_presenter_spec.rb.#to_i returns price amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::Filters::PricePresenter at ./spec/presenters/spree/filters/price_presenter_spec.rb.#to_s returns a formatted price.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.Spree::Filters::PriceRangePresenter at ./spec/presenters/spree/filters/price_range_presenter_spec.rb.#to_param returns price range as param.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.Spree::Filters::PriceRangePresenter at ./spec/presenters/spree/filters/price_range_presenter_spec.rb.#to_s returns a formatted price range.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","rspec.Spree::Filters::PriceRangePresenter at ./spec/presenters/spree/filters/price_range_presenter_spec.rb..from_param builds a price range based on a param.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::Filters::PropertiesPresenter at ./spec/presenters/spree/filters/properties_presenter_spec.rb.#to_a returns filterable Product Properties.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::Filters::PropertyPresenter at ./spec/presenters/spree/filters/property_presenter_spec.rb.#uniq_values returns unique Product Properties values for a given list of Product Properties.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::Filters::QuantifiedPriceRangePresenter at ./spec/presenters/spree/filters/quantified_price_range_presenter_spec.rb.when the quantifier is less_than #to_param returns price range as param.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","rspec.Spree::Filters::QuantifiedPriceRangePresenter at ./spec/presenters/spree/filters/quantified_price_range_presenter_spec.rb.when the quantifier is less_than #to_s returns a formatted price range.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","rspec.Spree::Filters::QuantifiedPriceRangePresenter at ./spec/presenters/spree/filters/quantified_price_range_presenter_spec.rb.when the quantifier is more_than #to_param returns price range as param.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","rspec.Spree::Filters::QuantifiedPriceRangePresenter at ./spec/presenters/spree/filters/quantified_price_range_presenter_spec.rb.when the quantifier is more_than #to_s returns a formatted price range.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","rspec.Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb.when stock_item is last on_hand has inventory unit on_hand.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2\"}}","rspec.Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb.when stock_item is last on_hand is successful.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","rspec.Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb.when the current shipment has enough inventory units adds the desired inventory units to the desired shipment.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb.when the current shipment has enough inventory units recalculates shipping costs for the current shipment.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3\"}}","rspec.Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb.when the current shipment has enough inventory units recalculates shipping costs for the new shipment.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:4\"}}","rspec.Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb.when the current shipment has enough inventory units removes the desired inventory units from the current shipment.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","rspec.Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb.when the current shipment has enough inventory units when the current shipment has been shipped already has an activemodel error hash.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:9:2\"}}","rspec.Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb.when the current shipment has enough inventory units when the current shipment has been shipped already is not successful.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:9:1\"}}","rspec.Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb.when the current shipment has enough inventory units when the desired shipment has no stock location has an activemodel error hash.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:8:2\"}}","rspec.Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb.when the current shipment has enough inventory units when the desired shipment has no stock location is not successful.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:8:1\"}}","rspec.Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb.when the current shipment has enough inventory units when the desired shipment is identical to the current shipment has an activemodel error hash.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:7:2\"}}","rspec.Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb.when the current shipment has enough inventory units when the desired shipment is identical to the current shipment is not successful.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:7:1\"}}","rspec.Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb.when the current shipment has enough inventory units when the quantity to transfer is not positive has an activemodel error hash.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:6:2\"}}","rspec.Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb.when the current shipment has enough inventory units when the quantity to transfer is not positive is not successful.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:6:1\"}}","rspec.Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb.when the current shipment has enough inventory units when transferring to another stock location when the desired stock location can only partially fulfil the quantity creates a shipment with the correct number of on hand and backordered units.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:5:2:3\"}}","rspec.Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb.when the current shipment has enough inventory units when transferring to another stock location when the desired stock location can only partially fulfil the quantity restocks seven at the original stock location.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:5:2:1\"}}","rspec.Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb.when the current shipment has enough inventory units when transferring to another stock location when the desired stock location can only partially fulfil the quantity unstocks seven at the desired stock location.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:5:2:2\"}}","rspec.Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb.when the current shipment has enough inventory units when transferring to another stock location when the desired stock location can only partially fulfil the quantity when the desired stock location already has a backordered units creates a shipment with the correct number of on hand and backordered units.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:5:2:4:3\"}}","rspec.Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb.when the current shipment has enough inventory units when transferring to another stock location when the desired stock location can only partially fulfil the quantity when the desired stock location already has a backordered units restocks seven at the original stock location.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:5:2:4:1\"}}","rspec.Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb.when the current shipment has enough inventory units when transferring to another stock location when the desired stock location can only partially fulfil the quantity when the desired stock location already has a backordered units unstocks seven at the desired stock location.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:5:2:4:2\"}}","rspec.Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb.when the current shipment has enough inventory units when transferring to another stock location when the desired stock location can only partially fulfil the quantity when the original shipment had some backordered units creates a shipment with the correct number of on hand and backordered units.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:5:2:6:3\"}}","rspec.Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb.when the current shipment has enough inventory units when transferring to another stock location when the desired stock location can only partially fulfil the quantity when the original shipment had some backordered units restocks four at the original stock location.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:5:2:6:1\"}}","rspec.Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb.when the current shipment has enough inventory units when transferring to another stock location when the desired stock location can only partially fulfil the quantity when the original shipment had some backordered units unstocks five at the desired stock location.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:5:2:6:2\"}}","rspec.Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb.when the current shipment has enough inventory units when transferring to another stock location when the desired stock location can only partially fulfil the quantity when the original shipment has on hand and backordered units more than one backordered unit reduces the backordered items first.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:5:2:5:2:1\"}}","rspec.Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb.when the current shipment has enough inventory units when transferring to another stock location when the desired stock location can only partially fulfil the quantity when the original shipment has on hand and backordered units more than one on_hand unit reduces the backordered items first.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:5:2:5:3:1\"}}","rspec.Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb.when the current shipment has enough inventory units when transferring to another stock location when the desired stock location can only partially fulfil the quantity when the original shipment has on hand and backordered units removes the backordered item first.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:5:2:5:1\"}}","rspec.Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb.when the current shipment has enough inventory units when transferring to another stock location when the other stock location does not have enough stock has an activemodel error hash.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:5:3:2\"}}","rspec.Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb.when the current shipment has enough inventory units when transferring to another stock location when the other stock location does not have enough stock is not successful.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:5:3:1\"}}","rspec.Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb.when the current shipment has enough inventory units when transferring to another stock location when the other stock location has enough stock is marked as a successful transfer.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:5:1:1\"}}","rspec.Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb.when the current shipment has enough inventory units when transferring to another stock location when the other stock location has enough stock stocks the current stock location back up.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:5:1:2\"}}","rspec.Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb.when the current shipment has enough inventory units when transferring to another stock location when the other stock location has enough stock unstocks the desired stock location.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:5:1:3\"}}","rspec.Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb.when the current shipment has enough inventory units when transferring to another stock location when the other stock location has enough stock when the order is not completed does not stock the current stock location back up.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:5:1:4:1\"}}","rspec.Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb.when the current shipment has enough inventory units when transferring to another stock location when the other stock location has enough stock when the order is not completed does not unstock the desired location.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:5:1:4:2\"}}","rspec.Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb.when the current shipment has not enough inventory units adds the desired inventory units to the desired shipment.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","rspec.Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb.when the current shipment has not enough inventory units removes the desired inventory units from the current shipment.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","rspec.Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb.when the current shipment is emptied out by the transfer adds the desired inventory units to the desired shipment.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","rspec.Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb.when the current shipment is emptied out by the transfer removes the current shipment.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2\"}}","rspec.Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb.when the desired shipment is not yet persisted adds the desired inventory units to the desired shipment.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","rspec.Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb.when the desired shipment is not yet persisted if the desired shipment is invalid has an activemodel error hash.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3:2\"}}","rspec.Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb.when the desired shipment is not yet persisted if the desired shipment is invalid is not successful.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3:1\"}}","rspec.Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb.when the desired shipment is not yet persisted updates desired shipment cost after selecting the shipping rate.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2\"}}","rspec.Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb.when the order has multiple line items can move more than one variant to the desired shipment.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::Gateway at ./spec/models/spree/gateway_spec.rb.#gateway_dashboard_payment_url returns nil.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","rspec.Spree::Gateway at ./spec/models/spree/gateway_spec.rb.#gateway_dashboard_payment_url when implemented returns the url.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2:1\"}}","rspec.Spree::Gateway at ./spec/models/spree/gateway_spec.rb.Validations automatically sets the name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","rspec.Spree::Gateway at ./spec/models/spree/gateway_spec.rb.Validations validates the type.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.Spree::Gateway at ./spec/models/spree/gateway_spec.rb.fetching payment sources finds credit cards associated on a order completed.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","rspec.Spree::Gateway at ./spec/models/spree/gateway_spec.rb.fetching payment sources finds credit cards associated with the order user.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","rspec.Spree::Gateway at ./spec/models/spree/gateway_spec.rb.passes through all arguments on a method_missing call.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","rspec.Spree::Gateway at ./spec/models/spree/gateway_spec.rb.returns exchange multiplier for gateway.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4\"}}","rspec.Spree::Gateway at ./spec/models/spree/gateway_spec.rb.returns public preferences.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5\"}}","rspec.Spree::Gateway::Bogus at ./spec/models/spree/gateway/bogus_spec.rb.disable recurring contract by destroying payment source.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","rspec.Spree::GiftCard at ./spec/models/spree/gift_card_spec.rb.#active? when active returns true.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3:1\"}}","rspec.Spree::GiftCard at ./spec/models/spree/gift_card_spec.rb.#active? when expired returns false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1\"}}","rspec.Spree::GiftCard at ./spec/models/spree/gift_card_spec.rb.#active? when redeemed returns false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1\"}}","rspec.Spree::GiftCard at ./spec/models/spree/gift_card_spec.rb.#amount_remaining when active returns the remaining amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:1\"}}","rspec.Spree::GiftCard at ./spec/models/spree/gift_card_spec.rb.#amount_remaining when authorized returns the remaining amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3:1\"}}","rspec.Spree::GiftCard at ./spec/models/spree/gift_card_spec.rb.#amount_remaining when redeemed returns 0.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1\"}}","rspec.Spree::GiftCard at ./spec/models/spree/gift_card_spec.rb.#display_state when active returns active.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2:1\"}}","rspec.Spree::GiftCard at ./spec/models/spree/gift_card_spec.rb.#display_state when expired returns expired.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1:1\"}}","rspec.Spree::GiftCard at ./spec/models/spree/gift_card_spec.rb.#to_csv includes the currency.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:4\"}}","rspec.Spree::GiftCard at ./spec/models/spree/gift_card_spec.rb.#to_csv includes the gift card code.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:3\"}}","rspec.Spree::GiftCard at ./spec/models/spree/gift_card_spec.rb.#to_csv includes the user email.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:5\"}}","rspec.Spree::GiftCard at ./spec/models/spree/gift_card_spec.rb.#to_csv returns an array.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","rspec.Spree::GiftCard at ./spec/models/spree/gift_card_spec.rb.#to_csv returns the correct number of fields.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2\"}}","rspec.Spree::GiftCard at ./spec/models/spree/gift_card_spec.rb.Callbacks #ensure_can_be_deleted adds an error.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:2\"}}","rspec.Spree::GiftCard at ./spec/models/spree/gift_card_spec.rb.Callbacks #ensure_can_be_deleted ensures a used gift card can't be destroyed.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","rspec.Spree::GiftCard at ./spec/models/spree/gift_card_spec.rb.Scopes #active returns active gift cards.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","rspec.Spree::GiftCard at ./spec/models/spree/gift_card_spec.rb.Scopes #expired returns expired gift cards.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","rspec.Spree::GiftCard at ./spec/models/spree/gift_card_spec.rb.Scopes #partially_redeemed returns partially redeemed gift cards.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4:1\"}}","rspec.Spree::GiftCard at ./spec/models/spree/gift_card_spec.rb.Scopes #redeemed returns redeemed gift cards.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3:1\"}}","rspec.Spree::GiftCard at ./spec/models/spree/gift_card_spec.rb.State transitions when active transitions from active to partially_redeemed.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1:1\"}}","rspec.Spree::GiftCard at ./spec/models/spree/gift_card_spec.rb.State transitions when active transitions from active to redeemed.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1:2\"}}","rspec.Spree::GiftCard at ./spec/models/spree/gift_card_spec.rb.State transitions when partially_redeemed allows multiple partial redemptions (remains partially_redeemed).{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2:1\"}}","rspec.Spree::GiftCard at ./spec/models/spree/gift_card_spec.rb.State transitions when partially_redeemed transitions from partially_redeemed to redeemed when fully used.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2:2\"}}","rspec.Spree::GiftCard at ./spec/models/spree/gift_card_spec.rb.State transitions when redeemed does not allow further redemption.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:3:1\"}}","rspec.Spree::GiftCard at ./spec/models/spree/gift_card_spec.rb.behaves like lifecycle events lifecycle events gift_card.created publishes created event when record is created.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","rspec.Spree::GiftCard at ./spec/models/spree/gift_card_spec.rb.behaves like lifecycle events lifecycle events gift_card.deleted publishes deleted event when record is deleted.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:1\"}}","rspec.Spree::GiftCard at ./spec/models/spree/gift_card_spec.rb.behaves like lifecycle events lifecycle events gift_card.updated publishes updated event when record is updated.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","rspec.Spree::GiftCard at ./spec/models/spree/gift_card_spec.rb.custom events gift_card.partially_redeemed publishes gift_card.partially_redeemed event when partially redeemed.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:2:1\"}}","rspec.Spree::GiftCard at ./spec/models/spree/gift_card_spec.rb.custom events gift_card.redeemed publishes gift_card.redeemed event when fully redeemed.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1:1\"}}","rspec.Spree::GiftCardBatch at ./spec/models/spree/gift_card_batch_spec.rb.#create_gift_cards generates gift cards.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.Spree::GiftCardBatch at ./spec/models/spree/gift_card_batch_spec.rb.#generate_gift_cards when codes count is greater than 500 enqueues a job.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","rspec.Spree::GiftCardBatch at ./spec/models/spree/gift_card_batch_spec.rb.#generate_gift_cards when codes count is less than 500 generates gift cards.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","rspec.Spree::GiftCardBatch at ./spec/models/spree/gift_card_batch_spec.rb.lifecycle events gift_card_batch.created publishes created event when record is created.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","rspec.Spree::GiftCardBatch at ./spec/models/spree/gift_card_batch_spec.rb.lifecycle events gift_card_batch.deleted publishes deleted event when record is destroyed.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","rspec.Spree::GiftCardBatch at ./spec/models/spree/gift_card_batch_spec.rb.lifecycle events gift_card_batch.updated publishes updated event when record is updated.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","rspec.Spree::GiftCards::Apply at ./spec/services/spree/gift_cards/apply_spec.rb.applies the gift card to an order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","rspec.Spree::GiftCards::Apply at ./spec/services/spree/gift_cards/apply_spec.rb.calls update_with_updater!.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2\"}}","rspec.Spree::GiftCards::Apply at ./spec/services/spree/gift_cards/apply_spec.rb.when the gift card has a different currency responds with an error.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","rspec.Spree::GiftCards::Apply at ./spec/services/spree/gift_cards/apply_spec.rb.when the gift card has no amount remaining responds with an error.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","rspec.Spree::GiftCards::Apply at ./spec/services/spree/gift_cards/apply_spec.rb.when the gift card is assigned to a user with another user order responds with an error.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3:1\"}}","rspec.Spree::GiftCards::Apply at ./spec/services/spree/gift_cards/apply_spec.rb.when the gift card is assigned to a user with guest order responds with an error.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1\"}}","rspec.Spree::GiftCards::Apply at ./spec/services/spree/gift_cards/apply_spec.rb.when the gift card is assigned to a user with valid user applies the gift card to the order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:1\"}}","rspec.Spree::GiftCards::Apply at ./spec/services/spree/gift_cards/apply_spec.rb.when the gift card is assigned to a user with valid user calls update_with_updater!.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:2\"}}","rspec.Spree::GiftCards::Apply at ./spec/services/spree/gift_cards/apply_spec.rb.when the order has applied store credit responds with an error.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","rspec.Spree::GiftCards::BulkGenerateJob at ./spec/jobs/spree/gift_cards/bulk_generate_job_spec.rb.#perform generates gift cards.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::GiftCards::Redeem at ./spec/services/spree/gift_cards/redeem_spec.rb.when the gift card has amount remaining calls partial_redeem! on the gift card.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.Spree::GiftCards::Redeem at ./spec/services/spree/gift_cards/redeem_spec.rb.when the gift card has amount remaining returns success with the gift card.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","rspec.Spree::GiftCards::Redeem at ./spec/services/spree/gift_cards/redeem_spec.rb.when the gift card has no amount remaining calls redeem! on the gift card.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::GiftCards::Redeem at ./spec/services/spree/gift_cards/redeem_spec.rb.when the gift card has no amount remaining returns success with the gift card.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","rspec.Spree::GiftCards::Remove at ./spec/services/spree/gift_cards/remove_spec.rb.for an order with the gift card applied calls update_with_updater!.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","rspec.Spree::GiftCards::Remove at ./spec/services/spree/gift_cards/remove_spec.rb.for an order with the gift card applied for a completed order responds with an error.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","rspec.Spree::GiftCards::Remove at ./spec/services/spree/gift_cards/remove_spec.rb.for an order with the gift card applied removes the gift card from an order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::GiftCards::Remove at ./spec/services/spree/gift_cards/remove_spec.rb.for an order without a gift card does nothing.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.Spree::HasImageAltText at ./spec/models/concerns/spree/has_image_alt_text_spec.rb.included behavior creates the image_alt method.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::HasImageAltText at ./spec/models/concerns/spree/has_image_alt_text_spec.rb.included behavior falls back when preference is whitespace-only.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","rspec.Spree::HasImageAltText at ./spec/models/concerns/spree/has_image_alt_text_spec.rb.included behavior filename processing correctly converts various filename formats.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7:1\"}}","rspec.Spree::HasImageAltText at ./spec/models/concerns/spree/has_image_alt_text_spec.rb.included behavior returns \"Image\" as fallback when no preference and no asset.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","rspec.Spree::HasImageAltText at ./spec/models/concerns/spree/has_image_alt_text_spec.rb.included behavior returns filename-based alt when preference is blank but asset has filename.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","rspec.Spree::HasImageAltText at ./spec/models/concerns/spree/has_image_alt_text_spec.rb.included behavior returns preference value when present.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","rspec.Spree::HasImageAltText at ./spec/models/concerns/spree/has_image_alt_text_spec.rb.included behavior when asset has no filename returns \"Image\" fallback.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6:1\"}}","rspec.Spree::Image at ./spec/models/spree/image_spec.rb.#style will return style for the given name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","rspec.Spree::Image at ./spec/models/spree/image_spec.rb.#styles will return all styles for the image.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.Spree::Image at ./spec/models/spree/image_spec.rb.cache expiration update position when viewable is a master variant touches product variants.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1:1\"}}","rspec.Spree::Image at ./spec/models/spree/image_spec.rb.cache expiration update position when viewable is a variant does not touch product variants.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:2:1\"}}","rspec.Spree::Image at ./spec/models/spree/image_spec.rb.image_count counter cache decrements image_count when image is destroyed.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2\"}}","rspec.Spree::Image at ./spec/models/spree/image_spec.rb.image_count counter cache increments image_count when image is created.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","rspec.Spree::Image at ./spec/models/spree/image_spec.rb.image_count counter cache tracks multiple images correctly.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3\"}}","rspec.Spree::Image at ./spec/models/spree/image_spec.rb.total_image_count counter cache on product decrements total_image_count when image is destroyed.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:3\"}}","rspec.Spree::Image at ./spec/models/spree/image_spec.rb.total_image_count counter cache on product increments total_image_count when image is created on master.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","rspec.Spree::Image at ./spec/models/spree/image_spec.rb.total_image_count counter cache on product increments total_image_count when image is created on variant.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2\"}}","rspec.Spree::Image at ./spec/models/spree/image_spec.rb.total_image_count counter cache on product tracks images across all variants correctly.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:4\"}}","rspec.Spree::Image at ./spec/models/spree/image_spec.rb.validation allows only web image content types.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","rspec.Spree::Image at ./spec/models/spree/image_spec.rb.validation does not allow non-web image content types.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","rspec.Spree::Image at ./spec/models/spree/image_spec.rb.validation has attachment absent.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","rspec.Spree::Image at ./spec/models/spree/image_spec.rb.validation has attachment present.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::ImageMethods at ./spec/models/concerns/spree/image_methods_spec.rb.#generate_url when gravity is not set to centre attachment.variant should receive the unchanged value of gravity.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","rspec.Spree::ImageMethods at ./spec/models/concerns/spree/image_methods_spec.rb.#generate_url when gravity is set to centre attachment.variant should receive \"gravity: center\" when image processing variant is nil.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","rspec.Spree::ImageMethods at ./spec/models/concerns/spree/image_methods_spec.rb.#generate_url when gravity is set to centre should return center when image processing variant is mini magick.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2\"}}","rspec.Spree::ImageMethods at ./spec/models/concerns/spree/image_methods_spec.rb.#generate_url when gravity is set to centre should return centre when image processing variant is VIPS.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:3\"}}","rspec.Spree::Images::SaveFromUrlJob at ./spec/jobs/spree/images/save_from_url_job_spec.rb.can be enqueued.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2\"}}","rspec.Spree::Images::SaveFromUrlJob at ./spec/jobs/spree/images/save_from_url_job_spec.rb.is queued in the correct queue.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","rspec.Spree::Images::SaveFromUrlJob at ./spec/jobs/spree/images/save_from_url_job_spec.rb.when performing the job downloads and attaches image from the URL.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","rspec.Spree::Images::SaveFromUrlJob at ./spec/jobs/spree/images/save_from_url_job_spec.rb.when performing the job when image already exists with the given external_url does not re-download but triggers save!.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3:1\"}}","rspec.Spree::Images::SaveFromUrlJob at ./spec/jobs/spree/images/save_from_url_job_spec.rb.when performing the job when skip_import? returns true does not download the image.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4:1\"}}","rspec.Spree::Images::SaveFromUrlJob at ./spec/jobs/spree/images/save_from_url_job_spec.rb.when performing the job with position sets the position if provided.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","rspec.Spree::ImagesHelper at ./spec/helpers/images_helper_spec.rb.#spree_asset_aspect_ratio when aspect_ratio is present in metadata returns the aspect ratio.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3:1\"}}","rspec.Spree::ImagesHelper at ./spec/helpers/images_helper_spec.rb.#spree_asset_aspect_ratio when attachment is not analyzed returns nil.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","rspec.Spree::ImagesHelper at ./spec/helpers/images_helper_spec.rb.#spree_asset_aspect_ratio when attachment is not present returns nil.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","rspec.Spree::ImagesHelper at ./spec/helpers/images_helper_spec.rb.#spree_asset_aspect_ratio when calculating aspect ratio from dimensions when height is greater than width returns the correct ratio.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4:1:1\"}}","rspec.Spree::ImagesHelper at ./spec/helpers/images_helper_spec.rb.#spree_asset_aspect_ratio when calculating aspect ratio from dimensions when width equals height returns 1.0.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4:3:1\"}}","rspec.Spree::ImagesHelper at ./spec/helpers/images_helper_spec.rb.#spree_asset_aspect_ratio when calculating aspect ratio from dimensions when width is greater than height returns the correct ratio.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4:2:1\"}}","rspec.Spree::ImagesHelper at ./spec/helpers/images_helper_spec.rb.#spree_image_tag returns an image tag with the correct url.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::ImagesHelper at ./spec/helpers/images_helper_spec.rb.#spree_image_tag when image is not attached returns nil.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","rspec.Spree::ImagesHelper at ./spec/helpers/images_helper_spec.rb.#spree_image_tag when image is not variable returns nil.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1\"}}","rspec.Spree::ImagesHelper at ./spec/helpers/images_helper_spec.rb.#spree_image_tag when variant option is provided ignores width, height, and format when variant is provided.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2\"}}","rspec.Spree::ImagesHelper at ./spec/helpers/images_helper_spec.rb.#spree_image_tag when variant option is provided passes only variant to spree_image_url and excludes it from image_tag options.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","rspec.Spree::ImagesHelper at ./spec/helpers/images_helper_spec.rb.#spree_image_url supports blob.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.Spree::ImagesHelper at ./spec/helpers/images_helper_spec.rb.#spree_image_url when format is provided returns a url with the correct format.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:6:1\"}}","rspec.Spree::ImagesHelper at ./spec/helpers/images_helper_spec.rb.#spree_image_url when image is not attached returns nil.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","rspec.Spree::ImagesHelper at ./spec/helpers/images_helper_spec.rb.#spree_image_url when image is not variable returns nil.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:1\"}}","rspec.Spree::ImagesHelper at ./spec/helpers/images_helper_spec.rb.#spree_image_url when only width is present returns a url with resize_to_limit.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:5:1\"}}","rspec.Spree::ImagesHelper at ./spec/helpers/images_helper_spec.rb.#spree_image_url when variant option is provided ignores width and height when variant is provided.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:7:2\"}}","rspec.Spree::ImagesHelper at ./spec/helpers/images_helper_spec.rb.#spree_image_url when variant option is provided uses the named variant directly.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:7:1\"}}","rspec.Spree::ImagesHelper at ./spec/helpers/images_helper_spec.rb.#spree_image_url when width and height are present returns a url with resize_to_fill.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:4:1\"}}","rspec.Spree::Import at ./spec/models/spree/import_spec.rb.#create_mappings auto-assigns file columns when possible.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:2\"}}","rspec.Spree::Import at ./spec/models/spree/import_spec.rb.#create_mappings creates mappings for schema fields.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1\"}}","rspec.Spree::Import at ./spec/models/spree/import_spec.rb.#create_rows_async enqueues CreateRowsJob.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:1\"}}","rspec.Spree::Import at ./spec/models/spree/import_spec.rb.#csv_headers returns the CSV headers.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","rspec.Spree::Import at ./spec/models/spree/import_spec.rb.#csv_headers with custom delimiter parses headers with custom delimiter.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2:1\"}}","rspec.Spree::Import at ./spec/models/spree/import_spec.rb.#display_name returns the correct display name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","rspec.Spree::Import at ./spec/models/spree/import_spec.rb.#event_serializer_class returns the correct event serializer class.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:1\"}}","rspec.Spree::Import at ./spec/models/spree/import_spec.rb.#import_schema returns the correct schema class.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","rspec.Spree::Import at ./spec/models/spree/import_spec.rb.#mapping_done? when all required fields are mapped returns true.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1:1\"}}","rspec.Spree::Import at ./spec/models/spree/import_spec.rb.#mapping_done? when not all required fields are mapped returns false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2:1\"}}","rspec.Spree::Import at ./spec/models/spree/import_spec.rb.#model_class for Customers import returns the user class.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1\"}}","rspec.Spree::Import at ./spec/models/spree/import_spec.rb.#model_class for Products import returns Spree::Product.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1\"}}","rspec.Spree::Import at ./spec/models/spree/import_spec.rb.#process_rows_async enqueues ProcessRowsJob.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:1\"}}","rspec.Spree::Import at ./spec/models/spree/import_spec.rb.#schema_fields when model does not support metafields does not include any metafield fields.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2:2\"}}","rspec.Spree::Import at ./spec/models/spree/import_spec.rb.#schema_fields when model does not support metafields returns only base fields from schema.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2:1\"}}","rspec.Spree::Import at ./spec/models/spree/import_spec.rb.#schema_fields when model supports metafields but has no metafield definitions returns only base fields.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:3:1\"}}","rspec.Spree::Import at ./spec/models/spree/import_spec.rb.#schema_fields when model supports metafields combines base fields and metafield fields.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1:3\"}}","rspec.Spree::Import at ./spec/models/spree/import_spec.rb.#schema_fields when model supports metafields has correct structure for metafield fields.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1:4\"}}","rspec.Spree::Import at ./spec/models/spree/import_spec.rb.#schema_fields when model supports metafields includes metafield fields.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1:2\"}}","rspec.Spree::Import at ./spec/models/spree/import_spec.rb.#schema_fields when model supports metafields returns base fields from schema.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1:1\"}}","rspec.Spree::Import at ./spec/models/spree/import_spec.rb.#store when owner is a Store returns the owner.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:1:1\"}}","rspec.Spree::Import at ./spec/models/spree/import_spec.rb.#unmapped_file_columns returns columns that are not mapped.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1\"}}","rspec.Spree::Import at ./spec/models/spree/import_spec.rb..available_models returns model classes for available types.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:1\"}}","rspec.Spree::Import at ./spec/models/spree/import_spec.rb..available_types returns configured import types.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:1\"}}","rspec.Spree::Import at ./spec/models/spree/import_spec.rb..model_class returns the model class for the import type.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:1\"}}","rspec.Spree::Import at ./spec/models/spree/import_spec.rb..type_for_model returns the import type for a given model.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:17:1\"}}","rspec.Spree::Import at ./spec/models/spree/import_spec.rb.State machine complete event publishes import.completed event.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:5:2\"}}","rspec.Spree::Import at ./spec/models/spree/import_spec.rb.State machine complete event transitions from processing to completed.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:5:1\"}}","rspec.Spree::Import at ./spec/models/spree/import_spec.rb.State machine complete_mapping event creates rows asynchronously after transition.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3:2\"}}","rspec.Spree::Import at ./spec/models/spree/import_spec.rb.State machine complete_mapping event transitions from mapping to completed_mapping.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3:1\"}}","rspec.Spree::Import at ./spec/models/spree/import_spec.rb.State machine initial state starts in pending state.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","rspec.Spree::Import at ./spec/models/spree/import_spec.rb.State machine start_mapping event creates mappings before transition.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:2\"}}","rspec.Spree::Import at ./spec/models/spree/import_spec.rb.State machine start_mapping event transitions from pending to mapping.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","rspec.Spree::Import at ./spec/models/spree/import_spec.rb.State machine start_processing event transitions from completed_mapping to processing.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4:1\"}}","rspec.Spree::Import at ./spec/models/spree/import_spec.rb.Validations attachment validation validates attachment content type.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","rspec.Spree::Import at ./spec/models/spree/import_spec.rb.Validations type validation allows valid types.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:2\"}}","rspec.Spree::Import at ./spec/models/spree/import_spec.rb.Validations type validation validates type is whitelisted.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","rspec.Spree::Import at ./spec/models/spree/import_spec.rb.behaves like lifecycle events lifecycle events import.created publishes created event when record is created.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","rspec.Spree::Import at ./spec/models/spree/import_spec.rb.behaves like lifecycle events lifecycle events import.deleted publishes deleted event when record is deleted.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:1\"}}","rspec.Spree::Import at ./spec/models/spree/import_spec.rb.behaves like lifecycle events lifecycle events import.updated publishes updated event when record is updated.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","rspec.Spree::Import at ./spec/models/spree/import_spec.rb.custom events import.completed publishes import.completed event when completed.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:20:1:1\"}}","rspec.Spree::ImportMapping at ./spec/models/spree/import_mapping_spec.rb.#mapped? when file_column is blank returns false when file_column is empty string.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:2\"}}","rspec.Spree::ImportMapping at ./spec/models/spree/import_mapping_spec.rb.#mapped? when file_column is blank returns false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1\"}}","rspec.Spree::ImportMapping at ./spec/models/spree/import_mapping_spec.rb.#mapped? when file_column is present returns true.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1\"}}","rspec.Spree::ImportMapping at ./spec/models/spree/import_mapping_spec.rb.#required? when schema_field is a required field returns true.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","rspec.Spree::ImportMapping at ./spec/models/spree/import_mapping_spec.rb.#required? when schema_field is not a required field returns false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","rspec.Spree::ImportMapping at ./spec/models/spree/import_mapping_spec.rb.#schema_field_label when schema_field does not exist in import schema returns nil.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:3:1\"}}","rspec.Spree::ImportMapping at ./spec/models/spree/import_mapping_spec.rb.#schema_field_label when schema_field exists in import schema returns the label for the schema field.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1:1\"}}","rspec.Spree::ImportMapping at ./spec/models/spree/import_mapping_spec.rb.#schema_field_label when schema_field is a metafield returns the metafield definition name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2:1\"}}","rspec.Spree::ImportMapping at ./spec/models/spree/import_mapping_spec.rb.#try_to_auto_assign_file_column when case-insensitive match exists assigns the matching file column.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1\"}}","rspec.Spree::ImportMapping at ./spec/models/spree/import_mapping_spec.rb.#try_to_auto_assign_file_column when exact match exists assigns the matching file column.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:1\"}}","rspec.Spree::ImportMapping at ./spec/models/spree/import_mapping_spec.rb.#try_to_auto_assign_file_column when file_column is already set overwrites with matching column.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:5:1\"}}","rspec.Spree::ImportMapping at ./spec/models/spree/import_mapping_spec.rb.#try_to_auto_assign_file_column when no match exists does not assign a file column.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:4:1\"}}","rspec.Spree::ImportMapping at ./spec/models/spree/import_mapping_spec.rb.#try_to_auto_assign_file_column when parameterized match exists assigns the matching file column.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3:1\"}}","rspec.Spree::ImportMapping at ./spec/models/spree/import_mapping_spec.rb.Associations example at ./spec/models/spree/import_mapping_spec.rb:9.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::ImportMapping at ./spec/models/spree/import_mapping_spec.rb.Validations presence validations validates presence of import.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","rspec.Spree::ImportMapping at ./spec/models/spree/import_mapping_spec.rb.Validations presence validations validates presence of schema_field.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:2\"}}","rspec.Spree::ImportMapping at ./spec/models/spree/import_mapping_spec.rb.Validations uniqueness validations allows blank file_column.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:4\"}}","rspec.Spree::ImportMapping at ./spec/models/spree/import_mapping_spec.rb.Validations uniqueness validations allows same file_column for different imports.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:5\"}}","rspec.Spree::ImportMapping at ./spec/models/spree/import_mapping_spec.rb.Validations uniqueness validations allows same schema_field for different imports.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:2\"}}","rspec.Spree::ImportMapping at ./spec/models/spree/import_mapping_spec.rb.Validations uniqueness validations validates uniqueness of file_column scoped to import_id.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:3\"}}","rspec.Spree::ImportMapping at ./spec/models/spree/import_mapping_spec.rb.Validations uniqueness validations validates uniqueness of schema_field scoped to import_id.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","rspec.Spree::ImportRow at ./spec/models/spree/import_row_spec.rb.#attribute_by_schema_field returns the mapped attribute value.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","rspec.Spree::ImportRow at ./spec/models/spree/import_row_spec.rb.#data_json with invalid JSON data returns empty hash.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1\"}}","rspec.Spree::ImportRow at ./spec/models/spree/import_row_spec.rb.#data_json with valid JSON data memoizes the result.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:2\"}}","rspec.Spree::ImportRow at ./spec/models/spree/import_row_spec.rb.#data_json with valid JSON data returns parsed JSON.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:1\"}}","rspec.Spree::ImportRow at ./spec/models/spree/import_row_spec.rb.#process! when processing fails reports the error to Rails.error.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2:3\"}}","rspec.Spree::ImportRow at ./spec/models/spree/import_row_spec.rb.#process! when processing fails sets validation errors.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2:2\"}}","rspec.Spree::ImportRow at ./spec/models/spree/import_row_spec.rb.#process! when processing fails transitions to failed.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2:1\"}}","rspec.Spree::ImportRow at ./spec/models/spree/import_row_spec.rb.#process! when processing succeeds sets the item.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1:2\"}}","rspec.Spree::ImportRow at ./spec/models/spree/import_row_spec.rb.#process! when processing succeeds transitions to processing then completed.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1:1\"}}","rspec.Spree::ImportRow at ./spec/models/spree/import_row_spec.rb.#to_schema_hash returns attributes mapped to schema fields.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","rspec.Spree::ImportRow at ./spec/models/spree/import_row_spec.rb.Associations #store delegates to import.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","rspec.Spree::ImportRow at ./spec/models/spree/import_row_spec.rb.Scopes .completed returns only completed rows.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1\"}}","rspec.Spree::ImportRow at ./spec/models/spree/import_row_spec.rb.Scopes .failed returns only failed rows.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3:1\"}}","rspec.Spree::ImportRow at ./spec/models/spree/import_row_spec.rb.Scopes .pending_and_failed returns pending and failed rows.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1\"}}","rspec.Spree::ImportRow at ./spec/models/spree/import_row_spec.rb.Scopes .processed returns completed and failed rows.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:4:1\"}}","rspec.Spree::ImportRow at ./spec/models/spree/import_row_spec.rb.State machine complete event publishes import_row.complete event.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4:2\"}}","rspec.Spree::ImportRow at ./spec/models/spree/import_row_spec.rb.State machine complete event transitions from processing to completed.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4:1\"}}","rspec.Spree::ImportRow at ./spec/models/spree/import_row_spec.rb.State machine fail event publishes import_row.fail event.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3:2\"}}","rspec.Spree::ImportRow at ./spec/models/spree/import_row_spec.rb.State machine fail event transitions from processing to failed.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3:1\"}}","rspec.Spree::ImportRow at ./spec/models/spree/import_row_spec.rb.State machine initial state starts in pending state.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","rspec.Spree::ImportRow at ./spec/models/spree/import_row_spec.rb.State machine start_processing event transitions from pending to processing.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","rspec.Spree::ImportRow at ./spec/models/spree/import_row_spec.rb.Validations row_number uniqueness allows same row_number for different imports.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:2\"}}","rspec.Spree::ImportRow at ./spec/models/spree/import_row_spec.rb.Validations row_number uniqueness validates uniqueness scoped to import_id.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","rspec.Spree::Imports::CreateRowsJob at ./spec/jobs/spree/imports/create_rows_job_spec.rb.creates import rows from the CSV file.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","rspec.Spree::Imports::CreateRowsJob at ./spec/jobs/spree/imports/create_rows_job_spec.rb.enqueues process_rows_async after rows creation.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4\"}}","rspec.Spree::Imports::CreateRowsJob at ./spec/jobs/spree/imports/create_rows_job_spec.rb.persists rows count.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3\"}}","rspec.Spree::Imports::CreateRowsJob at ./spec/jobs/spree/imports/create_rows_job_spec.rb.transitions import to processing if not already processing.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2\"}}","rspec.Spree::Imports::CreateRowsJob at ./spec/jobs/spree/imports/create_rows_job_spec.rb.when CSV is malformed sets processing_errors and fails the import.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","rspec.Spree::Imports::ProcessRowsJob at ./spec/jobs/spree/imports/process_rows_job_spec.rb.marks import as complete after processing all rows.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2\"}}","rspec.Spree::Imports::ProcessRowsJob at ./spec/jobs/spree/imports/process_rows_job_spec.rb.processes pending and failed rows.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","rspec.Spree::Imports::RowProcessors::ProductVariant at ./spec/services/spree/imports/row_processors/product_variant_spec.rb.when importing a master variant product row creates a product and sets correct attributes.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::Imports::RowProcessors::ProductVariant at ./spec/services/spree/imports/row_processors/product_variant_spec.rb.when importing a master variant product row when updating an existing master variant updates inventory_count and inventory_backorderable.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","rspec.Spree::Imports::RowProcessors::ProductVariant at ./spec/services/spree/imports/row_processors/product_variant_spec.rb.when importing a variant row with a new option type/value creates a new option type and value as needed.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","rspec.Spree::Imports::RowProcessors::ProductVariant at ./spec/services/spree/imports/row_processors/product_variant_spec.rb.when importing a variant row with options assigns to existing product and creates/re-uses option values.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.Spree::Imports::RowProcessors::ProductVariant at ./spec/services/spree/imports/row_processors/product_variant_spec.rb.when importing a variant row with options but product does not exist raises ActiveRecord::RecordNotFound.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","rspec.Spree::Imports::RowProcessors::ProductVariant at ./spec/services/spree/imports/row_processors/product_variant_spec.rb.when importing a variant row with options but slug is missing raises ActiveRecord::RecordNotFound with descriptive message.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1\"}}","rspec.Spree::Imports::RowProcessors::ProductVariant at ./spec/services/spree/imports/row_processors/product_variant_spec.rb.when importing a variant row with options when importing a variant row for existing variant updates the variant.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","rspec.Spree::Imports::RowProcessors::ProductVariant at ./spec/services/spree/imports/row_processors/product_variant_spec.rb.when importing a variant row with options when importing a variant row for existing variant when updating inventory values updates inventory_count and inventory_backorderable.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:2:1\"}}","rspec.Spree::Imports::RowProcessors::ProductVariant at ./spec/services/spree/imports/row_processors/product_variant_spec.rb.when importing a variant with all option columns empty does not create a variant.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","rspec.Spree::Imports::RowProcessors::ProductVariant at ./spec/services/spree/imports/row_processors/product_variant_spec.rb.when importing with shipping_category when shipping_category does not exist assigns the default shipping category.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2:1\"}}","rspec.Spree::Imports::RowProcessors::ProductVariant at ./spec/services/spree/imports/row_processors/product_variant_spec.rb.when importing with shipping_category when shipping_category exists assigns the shipping category to the product.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1:1\"}}","rspec.Spree::Imports::RowProcessors::ProductVariant at ./spec/services/spree/imports/row_processors/product_variant_spec.rb.when importing with shipping_category when shipping_category is not provided assigns the default shipping category.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:4:1\"}}","rspec.Spree::Imports::RowProcessors::ProductVariant at ./spec/services/spree/imports/row_processors/product_variant_spec.rb.when importing with shipping_category when updating product with different shipping_category updates the shipping category.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:3:1\"}}","rspec.Spree::Imports::RowProcessors::ProductVariant at ./spec/services/spree/imports/row_processors/product_variant_spec.rb.when importing with tax_category when importing a non-master variant with tax_category assigns tax category to the non-master variant.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:5:1\"}}","rspec.Spree::Imports::RowProcessors::ProductVariant at ./spec/services/spree/imports/row_processors/product_variant_spec.rb.when importing with tax_category when tax_category does not exist does not assign a tax category.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:2:1\"}}","rspec.Spree::Imports::RowProcessors::ProductVariant at ./spec/services/spree/imports/row_processors/product_variant_spec.rb.when importing with tax_category when tax_category exists assigns the tax category to the variant.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:1:1\"}}","rspec.Spree::Imports::RowProcessors::ProductVariant at ./spec/services/spree/imports/row_processors/product_variant_spec.rb.when importing with tax_category when tax_category is not provided does not assign a tax category.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:4:1\"}}","rspec.Spree::Imports::RowProcessors::ProductVariant at ./spec/services/spree/imports/row_processors/product_variant_spec.rb.when importing with tax_category when updating variant with different tax_category updates the tax category.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:3:1\"}}","rspec.Spree::Imports::RowProcessors::ProductVariant at ./spec/services/spree/imports/row_processors/product_variant_spec.rb.when variant row refers to missing product slug creates a new product and assigns the variant as its master if no option1_name given.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1\"}}","rspec.Spree::Imports::RowProcessors::ProductVariant at ./spec/services/spree/imports/row_processors/product_variant_spec.rb.with images saves the images.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","rspec.Spree::Imports::RowProcessors::ProductVariant at ./spec/services/spree/imports/row_processors/product_variant_spec.rb.with metafields auto-assigns file_column for metafield mappings when CSV headers match.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:2\"}}","rspec.Spree::Imports::RowProcessors::ProductVariant at ./spec/services/spree/imports/row_processors/product_variant_spec.rb.with metafields creates mappings for metafields automatically.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1\"}}","rspec.Spree::Imports::RowProcessors::ProductVariant at ./spec/services/spree/imports/row_processors/product_variant_spec.rb.with metafields sets metafields on the product.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:3\"}}","rspec.Spree::Imports::RowProcessors::ProductVariant at ./spec/services/spree/imports/row_processors/product_variant_spec.rb.with metafields when metafield value is blank skips blank metafield values.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:5:1\"}}","rspec.Spree::Imports::RowProcessors::ProductVariant at ./spec/services/spree/imports/row_processors/product_variant_spec.rb.with metafields when processing a non-master variant row does not clear out existing metafield values.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:7:1\"}}","rspec.Spree::Imports::RowProcessors::ProductVariant at ./spec/services/spree/imports/row_processors/product_variant_spec.rb.with metafields when updating an existing product with metafields updates existing metafields.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:4:1\"}}","rspec.Spree::Imports::RowProcessors::ProductVariant at ./spec/services/spree/imports/row_processors/product_variant_spec.rb.with metafields when updating existing product metafields with blank values removes existing metafield when empty value is uploaded.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:6:1\"}}","rspec.Spree::Imports::RowProcessors::ProductVariant at ./spec/services/spree/imports/row_processors/product_variant_spec.rb.with metafields when updating existing product metafields with blank values when all metafields have blank values removes all existing metafields.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:6:2:1\"}}","rspec.Spree::Imports::RowProcessors::ProductVariant at ./spec/services/spree/imports/row_processors/product_variant_spec.rb.with taxons assigns taxons to the product.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","rspec.Spree::Imports::RowProcessors::ProductVariant at ./spec/services/spree/imports/row_processors/product_variant_spec.rb.with taxons when importing a variant row with no taxons keeps the product taxons.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:5:1\"}}","rspec.Spree::Imports::RowProcessors::ProductVariant at ./spec/services/spree/imports/row_processors/product_variant_spec.rb.with taxons when taxons are not provided assigns no taxons to the product.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3:1\"}}","rspec.Spree::Imports::RowProcessors::ProductVariant at ./spec/services/spree/imports/row_processors/product_variant_spec.rb.with taxons when taxons format is invalid skips invalid taxons.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:4:1\"}}","rspec.Spree::Imports::RowProcessors::ProductVariant at ./spec/services/spree/imports/row_processors/product_variant_spec.rb.with taxons when the taxons already exist assigns the existing taxons to the product.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1\"}}","rspec.Spree::Integration at ./spec/models/spree/integration_spec.rb.example at ./spec/models/spree/integration_spec.rb:7.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","rspec.Spree::InventoryUnit at ./spec/models/spree/inventory_unit_spec.rb.#additional_tax_total is the correct amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","rspec.Spree::InventoryUnit at ./spec/models/spree/inventory_unit_spec.rb.#additional_tax_total is the correct amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","rspec.Spree::InventoryUnit at ./spec/models/spree/inventory_unit_spec.rb.#backordered_for_stock_item does not change shipping cost when fulfilling the order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:5\"}}","rspec.Spree::InventoryUnit at ./spec/models/spree/inventory_unit_spec.rb.#backordered_for_stock_item does not find inventory units that aren't backordered.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3\"}}","rspec.Spree::InventoryUnit at ./spec/models/spree/inventory_unit_spec.rb.#backordered_for_stock_item does not find inventory units that don't match the stock item's variant.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:4\"}}","rspec.Spree::InventoryUnit at ./spec/models/spree/inventory_unit_spec.rb.#backordered_for_stock_item finds inventory units from its stock location when the unit's variant matches the stock item's variant.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","rspec.Spree::InventoryUnit at ./spec/models/spree/inventory_unit_spec.rb.#backordered_for_stock_item other shipments does not find inventory units belonging to incomplete orders.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:6:1\"}}","rspec.Spree::InventoryUnit at ./spec/models/spree/inventory_unit_spec.rb.#backordered_for_stock_item returns modifiable objects.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.Spree::InventoryUnit at ./spec/models/spree/inventory_unit_spec.rb.#charged_amount is the correct amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1\"}}","rspec.Spree::InventoryUnit at ./spec/models/spree/inventory_unit_spec.rb.#current_or_new_return_item associated with a return item connects return_authorizations.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:3\"}}","rspec.Spree::InventoryUnit at ./spec/models/spree/inventory_unit_spec.rb.#current_or_new_return_item associated with a return item returns a persisted return item.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1\"}}","rspec.Spree::InventoryUnit at ./spec/models/spree/inventory_unit_spec.rb.#current_or_new_return_item associated with a return item returns it's associated return_item.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:2\"}}","rspec.Spree::InventoryUnit at ./spec/models/spree/inventory_unit_spec.rb.#current_or_new_return_item no associated return item associates itself to the new return_item.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:2\"}}","rspec.Spree::InventoryUnit at ./spec/models/spree/inventory_unit_spec.rb.#current_or_new_return_item no associated return item returns a new return item.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1\"}}","rspec.Spree::InventoryUnit at ./spec/models/spree/inventory_unit_spec.rb.#finalize_units! creates a stock movement.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","rspec.Spree::InventoryUnit at ./spec/models/spree/inventory_unit_spec.rb.#included_tax_total is the correct amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","rspec.Spree::InventoryUnit at ./spec/models/spree/inventory_unit_spec.rb.#included_tax_total is the correct amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1\"}}","rspec.Spree::InventoryUnit at ./spec/models/spree/inventory_unit_spec.rb.scopes .backordered example at ./spec/models/spree/inventory_unit_spec.rb:14.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","rspec.Spree::InventoryUnit at ./spec/models/spree/inventory_unit_spec.rb.scopes .on_hand example at ./spec/models/spree/inventory_unit_spec.rb:18.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","rspec.Spree::InventoryUnit at ./spec/models/spree/inventory_unit_spec.rb.scopes .on_hand_or_backordered example at ./spec/models/spree/inventory_unit_spec.rb:22.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","rspec.Spree::InventoryUnit at ./spec/models/spree/inventory_unit_spec.rb.scopes .returned example at ./spec/models/spree/inventory_unit_spec.rb:30.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5:1\"}}","rspec.Spree::InventoryUnit at ./spec/models/spree/inventory_unit_spec.rb.scopes .shipped example at ./spec/models/spree/inventory_unit_spec.rb:26.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1\"}}","rspec.Spree::Invitation at ./spec/models/spree/invitation_spec.rb.#expired? returns false when expires_at is in the future.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2\"}}","rspec.Spree::Invitation at ./spec/models/spree/invitation_spec.rb.#expired? returns true when expires_at is in the past.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","rspec.Spree::Invitation at ./spec/models/spree/invitation_spec.rb.#resend! does not publish event if invitation is accepted.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3\"}}","rspec.Spree::Invitation at ./spec/models/spree/invitation_spec.rb.#resend! does not publish event if invitation is expired.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2\"}}","rspec.Spree::Invitation at ./spec/models/spree/invitation_spec.rb.#resend! publishes invitation.resent event if invitation is pending and not expired.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","rspec.Spree::Invitation at ./spec/models/spree/invitation_spec.rb.Callbacks sets defaults on initialization.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.Spree::Invitation at ./spec/models/spree/invitation_spec.rb.Callbacks sets invitee from email before validation.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","rspec.Spree::Invitation at ./spec/models/spree/invitation_spec.rb.State Machine has initial state of pending.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","rspec.Spree::Invitation at ./spec/models/spree/invitation_spec.rb.State Machine when accepting an invitation changes status to accepted.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","rspec.Spree::Invitation at ./spec/models/spree/invitation_spec.rb.State Machine when accepting an invitation creates a resource user.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:4\"}}","rspec.Spree::Invitation at ./spec/models/spree/invitation_spec.rb.State Machine when accepting an invitation publishes invitation.accept event.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:3\"}}","rspec.Spree::Invitation at ./spec/models/spree/invitation_spec.rb.State Machine when accepting an invitation sets accepted_at timestamp.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:2\"}}","rspec.Spree::Invitation at ./spec/models/spree/invitation_spec.rb.Validations when invitation is accepted after expiration is invalid.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","rspec.Spree::Invitation at ./spec/models/spree/invitation_spec.rb.Validations when invitee already exists in the store is invalid.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","rspec.Spree::Invitation at ./spec/models/spree/invitation_spec.rb.Validations when invitee is the same as inviter is invalid.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","rspec.Spree::InvitationEmailSubscriber at ./spec/subscribers/spree/invitation_email_subscriber_spec.rb.invitation.accepted event sends acceptance notification email.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.Spree::InvitationEmailSubscriber at ./spec/subscribers/spree/invitation_email_subscriber_spec.rb.invitation.accepted event when invitation not found does not raise an error.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","rspec.Spree::InvitationEmailSubscriber at ./spec/subscribers/spree/invitation_email_subscriber_spec.rb.invitation.created event sends invitation email.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::InvitationEmailSubscriber at ./spec/subscribers/spree/invitation_email_subscriber_spec.rb.invitation.created event when invitation not found does not raise an error.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","rspec.Spree::InvitationEmailSubscriber at ./spec/subscribers/spree/invitation_email_subscriber_spec.rb.invitation.resent event resends invitation email.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","rspec.Spree::InvitationEmailSubscriber at ./spec/subscribers/spree/invitation_email_subscriber_spec.rb.invitation.resent event when invitation is accepted does not send invitation email.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3:1\"}}","rspec.Spree::InvitationEmailSubscriber at ./spec/subscribers/spree/invitation_email_subscriber_spec.rb.invitation.resent event when invitation is deleted does not send invitation email.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4:1\"}}","rspec.Spree::InvitationEmailSubscriber at ./spec/subscribers/spree/invitation_email_subscriber_spec.rb.invitation.resent event when invitation is expired does not send invitation email.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","rspec.Spree::InvitationEmailSubscriber at ./spec/subscribers/spree/invitation_email_subscriber_spec.rb.invitation.resent event when invitation not found does not raise an error.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:5:1\"}}","rspec.Spree::InvitationMailer at ./spec/mailers/spree/invitation_mailer_spec.rb.#invitation_accepted includes the invitee name in the body.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","rspec.Spree::InvitationMailer at ./spec/mailers/spree/invitation_mailer_spec.rb.#invitation_accepted renders the subject.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.Spree::InvitationMailer at ./spec/mailers/spree/invitation_mailer_spec.rb.#invitation_accepted sends from the store mail from address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:4\"}}","rspec.Spree::InvitationMailer at ./spec/mailers/spree/invitation_mailer_spec.rb.#invitation_accepted sends to the correct recipient.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3\"}}","rspec.Spree::InvitationMailer at ./spec/mailers/spree/invitation_mailer_spec.rb.#invitation_accepted sets reply-to as the store mail from address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:5\"}}","rspec.Spree::InvitationMailer at ./spec/mailers/spree/invitation_mailer_spec.rb.#invitation_email includes the invitation link in the body.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","rspec.Spree::InvitationMailer at ./spec/mailers/spree/invitation_mailer_spec.rb.#invitation_email renders the subject.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::InvitationMailer at ./spec/mailers/spree/invitation_mailer_spec.rb.#invitation_email sends from the store mail from address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","rspec.Spree::InvitationMailer at ./spec/mailers/spree/invitation_mailer_spec.rb.#invitation_email sends to the correct recipient.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","rspec.Spree::InvitationMailer at ./spec/mailers/spree/invitation_mailer_spec.rb.#invitation_email sets reply-to as the store mail from address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","rspec.Spree::LegacyUser at ./spec/models/spree/admin_user_spec.rb.#can_be_deleted? when store has no other admin users example at ./spec/models/spree/admin_user_spec.rb:18.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","rspec.Spree::LegacyUser at ./spec/models/spree/admin_user_spec.rb.#can_be_deleted? when store has other admin users example at ./spec/models/spree/admin_user_spec.rb:14.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","rspec.Spree::LegacyUser at ./spec/models/spree/admin_user_spec.rb.#can_be_deleted? when the user does not have admin role example at ./spec/models/spree/admin_user_spec.rb:24.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","rspec.Spree::LegacyUser at ./spec/models/spree/admin_user_spec.rb.#destroy (regression tests) admin user invited other other users accept invitation does not remove other user's role.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1:1\"}}","rspec.Spree::LegacyUser at ./spec/models/spree/admin_user_spec.rb.Callbacks cleans up admin user resources nullifies admin user resources.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","rspec.Spree::LegacyUser at ./spec/models/spree/user_spec.rb.#available_store_credits user does not have any associated store credits returns empty array.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:3:1:1\"}}","rspec.Spree::LegacyUser at ./spec/models/spree/user_spec.rb.#available_store_credits user has several associated store credits store credits have never been used returns store credit amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:3:2:1:1\"}}","rspec.Spree::LegacyUser at ./spec/models/spree/user_spec.rb.#available_store_credits user has several associated store credits store credits in different currencies exits returns sum of amounts.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:3:2:2:1\"}}","rspec.Spree::LegacyUser at ./spec/models/spree/user_spec.rb.#can_be_deleted? when user has completed orders example at ./spec/models/spree/user_spec.rb:18.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","rspec.Spree::LegacyUser at ./spec/models/spree/user_spec.rb.#can_be_deleted? when user has no completed orders example at ./spec/models/spree/user_spec.rb:24.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","rspec.Spree::LegacyUser at ./spec/models/spree/user_spec.rb.#event_serializer_class example at ./spec/models/spree/user_spec.rb:9.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.Spree::LegacyUser at ./spec/models/spree/user_spec.rb.#full_name when both first and last names are nil does not raise error and returns nil.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1\"}}","rspec.Spree::LegacyUser at ./spec/models/spree/user_spec.rb.#full_name when names are present returns the full name of the user.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1\"}}","rspec.Spree::LegacyUser at ./spec/models/spree/user_spec.rb.#last_incomplete_order payment source drops payment source.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3:2\"}}","rspec.Spree::LegacyUser at ./spec/models/spree/user_spec.rb.#last_incomplete_order payment source has payment sources.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3:1\"}}","rspec.Spree::LegacyUser at ./spec/models/spree/user_spec.rb.#last_incomplete_order persists order address copies over order addresses.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1\"}}","rspec.Spree::LegacyUser at ./spec/models/spree/user_spec.rb.#last_incomplete_order persists order address doesnt create new addresses if user has already.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:2\"}}","rspec.Spree::LegacyUser at ./spec/models/spree/user_spec.rb.#last_incomplete_order persists order address set both bill and ship address id on subject.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:3\"}}","rspec.Spree::LegacyUser at ./spec/models/spree/user_spec.rb.#last_incomplete_order returns correct order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","rspec.Spree::LegacyUser at ./spec/models/spree/user_spec.rb.#total_available_store_credit user does not have any associated store credits returns 0.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:2:1:1\"}}","rspec.Spree::LegacyUser at ./spec/models/spree/user_spec.rb.#total_available_store_credit user has several associated store credits all store credits have never been used or authorized returns sum of amounts.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:2:2:3:1\"}}","rspec.Spree::LegacyUser at ./spec/models/spree/user_spec.rb.#total_available_store_credit user has several associated store credits part of the store credit has been used part of the store credit has been authorized returns sum of amounts minus used amount and authorized amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:2:2:1:1:1\"}}","rspec.Spree::LegacyUser at ./spec/models/spree/user_spec.rb.#total_available_store_credit user has several associated store credits part of the store credit has been used there are no authorized amounts on any of the store credits returns sum of amounts minus used amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:2:2:1:2:1\"}}","rspec.Spree::LegacyUser at ./spec/models/spree/user_spec.rb.#total_available_store_credit user has several associated store credits store credits have never been used part of the store credit has been authorized returns sum of amounts minus authorized amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:2:2:2:1:1\"}}","rspec.Spree::LegacyUser at ./spec/models/spree/user_spec.rb.#total_available_store_credit user has several associated store credits store credits have never been used there are no authorized amounts on any of the store credits returns sum of amounts.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:2:2:2:2:1\"}}","rspec.Spree::LegacyUser at ./spec/models/spree/user_spec.rb.address book has many addresses.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:4:1\"}}","rspec.Spree::LegacyUser at ./spec/models/spree/user_spec.rb.behaves like lifecycle events lifecycle events legacy_user.created publishes created event when record is created.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","rspec.Spree::LegacyUser at ./spec/models/spree/user_spec.rb.behaves like lifecycle events lifecycle events legacy_user.deleted publishes deleted event when record is deleted.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:1\"}}","rspec.Spree::LegacyUser at ./spec/models/spree/user_spec.rb.behaves like lifecycle events lifecycle events legacy_user.updated publishes updated event when record is updated.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","rspec.Spree::LegacyUser at ./spec/models/spree/user_spec.rb.reporting #average_order_value with orders returns the average completed order price for the user.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:1:4:1:1\"}}","rspec.Spree::LegacyUser at ./spec/models/spree/user_spec.rb.reporting #average_order_value without orders returns 0.00.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:1:4:2:1\"}}","rspec.Spree::LegacyUser at ./spec/models/spree/user_spec.rb.reporting #display_average_order_value returns a Spree::Money version of average_order_value.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:1:5:1\"}}","rspec.Spree::LegacyUser at ./spec/models/spree/user_spec.rb.reporting #display_lifetime_value returns a Spree::Money version of lifetime_value.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:1:2:1\"}}","rspec.Spree::LegacyUser at ./spec/models/spree/user_spec.rb.reporting #lifetime_value with orders returns the total of completed orders for the user.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:1:1:1:1\"}}","rspec.Spree::LegacyUser at ./spec/models/spree/user_spec.rb.reporting #lifetime_value without orders returns 0.00.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:1:1:2:1\"}}","rspec.Spree::LegacyUser at ./spec/models/spree/user_spec.rb.reporting #order_count returns the count of completed orders for the user.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:1:3:1\"}}","rspec.Spree::LegacyUser at ./spec/models/spree/user_spec.rb.reporting #report_values_for when order purchases in other currencies exist average_order_value with orders returns a list of average completed order prices for the user.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:1:6:1:2:1:1\"}}","rspec.Spree::LegacyUser at ./spec/models/spree/user_spec.rb.reporting #report_values_for when order purchases in other currencies exist lifetime_value returns a list of store lifetime values.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:1:6:1:1:1\"}}","rspec.Spree::LegacyUser at ./spec/models/spree/user_spec.rb.validations #address_not_associated_with_other_user bill_address when associated bill address belongs to other user assigns error to bill address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:5:1:1:3:2\"}}","rspec.Spree::LegacyUser at ./spec/models/spree/user_spec.rb.validations #address_not_associated_with_other_user bill_address when associated bill address belongs to other user behaves like invalid is invalid.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:5:1:1:3:1:1\"}}","rspec.Spree::LegacyUser at ./spec/models/spree/user_spec.rb.validations #address_not_associated_with_other_user bill_address when default bill address belongs to user behaves like valid is valid.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:5:1:1:2:1:1\"}}","rspec.Spree::LegacyUser at ./spec/models/spree/user_spec.rb.validations #address_not_associated_with_other_user bill_address when default bill address does not belong to any user behaves like valid is valid.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:5:1:1:1:1:1\"}}","rspec.Spree::LegacyUser at ./spec/models/spree/user_spec.rb.validations #address_not_associated_with_other_user ship_address when associated ship address belongs to other user assigns error to ship address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:5:1:2:3:2\"}}","rspec.Spree::LegacyUser at ./spec/models/spree/user_spec.rb.validations #address_not_associated_with_other_user ship_address when associated ship address belongs to other user behaves like invalid is invalid.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:5:1:2:3:1:1\"}}","rspec.Spree::LegacyUser at ./spec/models/spree/user_spec.rb.validations #address_not_associated_with_other_user ship_address when default ship address belongs to user behaves like valid is valid.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:5:1:2:2:1:1\"}}","rspec.Spree::LegacyUser at ./spec/models/spree/user_spec.rb.validations #address_not_associated_with_other_user ship_address when default ship address does not belong to any user behaves like valid is valid.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:5:1:2:1:1:1\"}}","rspec.Spree::LegacyUser at ./spec/models/spree/user_spec.rb.validations #address_not_deprecated_in_completed_order bill_address when default bill address is associated to completed order when default bill address is the same as associated to order behaves like valid is valid.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:5:2:1:3:1:2:1\"}}","rspec.Spree::LegacyUser at ./spec/models/spree/user_spec.rb.validations #address_not_deprecated_in_completed_order bill_address when default bill address is associated to completed order when default bill address is the same as associated to order example at ./spec/models/spree/user_spec.rb:437.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:5:2:1:3:1:1\"}}","rspec.Spree::LegacyUser at ./spec/models/spree/user_spec.rb.validations #address_not_deprecated_in_completed_order bill_address when default bill address is associated to completed order when user changed bill address which was used in completed order so the old one is deprecated assigns error to bill address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:5:2:1:3:2:3\"}}","rspec.Spree::LegacyUser at ./spec/models/spree/user_spec.rb.validations #address_not_deprecated_in_completed_order bill_address when default bill address is associated to completed order when user changed bill address which was used in completed order so the old one is deprecated behaves like invalid is invalid.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:5:2:1:3:2:2:1\"}}","rspec.Spree::LegacyUser at ./spec/models/spree/user_spec.rb.validations #address_not_deprecated_in_completed_order bill_address when default bill address is associated to completed order when user changed bill address which was used in completed order so the old one is deprecated example at ./spec/models/spree/user_spec.rb:445.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:5:2:1:3:2:1\"}}","rspec.Spree::LegacyUser at ./spec/models/spree/user_spec.rb.validations #address_not_deprecated_in_completed_order bill_address when default bill address is associated to uncompleted order behaves like valid is valid.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:5:2:1:2:1:1\"}}","rspec.Spree::LegacyUser at ./spec/models/spree/user_spec.rb.validations #address_not_deprecated_in_completed_order bill_address when default bill address is not associated to completed order behaves like valid is valid.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:5:2:1:1:1:1\"}}","rspec.Spree::LegacyUser at ./spec/models/spree/user_spec.rb.validations #address_not_deprecated_in_completed_order ship_address when default ship address is associated to completed order when default ship address is the same as associated to order behaves like valid is valid.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:5:2:2:3:1:2:1\"}}","rspec.Spree::LegacyUser at ./spec/models/spree/user_spec.rb.validations #address_not_deprecated_in_completed_order ship_address when default ship address is associated to completed order when default ship address is the same as associated to order example at ./spec/models/spree/user_spec.rb:476.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:5:2:2:3:1:1\"}}","rspec.Spree::LegacyUser at ./spec/models/spree/user_spec.rb.validations #address_not_deprecated_in_completed_order ship_address when default ship address is associated to completed order when user changed ship address which was used in completed order so the old one is deprecated assigns error to ship address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:5:2:2:3:2:3\"}}","rspec.Spree::LegacyUser at ./spec/models/spree/user_spec.rb.validations #address_not_deprecated_in_completed_order ship_address when default ship address is associated to completed order when user changed ship address which was used in completed order so the old one is deprecated behaves like invalid is invalid.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:5:2:2:3:2:2:1\"}}","rspec.Spree::LegacyUser at ./spec/models/spree/user_spec.rb.validations #address_not_deprecated_in_completed_order ship_address when default ship address is associated to completed order when user changed ship address which was used in completed order so the old one is deprecated example at ./spec/models/spree/user_spec.rb:484.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:5:2:2:3:2:1\"}}","rspec.Spree::LegacyUser at ./spec/models/spree/user_spec.rb.validations #address_not_deprecated_in_completed_order ship_address when default ship address is associated to uncompleted order behaves like valid is valid.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:5:2:2:2:1:1\"}}","rspec.Spree::LegacyUser at ./spec/models/spree/user_spec.rb.validations #address_not_deprecated_in_completed_order ship_address when default ship address is not associated to completed order behaves like valid is valid.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:5:2:2:1:1:1\"}}","rspec.Spree::LineItem at ./spec/models/spree/line_item_spec.rb.#amount returns the amount for the line item.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:27:1\"}}","rspec.Spree::LineItem at ./spec/models/spree/line_item_spec.rb.#compare_at_amount returns the compare at amount for the line item.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:1\"}}","rspec.Spree::LineItem at ./spec/models/spree/line_item_spec.rb.#compare_at_amount when compare_at_price is nil returns zero.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:2:1\"}}","rspec.Spree::LineItem at ./spec/models/spree/line_item_spec.rb.#compare_at_amount when compare_at_price is zero returns zero.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:3:1\"}}","rspec.Spree::LineItem at ./spec/models/spree/line_item_spec.rb.#copy_price copies over a variant's prices.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1\"}}","rspec.Spree::LineItem at ./spec/models/spree/line_item_spec.rb.#copy_price no price available in the selected currency doesn't copy the price.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:3:1\"}}","rspec.Spree::LineItem at ./spec/models/spree/line_item_spec.rb.#copy_price no price available in the selected currency shouldn't be valid.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:3:2\"}}","rspec.Spree::LineItem at ./spec/models/spree/line_item_spec.rb.#copy_price variant price amount is equal 0 copies over a variant's price.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2:1\"}}","rspec.Spree::LineItem at ./spec/models/spree/line_item_spec.rb.#copy_price variant price amount is equal 0 should be valid.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2:2\"}}","rspec.Spree::LineItem at ./spec/models/spree/line_item_spec.rb.#copy_tax_category copies over a variant's tax category.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:1\"}}","rspec.Spree::LineItem at ./spec/models/spree/line_item_spec.rb.#create when order does not have a tax zone does not create a tax adjustment.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:2:1\"}}","rspec.Spree::LineItem at ./spec/models/spree/line_item_spec.rb.#create when order has a tax zone creates a tax adjustment.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1:1\"}}","rspec.Spree::LineItem at ./spec/models/spree/line_item_spec.rb.#destroy deletes inventory units.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1\"}}","rspec.Spree::LineItem at ./spec/models/spree/line_item_spec.rb.#dimensions_unit returns the dimension unit for the line item.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:32:1\"}}","rspec.Spree::LineItem at ./spec/models/spree/line_item_spec.rb.#discontinued fetches discontinued products.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","rspec.Spree::LineItem at ./spec/models/spree/line_item_spec.rb.#discontinued fetches discontinued variants.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2\"}}","rspec.Spree::LineItem at ./spec/models/spree/line_item_spec.rb.#discounted_amount returns the amount minus any discounts.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:1\"}}","rspec.Spree::LineItem at ./spec/models/spree/line_item_spec.rb.#discounted_money returns a money object with the discounted amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:1\"}}","rspec.Spree::LineItem at ./spec/models/spree/line_item_spec.rb.#discounted_price returns the discounted price for the line item.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:36:1\"}}","rspec.Spree::LineItem at ./spec/models/spree/line_item_spec.rb.#discounted_price when line item promo_total is zero returns the price for the line item.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:36:2:1\"}}","rspec.Spree::LineItem at ./spec/models/spree/line_item_spec.rb.#discounted_price when quantity is zero returns the price for the line item.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:36:3:1\"}}","rspec.Spree::LineItem at ./spec/models/spree/line_item_spec.rb.#display_amount returns the amount for the line item.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:28:1\"}}","rspec.Spree::LineItem at ./spec/models/spree/line_item_spec.rb.#display_compare_at_amount returns the compare at amount for the line item.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:30:1\"}}","rspec.Spree::LineItem at ./spec/models/spree/line_item_spec.rb.#ensure_valid_quantity quantity < 0 example at ./spec/models/spree/line_item_spec.rb:57.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1\"}}","rspec.Spree::LineItem at ./spec/models/spree/line_item_spec.rb.#ensure_valid_quantity quantity = 0 example at ./spec/models/spree/line_item_spec.rb:66.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3:1\"}}","rspec.Spree::LineItem at ./spec/models/spree/line_item_spec.rb.#ensure_valid_quantity quantity > 0 example at ./spec/models/spree/line_item_spec.rb:77.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:4:1\"}}","rspec.Spree::LineItem at ./spec/models/spree/line_item_spec.rb.#ensure_valid_quantity quantity.nil? example at ./spec/models/spree/line_item_spec.rb:48.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:1\"}}","rspec.Spree::LineItem at ./spec/models/spree/line_item_spec.rb.#item_weight returns the weight for the line item.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:31:1\"}}","rspec.Spree::LineItem at ./spec/models/spree/line_item_spec.rb.#money returns a Spree::Money representing the total for this line item.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:17:1\"}}","rspec.Spree::LineItem at ./spec/models/spree/line_item_spec.rb.#options= can handle updating a blank line item with no order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:22:1\"}}","rspec.Spree::LineItem at ./spec/models/spree/line_item_spec.rb.#options= updates the data provided in the options.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:22:2\"}}","rspec.Spree::LineItem at ./spec/models/spree/line_item_spec.rb.#options= updates the price based on the options provided.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:22:3\"}}","rspec.Spree::LineItem at ./spec/models/spree/line_item_spec.rb.#quantity allows to set different value for quantity.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2\"}}","rspec.Spree::LineItem at ./spec/models/spree/line_item_spec.rb.#quantity has a default quantity of 1.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","rspec.Spree::LineItem at ./spec/models/spree/line_item_spec.rb.#recalculate_price when creating line item with quantity meeting volume threshold applies volume price on initial creation.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:35:3:1\"}}","rspec.Spree::LineItem at ./spec/models/spree/line_item_spec.rb.#recalculate_price when creating line item with quantity meeting volume threshold does not apply volume price when quantity is below threshold.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:35:3:2\"}}","rspec.Spree::LineItem at ./spec/models/spree/line_item_spec.rb.#recalculate_price with volume-based pricing reverts to base price when quantity decreases below volume threshold.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:35:1:2\"}}","rspec.Spree::LineItem at ./spec/models/spree/line_item_spec.rb.#recalculate_price with volume-based pricing updates price when quantity increases to meet volume threshold.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:35:1:1\"}}","rspec.Spree::LineItem at ./spec/models/spree/line_item_spec.rb.#recalculate_price with volume-based pricing when order is completed does not update price when quantity changes.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:35:1:3:1\"}}","rspec.Spree::LineItem at ./spec/models/spree/line_item_spec.rb.#recalculate_price without volume-based pricing does not change price when quantity changes.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:35:2:1\"}}","rspec.Spree::LineItem at ./spec/models/spree/line_item_spec.rb.#save line item changes triggers adjustment total recalculation.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1:1\"}}","rspec.Spree::LineItem at ./spec/models/spree/line_item_spec.rb.#save line item does not change does not trigger adjustment total recalculation.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:2:1\"}}","rspec.Spree::LineItem at ./spec/models/spree/line_item_spec.rb.#save target_shipment is provided verifies inventory.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:3:1\"}}","rspec.Spree::LineItem at ./spec/models/spree/line_item_spec.rb.#save touches the order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","rspec.Spree::LineItem at ./spec/models/spree/line_item_spec.rb.#shipments returns the shipments for the line item.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:25:1\"}}","rspec.Spree::LineItem at ./spec/models/spree/line_item_spec.rb.#shipping_cost returns the shipping cost for the line item.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:26:1\"}}","rspec.Spree::LineItem at ./spec/models/spree/line_item_spec.rb.#shipping_cost when the shipment cost is 0 returns 0.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:26:4:1\"}}","rspec.Spree::LineItem at ./spec/models/spree/line_item_spec.rb.#shipping_cost when the shipment is canceled returns 0.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:26:2:1\"}}","rspec.Spree::LineItem at ./spec/models/spree/line_item_spec.rb.#shipping_cost when the shipment is not present returns 0.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:26:3:1\"}}","rspec.Spree::LineItem at ./spec/models/spree/line_item_spec.rb.#should_update_price? when order is completed returns false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:34:2:1\"}}","rspec.Spree::LineItem at ./spec/models/spree/line_item_spec.rb.#should_update_price? when order is not completed returns true.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:34:1:1\"}}","rspec.Spree::LineItem at ./spec/models/spree/line_item_spec.rb.#single_money returns a Spree::Money representing the price for one variant.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:1\"}}","rspec.Spree::LineItem at ./spec/models/spree/line_item_spec.rb.#update_price copies over a variants differing price for another vat zone.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:1\"}}","rspec.Spree::LineItem at ./spec/models/spree/line_item_spec.rb.#update_price_from_modifier with specified currency sets currency.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:24:1:1\"}}","rspec.Spree::LineItem at ./spec/models/spree/line_item_spec.rb.#update_price_from_modifier with specified currency variant with price in this currency sets the proper price.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:24:1:2:1\"}}","rspec.Spree::LineItem at ./spec/models/spree/line_item_spec.rb.#update_price_from_modifier with specified currency variant without price in this currency sets the proper price.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:24:1:3:1\"}}","rspec.Spree::LineItem at ./spec/models/spree/line_item_spec.rb.#update_price_from_modifier without currency sets the proper price.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:24:2:1\"}}","rspec.Spree::LineItem at ./spec/models/spree/line_item_spec.rb.#weight_unit returns the weight unit for the line item.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:33:1\"}}","rspec.Spree::LineItem at ./spec/models/spree/line_item_spec.rb..currency returns the globally configured currency.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:1\"}}","rspec.Spree::LineItem at ./spec/models/spree/line_item_spec.rb.Validations ensure_proper_currency order is present when line_item's currency does not matches with order's example at ./spec/models/spree/line_item_spec.rb:23.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1:2:1\"}}","rspec.Spree::LineItem at ./spec/models/spree/line_item_spec.rb.Validations ensure_proper_currency order is present when line_item's currency matches with order's example at ./spec/models/spree/line_item_spec.rb:15.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1:1:1\"}}","rspec.Spree::LineItem at ./spec/models/spree/line_item_spec.rb.behaves like lifecycle events lifecycle events line_item.created publishes created event when record is created.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1:1\"}}","rspec.Spree::LineItem at ./spec/models/spree/line_item_spec.rb.behaves like lifecycle events lifecycle events line_item.deleted publishes deleted event when record is deleted.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:3:1\"}}","rspec.Spree::LineItem at ./spec/models/spree/line_item_spec.rb.behaves like lifecycle events lifecycle events line_item.updated publishes updated event when record is updated.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:2:1\"}}","rspec.Spree::LineItem at ./spec/models/spree/line_item_spec.rb.behaves like metadata can query records by metadata properties.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:10\"}}","rspec.Spree::LineItem at ./spec/models/spree/line_item_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:10.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","rspec.Spree::LineItem at ./spec/models/spree/line_item_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:11.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","rspec.Spree::LineItem at ./spec/models/spree/line_item_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:4.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::LineItem at ./spec/models/spree/line_item_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:5.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","rspec.Spree::LineItem at ./spec/models/spree/line_item_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:7.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","rspec.Spree::LineItem at ./spec/models/spree/line_item_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:8.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","rspec.Spree::LineItem at ./spec/models/spree/line_item_spec.rb.behaves like metadata reads data as not symbolized keys.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8\"}}","rspec.Spree::LineItem at ./spec/models/spree/line_item_spec.rb.behaves like metadata reads data as symbolized keys.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7\"}}","rspec.Spree::LineItem at ./spec/models/spree/line_item_spec.rb.currency different than order.currency is not a valid line item.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:21:1\"}}","rspec.Spree::LineItem at ./spec/models/spree/line_item_spec.rb.currency same as order.currency is a valid line item.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:20:1\"}}","rspec.Spree::LineItem at ./spec/models/spree/line_item_spec.rb.has inventory (completed order so items were already unstocked) 2 items left on stock allows to increase quantity up to stock availability.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:2:1\"}}","rspec.Spree::LineItem at ./spec/models/spree/line_item_spec.rb.has inventory (completed order so items were already unstocked) 2 items left on stock doesnt allow to increase quantity over stock availability.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:2:2\"}}","rspec.Spree::LineItem at ./spec/models/spree/line_item_spec.rb.has inventory (completed order so items were already unstocked) nothing left on stock allows to decrease item quantity.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:1:1\"}}","rspec.Spree::LineItem at ./spec/models/spree/line_item_spec.rb.has inventory (completed order so items were already unstocked) nothing left on stock doesnt allow to increase item quantity.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:1:2\"}}","rspec.Spree::LineItem at ./spec/models/spree/line_item_spec.rb.precision of pre_tax_amount keeps four digits of precision even when reloading.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:23:1\"}}","rspec.Spree::LineItems::Create at ./spec/services/spree/line_items/create_spec.rb.creates a line item with any quantity.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::LineItems::Destroy at ./spec/services/spree/line_items/destroy_spec.rb.given a shipment ensure shipment calls update_amounts instead of order calling ensure_updated_shipments.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.Spree::LineItems::Destroy at ./spec/services/spree/line_items/destroy_spec.rb.not given a shipment ensures updated shipments.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","rspec.Spree::LineItems::Destroy at ./spec/services/spree/line_items/destroy_spec.rb.remove line item with any quantity.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::LineItems::Update at ./spec/services/spree/line_items/update_spec.rb.given a shipment ensure shipment calls update_amounts instead of order calling ensure_updated_shipments.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.Spree::LineItems::Update at ./spec/services/spree/line_items/update_spec.rb.not given a shipment ensures updated shipments.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","rspec.Spree::LineItems::Update at ./spec/services/spree/line_items/update_spec.rb.updates line item with any quantity.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::LocaleHelper at ./spec/helpers/locale_helper_spec.rb.#all_locales_options example at ./spec/helpers/locale_helper_spec.rb:25.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::LocaleHelper at ./spec/helpers/locale_helper_spec.rb.#available_locales_options example at ./spec/helpers/locale_helper_spec.rb:34.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.Spree::LocaleHelper at ./spec/helpers/locale_helper_spec.rb.#locale_presentation example at ./spec/helpers/locale_helper_spec.rb:44.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","rspec.Spree::LocaleHelper at ./spec/helpers/locale_helper_spec.rb.#locale_presentation returns the locale when no translation exists.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2\"}}","rspec.Spree::LocaleHelper at ./spec/helpers/locale_helper_spec.rb.#should_render_locale_dropdown? store with multiple locales example at ./spec/helpers/locale_helper_spec.rb:55.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:1\"}}","rspec.Spree::LocaleHelper at ./spec/helpers/locale_helper_spec.rb.#should_render_locale_dropdown? store with single locale example at ./spec/helpers/locale_helper_spec.rb:61.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1\"}}","rspec.Spree::LocaleHelper at ./spec/helpers/locale_helper_spec.rb.#supported_locales_options example at ./spec/helpers/locale_helper_spec.rb:40.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","rspec.Spree::Locales::SetFallbackLocaleForStore at ./spec/services/spree/locales/set_fallback_locale_for_store_spec.rb.#call when translatable object does not have a translation in the requested locale sets mobility to retrieve value in the fallback locale.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","rspec.Spree::Locales::SetFallbackLocaleForStore at ./spec/services/spree/locales/set_fallback_locale_for_store_spec.rb.#call when translatable object has a translation in the requested locale sets mobility to retrieve value directly.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","rspec.Spree::LocalizedNumber at ./spec/lib/spree/localized_number_spec.rb..parse string argument is not modified.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1\"}}","rspec.Spree::LocalizedNumber at ./spec/lib/spree/localized_number_spec.rb..parse with a numeric price uses the price as is.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","rspec.Spree::LocalizedNumber at ./spec/lib/spree/localized_number_spec.rb..parse with decimal comma captures the proper amount for a formatted price.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","rspec.Spree::LocalizedNumber at ./spec/lib/spree/localized_number_spec.rb..parse with decimal point captures the proper amount for a formatted price.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","rspec.Spree::LocalizedNumber at ./spec/lib/spree/localized_number_spec.rb..parse with empty string returns 0.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5:1\"}}","rspec.Spree::LogEntry at ./spec/models/spree/log_entry_spec.rb.#parsed_details deserializes log entry with billing response.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::Metafield at ./spec/models/spree/metafield_spec.rb.#csv_value for Boolean metafield returns No for false values.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:2\"}}","rspec.Spree::Metafield at ./spec/models/spree/metafield_spec.rb.#csv_value for Boolean metafield returns Yes for true values.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1\"}}","rspec.Spree::Metafield at ./spec/models/spree/metafield_spec.rb.#csv_value for Json metafield returns the JSON string.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:4:1\"}}","rspec.Spree::Metafield at ./spec/models/spree/metafield_spec.rb.#csv_value for LongText metafield returns the text value.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:6:1\"}}","rspec.Spree::Metafield at ./spec/models/spree/metafield_spec.rb.#csv_value for Number metafield returns the number as string.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3:1\"}}","rspec.Spree::Metafield at ./spec/models/spree/metafield_spec.rb.#csv_value for RichText metafield returns plain text without HTML tags.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:7:1\"}}","rspec.Spree::Metafield at ./spec/models/spree/metafield_spec.rb.#csv_value for ShortText metafield returns the text value.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:5:1\"}}","rspec.Spree::Metafield at ./spec/models/spree/metafield_spec.rb.#csv_value for base Metafield returns the value as string.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:1\"}}","rspec.Spree::Metafield at ./spec/models/spree/metafield_spec.rb.#serialize_value returns the value.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","rspec.Spree::Metafield at ./spec/models/spree/metafield_spec.rb.Callbacks sets the type from the metafield definition.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::Metafield at ./spec/models/spree/metafield_spec.rb.Scopes .with_key returns the metafields with the given key.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","rspec.Spree::Metafield at ./spec/models/spree/metafield_spec.rb.Validations validates the type must match the metafield definition.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.Spree::MetafieldDefinition at ./spec/models/spree/metafield_definition_spec.rb.#csv_header_name returns the CSV header name with metafield prefix.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.Spree::MetafieldDefinition at ./spec/models/spree/metafield_definition_spec.rb.#full_key returns the full key with namespace.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","rspec.Spree::MetafieldDefinition at ./spec/models/spree/metafield_definition_spec.rb.scopes .available returns only both definitions (from DisplayOn concern).{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","rspec.Spree::MetafieldDefinition at ./spec/models/spree/metafield_definition_spec.rb.scopes .available_on_back_end returns admin definitions (back_end and both).{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","rspec.Spree::MetafieldDefinition at ./spec/models/spree/metafield_definition_spec.rb.scopes .available_on_front_end returns public definitions (front_end and both).{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","rspec.Spree::MetafieldDefinition at ./spec/models/spree/metafield_definition_spec.rb.scopes .for_resource_type returns definitions for specific resource type.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1\"}}","rspec.Spree::Metafields at ./spec/models/concerns/spree/metafields_spec.rb.#has_metafield? raises ArgumentError for invalid key_with_namespace.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:5\"}}","rspec.Spree::Metafields at ./spec/models/concerns/spree/metafields_spec.rb.#has_metafield? returns false if metafield does not exist for MetafieldDefinition.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:4\"}}","rspec.Spree::Metafields at ./spec/models/concerns/spree/metafields_spec.rb.#has_metafield? returns false if metafield does not exist for string key_with_namespace.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2\"}}","rspec.Spree::Metafields at ./spec/models/concerns/spree/metafields_spec.rb.#has_metafield? returns true if metafield exists for MetafieldDefinition.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3\"}}","rspec.Spree::Metafields at ./spec/models/concerns/spree/metafields_spec.rb.#has_metafield? returns true if metafield exists for string key_with_namespace.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","rspec.Spree::Metafields at ./spec/models/concerns/spree/metafields_spec.rb.#set_metafield and #get_metafield creates and retrieves a metafield by key_with_namespace.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","rspec.Spree::Metafields at ./spec/models/concerns/spree/metafields_spec.rb.#set_metafield and #get_metafield updates the value if the metafield already exists.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2\"}}","rspec.Spree::Metafields at ./spec/models/concerns/spree/metafields_spec.rb..with_metafield_key does not return products without the given metafield key.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","rspec.Spree::Metafields at ./spec/models/concerns/spree/metafields_spec.rb..with_metafield_key returns products with the given metafield key.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.Spree::Metafields at ./spec/models/concerns/spree/metafields_spec.rb..with_metafield_key_value does not return products with the key but different value.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","rspec.Spree::Metafields at ./spec/models/concerns/spree/metafields_spec.rb..with_metafield_key_value returns products with the given metafield key and value.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","rspec.Spree::Metafields at ./spec/models/concerns/spree/metafields_spec.rb.accepts_nested_attributes_for :metafields auto-destroy metafields with empty values destroys existing metafield when value is set to empty string.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:4:1\"}}","rspec.Spree::Metafields at ./spec/models/concerns/spree/metafields_spec.rb.accepts_nested_attributes_for :metafields auto-destroy metafields with empty values destroys existing metafield when value is set to nil.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:4:2\"}}","rspec.Spree::Metafields at ./spec/models/concerns/spree/metafields_spec.rb.accepts_nested_attributes_for :metafields auto-destroy metafields with empty values handles multiple metafields correctly.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:4:4\"}}","rspec.Spree::Metafields at ./spec/models/concerns/spree/metafields_spec.rb.accepts_nested_attributes_for :metafields auto-destroy metafields with empty values updates existing metafield when value is not empty.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:4:3\"}}","rspec.Spree::Metafields at ./spec/models/concerns/spree/metafields_spec.rb.accepts_nested_attributes_for :metafields creates metafield via nested attributes.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","rspec.Spree::Metafields at ./spec/models/concerns/spree/metafields_spec.rb.accepts_nested_attributes_for :metafields rejects metafield if id and value are blank.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:3\"}}","rspec.Spree::Metafields at ./spec/models/concerns/spree/metafields_spec.rb.accepts_nested_attributes_for :metafields rejects metafield if metafield_definition_id is blank.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2\"}}","rspec.Spree::Metafields at ./spec/models/concerns/spree/metafields_spec.rb.associations has many metafields.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::Metafields at ./spec/models/concerns/spree/metafields_spec.rb.associations has many private_metafields.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","rspec.Spree::Metafields at ./spec/models/concerns/spree/metafields_spec.rb.associations has many public_metafields.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","rspec.Spree::Metafields::Boolean at ./spec/models/spree/metafields/boolean_spec.rb.#csv_value returns the boolean value.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","rspec.Spree::Metafields::Boolean at ./spec/models/spree/metafields/boolean_spec.rb.#serialize_value returns the boolean value.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.Spree::Metafields::Boolean at ./spec/models/spree/metafields/boolean_spec.rb.normalizes normalizes the boolean value.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::Metafields::Json at ./spec/models/spree/metafields/json_spec.rb.#serialize_value returns original value if parsing fails.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3\"}}","rspec.Spree::Metafields::Json at ./spec/models/spree/metafields/json_spec.rb.#serialize_value returns parsed JSON array.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","rspec.Spree::Metafields::Json at ./spec/models/spree/metafields/json_spec.rb.#serialize_value returns parsed JSON object.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.Spree::Metafields::Json at ./spec/models/spree/metafields/json_spec.rb.Validations returns false if the value is not valid JSON.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::Metafields::Json at ./spec/models/spree/metafields/json_spec.rb.Validations returns true for valid JSON array.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","rspec.Spree::Metafields::Json at ./spec/models/spree/metafields/json_spec.rb.Validations returns true for valid JSON boolean.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","rspec.Spree::Metafields::Json at ./spec/models/spree/metafields/json_spec.rb.Validations returns true for valid JSON null.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7\"}}","rspec.Spree::Metafields::Json at ./spec/models/spree/metafields/json_spec.rb.Validations returns true for valid JSON number.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","rspec.Spree::Metafields::Json at ./spec/models/spree/metafields/json_spec.rb.Validations returns true for valid JSON object.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","rspec.Spree::Metafields::Json at ./spec/models/spree/metafields/json_spec.rb.Validations returns true for valid JSON string.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","rspec.Spree::Metafields::Number at ./spec/models/spree/metafields/number_spec.rb.#csv_value returns the number as a string.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","rspec.Spree::Metafields::Number at ./spec/models/spree/metafields/number_spec.rb.#serialize_value returns the number.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.Spree::Metafields::Number at ./spec/models/spree/metafields/number_spec.rb.Validations returns false if the value is not a number.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::Metafields::RichText at ./spec/models/spree/metafields/rich_text_spec.rb.#serialize_value returns the rich text body.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.Spree::Metafields::RichText at ./spec/models/spree/metafields/rich_text_spec.rb.#value returns the rich text body.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::Migrations at ./spec/lib/spree/migrations_spec.rb.no missing migrations says nothing.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.Spree::Migrations at ./spec/lib/spree/migrations_spec.rb.warns about missing migrations.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","rspec.Spree::Money at ./spec/lib/spree/money_spec.rb.#amount_in_cents when currency is JPY example at ./spec/lib/spree/money_spec.rb:170.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:2:1\"}}","rspec.Spree::Money at ./spec/lib/spree/money_spec.rb.#amount_in_cents when currency is KRW example at ./spec/lib/spree/money_spec.rb:170.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:3:1\"}}","rspec.Spree::Money at ./spec/lib/spree/money_spec.rb.#amount_in_cents when currency is USD example at ./spec/lib/spree/money_spec.rb:170.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:1:1\"}}","rspec.Spree::Money at ./spec/lib/spree/money_spec.rb.#as_json returns the expected string.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:1\"}}","rspec.Spree::Money at ./spec/lib/spree/money_spec.rb.DKK formats correctly.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1\"}}","rspec.Spree::Money at ./spec/lib/spree/money_spec.rb.EUR formats as HTML if asked (nicely) to.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2\"}}","rspec.Spree::Money at ./spec/lib/spree/money_spec.rb.EUR formats as HTML with currency.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:3\"}}","rspec.Spree::Money at ./spec/lib/spree/money_spec.rb.EUR formats as plain by default.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1\"}}","rspec.Spree::Money at ./spec/lib/spree/money_spec.rb.JPY formats correctly.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1\"}}","rspec.Spree::Money at ./spec/lib/spree/money_spec.rb.Money formatting rules #decimal_mark favors decimal mark passed in as a parameter on initialization.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:1:3\"}}","rspec.Spree::Money at ./spec/lib/spree/money_spec.rb.Money formatting rules #decimal_mark favors decimal mark set in default_formatting_rules.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:1:2\"}}","rspec.Spree::Money at ./spec/lib/spree/money_spec.rb.Money formatting rules #decimal_mark uses decimal mark set in Monetize gem.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:1:1\"}}","rspec.Spree::Money at ./spec/lib/spree/money_spec.rb.Money formatting rules #thousands_separator favors decimal mark passed in as a parameter on initialization.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:2:3\"}}","rspec.Spree::Money at ./spec/lib/spree/money_spec.rb.Money formatting rules #thousands_separator favors decimal mark set in default_formatting_rules.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:2:2\"}}","rspec.Spree::Money at ./spec/lib/spree/money_spec.rb.Money formatting rules #thousands_separator uses thousands separator set in Monetize gem.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:2:1\"}}","rspec.Spree::Money at ./spec/lib/spree/money_spec.rb.can get cents.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2\"}}","rspec.Spree::Money at ./spec/lib/spree/money_spec.rb.can get currency.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3\"}}","rspec.Spree::Money at ./spec/lib/spree/money_spec.rb.currency parameter when currency is specified in Canadian Dollars uses the currency param over the global configuration.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1:1\"}}","rspec.Spree::Money at ./spec/lib/spree/money_spec.rb.currency parameter when currency is specified in Japanese Yen uses the currency param over the global configuration.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2:1\"}}","rspec.Spree::Money at ./spec/lib/spree/money_spec.rb.format passed in option.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","rspec.Spree::Money at ./spec/lib/spree/money_spec.rb.formats correctly.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","rspec.Spree::Money at ./spec/lib/spree/money_spec.rb.hide cents hides cents suffix.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","rspec.Spree::Money at ./spec/lib/spree/money_spec.rb.hide cents shows cents suffix.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2\"}}","rspec.Spree::Money at ./spec/lib/spree/money_spec.rb.sign before symbol defaults to -$10.00.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1\"}}","rspec.Spree::Money at ./spec/lib/spree/money_spec.rb.sign before symbol passed in option.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2\"}}","rspec.Spree::Money at ./spec/lib/spree/money_spec.rb.with currency passed in option.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","rspec.Spree::Newsletter::Subscribe at ./spec/services/spree/newsletter/subscribe_spec.rb.when logged in user has the same email as inputed email creates a new verified subscriber.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3\"}}","rspec.Spree::Newsletter::Subscribe at ./spec/services/spree/newsletter/subscribe_spec.rb.when logged in user has the same email as inputed email does not send a confirmation email.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","rspec.Spree::Newsletter::Subscribe at ./spec/services/spree/newsletter/subscribe_spec.rb.when logged in user has the same email as inputed email returns an instance of NewsletterSubscriber.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.Spree::Newsletter::Subscribe at ./spec/services/spree/newsletter/subscribe_spec.rb.when logged in user inputs another email creates a new unverified subscriber.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3\"}}","rspec.Spree::Newsletter::Subscribe at ./spec/services/spree/newsletter/subscribe_spec.rb.when logged in user inputs another email returns an instance of NewsletterSubscriber.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","rspec.Spree::Newsletter::Subscribe at ./spec/services/spree/newsletter/subscribe_spec.rb.when logged in user inputs another email sends a confirmation email.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","rspec.Spree::Newsletter::Subscribe at ./spec/services/spree/newsletter/subscribe_spec.rb.when unverified subscription has been already created does not create new subscriber.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2\"}}","rspec.Spree::Newsletter::Subscribe at ./spec/services/spree/newsletter/subscribe_spec.rb.when unverified subscription has been already created returns an instance of NewsletterSubscriber.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","rspec.Spree::Newsletter::Subscribe at ./spec/services/spree/newsletter/subscribe_spec.rb.when unverified subscription has been already created sends a confirmation email.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3\"}}","rspec.Spree::Newsletter::Subscribe at ./spec/services/spree/newsletter/subscribe_spec.rb.when verified subscription already exists does not create new subscriber.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2\"}}","rspec.Spree::Newsletter::Subscribe at ./spec/services/spree/newsletter/subscribe_spec.rb.when verified subscription already exists does not send a confirmation email.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3\"}}","rspec.Spree::Newsletter::Subscribe at ./spec/services/spree/newsletter/subscribe_spec.rb.when verified subscription already exists returns an instance of NewsletterSubscriber.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","rspec.Spree::Newsletter::Subscribe at ./spec/services/spree/newsletter/subscribe_spec.rb.with invalid params does not create a new record.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","rspec.Spree::Newsletter::Subscribe at ./spec/services/spree/newsletter/subscribe_spec.rb.with invalid params does not send a confirmation email.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","rspec.Spree::Newsletter::Subscribe at ./spec/services/spree/newsletter/subscribe_spec.rb.with invalid params returns a record with errors.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::Newsletter::Verify at ./spec/services/spree/newsletter/verify_spec.rb.custom events publishes newsletter_subscriber.verified event when verified.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","rspec.Spree::Newsletter::Verify at ./spec/services/spree/newsletter/verify_spec.rb.with associated user updates user email marketing attribute.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","rspec.Spree::Newsletter::Verify at ./spec/services/spree/newsletter/verify_spec.rb.with associated user verifies a subscription.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::Newsletter::Verify at ./spec/services/spree/newsletter/verify_spec.rb.without user verifies a subscription.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.Spree::NewsletterSubscriber at ./spec/models/spree/newsletter_subscriber_spec.rb.behaves like lifecycle events lifecycle events newsletter_subscriber.created publishes created event when record is created.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","rspec.Spree::NewsletterSubscriber at ./spec/models/spree/newsletter_subscriber_spec.rb.behaves like lifecycle events lifecycle events newsletter_subscriber.deleted publishes deleted event when record is deleted.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:1\"}}","rspec.Spree::NewsletterSubscriber at ./spec/models/spree/newsletter_subscriber_spec.rb.behaves like lifecycle events lifecycle events newsletter_subscriber.updated publishes updated event when record is updated.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","rspec.Spree::NewsletterSubscriber at ./spec/models/spree/newsletter_subscriber_spec.rb.normalizations example at ./spec/models/spree/newsletter_subscriber_spec.rb:11.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.Spree::NewsletterSubscriber at ./spec/models/spree/newsletter_subscriber_spec.rb.normalizations example at ./spec/models/spree/newsletter_subscriber_spec.rb:12.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","rspec.Spree::NewsletterSubscriber at ./spec/models/spree/newsletter_subscriber_spec.rb.normalizations example at ./spec/models/spree/newsletter_subscriber_spec.rb:13.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3\"}}","rspec.Spree::NewsletterSubscriber at ./spec/models/spree/newsletter_subscriber_spec.rb.scopes unverified returns unverified subscribers only.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1\"}}","rspec.Spree::NewsletterSubscriber at ./spec/models/spree/newsletter_subscriber_spec.rb.scopes verified returns verified subscribers only.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1\"}}","rspec.Spree::NewsletterSubscriber at ./spec/models/spree/newsletter_subscriber_spec.rb.subscribe with user calls subscribe service.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:1\"}}","rspec.Spree::NewsletterSubscriber at ./spec/models/spree/newsletter_subscriber_spec.rb.subscribe without user calls subscribe service.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1\"}}","rspec.Spree::NewsletterSubscriber at ./spec/models/spree/newsletter_subscriber_spec.rb.validations example at ./spec/models/spree/newsletter_subscriber_spec.rb:17.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","rspec.Spree::NewsletterSubscriber at ./spec/models/spree/newsletter_subscriber_spec.rb.validations example at ./spec/models/spree/newsletter_subscriber_spec.rb:18.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","rspec.Spree::NewsletterSubscriber at ./spec/models/spree/newsletter_subscriber_spec.rb.validations example at ./spec/models/spree/newsletter_subscriber_spec.rb:19.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3\"}}","rspec.Spree::NewsletterSubscriber at ./spec/models/spree/newsletter_subscriber_spec.rb.validations example at ./spec/models/spree/newsletter_subscriber_spec.rb:20.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4\"}}","rspec.Spree::NewsletterSubscriber at ./spec/models/spree/newsletter_subscriber_spec.rb.verified? when email is not verified example at ./spec/models/spree/newsletter_subscriber_spec.rb:108.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1:1\"}}","rspec.Spree::NewsletterSubscriber at ./spec/models/spree/newsletter_subscriber_spec.rb.verified? when email is verified example at ./spec/models/spree/newsletter_subscriber_spec.rb:114.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2:1\"}}","rspec.Spree::NewsletterSubscriber at ./spec/models/spree/newsletter_subscriber_spec.rb.verify when subscriber is found calls verify service.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1:1\"}}","rspec.Spree::NewsletterSubscriber at ./spec/models/spree/newsletter_subscriber_spec.rb.verify when subscriber is not found returns ActiveRecord::RecordNotFound.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2:1\"}}","rspec.Spree::OptionType at ./spec/models/spree/option_type_spec.rb.#filter_param returns filtered name param.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","rspec.Spree::OptionType at ./spec/models/spree/option_type_spec.rb.#filterable example at ./spec/models/spree/option_type_spec.rb:7.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.Spree::OptionType at ./spec/models/spree/option_type_spec.rb.#self.color finds color option type.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1\"}}","rspec.Spree::OptionType at ./spec/models/spree/option_type_spec.rb.behaves like metadata can query records by metadata properties.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:10\"}}","rspec.Spree::OptionType at ./spec/models/spree/option_type_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:10.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","rspec.Spree::OptionType at ./spec/models/spree/option_type_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:11.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","rspec.Spree::OptionType at ./spec/models/spree/option_type_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:4.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::OptionType at ./spec/models/spree/option_type_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:5.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","rspec.Spree::OptionType at ./spec/models/spree/option_type_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:7.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","rspec.Spree::OptionType at ./spec/models/spree/option_type_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:8.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","rspec.Spree::OptionType at ./spec/models/spree/option_type_spec.rb.behaves like metadata reads data as not symbolized keys.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8\"}}","rspec.Spree::OptionType at ./spec/models/spree/option_type_spec.rb.behaves like metadata reads data as symbolized keys.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7\"}}","rspec.Spree::OptionType at ./spec/models/spree/option_type_spec.rb.callbacks #normalize_name should parameterize the name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","rspec.Spree::OptionType at ./spec/models/spree/option_type_spec.rb.color methods #color? should return false if the name is not \"color\" or \"colour\".{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:2\"}}","rspec.Spree::OptionType at ./spec/models/spree/option_type_spec.rb.color methods #color? should return true if the name is \"color\" or \"colour\".{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1\"}}","rspec.Spree::OptionType at ./spec/models/spree/option_type_spec.rb.color methods .color should return the first option type with name \"color\".{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:1\"}}","rspec.Spree::OptionType at ./spec/models/spree/option_type_spec.rb.touching touches a product on touch.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","rspec.Spree::OptionType at ./spec/models/spree/option_type_spec.rb.touching touches a product on update.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2\"}}","rspec.Spree::OptionType at ./spec/models/spree/option_type_spec.rb.translations translates option type fields.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","rspec.Spree::OptionType at ./spec/models/spree/option_type_spec.rb.translations with always_use_translations enabled creates option type with normalized presentation without NotNullViolation.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1\"}}","rspec.Spree::OptionType at ./spec/models/spree/option_type_spec.rb.translations with always_use_translations enabled normalizes translated presentations across locales.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:2\"}}","rspec.Spree::OptionValue at ./spec/models/spree/option_value_spec.rb.#display_presentation returns the presentation with the option type presentation.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","rspec.Spree::OptionValue at ./spec/models/spree/option_value_spec.rb..to_tom_select_json returns the option values in the correct format.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","rspec.Spree::OptionValue at ./spec/models/spree/option_value_spec.rb.behaves like metadata can query records by metadata properties.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:10\"}}","rspec.Spree::OptionValue at ./spec/models/spree/option_value_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:10.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","rspec.Spree::OptionValue at ./spec/models/spree/option_value_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:11.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","rspec.Spree::OptionValue at ./spec/models/spree/option_value_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:4.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::OptionValue at ./spec/models/spree/option_value_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:5.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","rspec.Spree::OptionValue at ./spec/models/spree/option_value_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:7.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","rspec.Spree::OptionValue at ./spec/models/spree/option_value_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:8.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","rspec.Spree::OptionValue at ./spec/models/spree/option_value_spec.rb.behaves like metadata reads data as not symbolized keys.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8\"}}","rspec.Spree::OptionValue at ./spec/models/spree/option_value_spec.rb.behaves like metadata reads data as symbolized keys.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7\"}}","rspec.Spree::OptionValue at ./spec/models/spree/option_value_spec.rb.callbacks #normalize_name should parameterize the name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","rspec.Spree::OptionValue at ./spec/models/spree/option_value_spec.rb.callbacks #touch_all_products touches all products associated with the option value.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:1\"}}","rspec.Spree::OptionValue at ./spec/models/spree/option_value_spec.rb.callbacks #touch_all_variants touches all variants associated with the option value.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","rspec.Spree::OptionValue at ./spec/models/spree/option_value_spec.rb.translations translates option value fields.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","rspec.Spree::OptionValueVariant at ./spec/models/spree/option_value_variant_spec.rb.touching touches a variant.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::OptionValues::FindAvailable at ./spec/finders/spree/option_values/find_available_spec.rb.#execute finds available Option Values.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::OptionValues::FindAvailable at ./spec/finders/spree/option_values/find_available_spec.rb.#execute ordering orders the option values by option type position and option value position.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1\"}}","rspec.Spree::OptionValues::FindAvailable at ./spec/finders/spree/option_values/find_available_spec.rb.#execute when given a predefined products scope finds filterable Option Values with respect to a predefined Products scope.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","rspec.Spree::OptionValues::FindAvailable at ./spec/finders/spree/option_values/find_available_spec.rb.#execute when given a predefined scope finds available Option Values with respect to a predefined scope.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","rspec.Spree::Order at ./spec/models/spree/order/address_spec.rb.address book Create order with the same bill & ship addresses has equal ids when option use_billing is active.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:2\"}}","rspec.Spree::Order at ./spec/models/spree/order/address_spec.rb.address book Create order with the same bill & ship addresses has equal ids when set ids.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","rspec.Spree::Order at ./spec/models/spree/order/address_spec.rb.address book mass attribute assignment for bill_address_id, ship_address_id is able to mass assign bill_address_id.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","rspec.Spree::Order at ./spec/models/spree/order/address_spec.rb.address book mass attribute assignment for bill_address_id, ship_address_id is able to mass assign ship_address_id.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:2\"}}","rspec.Spree::Order at ./spec/models/spree/order/address_spec.rb.address book when user wants to update firstname of the address with already completed order creates new address with updated attributes.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:1\"}}","rspec.Spree::Order at ./spec/models/spree/order/address_spec.rb.validation when @use_billing is populated with '1' clones the bill address to the shipping.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:1\"}}","rspec.Spree::Order at ./spec/models/spree/order/address_spec.rb.validation when @use_billing is populated with 'true' clones the bill address to the shipping.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","rspec.Spree::Order at ./spec/models/spree/order/address_spec.rb.validation when @use_billing is populated with something other than a 'truthful' value does not clone the bill address to the shipping.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:4:1\"}}","rspec.Spree::Order at ./spec/models/spree/order/address_spec.rb.validation when @use_billing is populated with true clones the bill address to the ship address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","rspec.Spree::Order at ./spec/models/spree/order/adjustments_spec.rb.when an order has an adjustment that zeroes the total, but another adjustment for shipping that raises it above zero transitions from delivery to payment.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::Order at ./spec/models/spree/order/adjustments_spec.rb.when an order has an taxed shipment with tax included_in_price and apply free_shipping_promotion removes the shipment tax adjustment.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.Spree::Order at ./spec/models/spree/order/callbacks_spec.rb.#save when associated with a registered user assigns the email address of the user.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","rspec.Spree::Order at ./spec/models/spree/order/callbacks_spec.rb.in the cart state does not validate email address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","rspec.Spree::Order at ./spec/models/spree/order/callbacks_spec.rb.validations email validation o'brien@gmail.com is a valid email address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","rspec.Spree::Order at ./spec/models/spree/order/checkout_spec.rb.insert checkout step after example at ./spec/models/spree/order/checkout_spec.rb:696.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:3:1\"}}","rspec.Spree::Order at ./spec/models/spree/order/checkout_spec.rb.insert checkout step after goes through checkout without raising error.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:3:2\"}}","rspec.Spree::Order at ./spec/models/spree/order/checkout_spec.rb.insert checkout step before example at ./spec/models/spree/order/checkout_spec.rb:679.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2:1\"}}","rspec.Spree::Order at ./spec/models/spree/order/checkout_spec.rb.insert checkout step before goes through checkout without raising error.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2:2\"}}","rspec.Spree::Order at ./spec/models/spree/order/checkout_spec.rb.insert checkout step maintains removed transitions.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","rspec.Spree::Order at ./spec/models/spree/order/checkout_spec.rb.re-define checkout flow does not keep old event transitions when checkout_flow is redefined.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","rspec.Spree::Order at ./spec/models/spree/order/checkout_spec.rb.re-define checkout flow does not keep old events when checkout_flow is redefined.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2\"}}","rspec.Spree::Order at ./spec/models/spree/order/checkout_spec.rb.remove checkout step example at ./spec/models/spree/order/checkout_spec.rb:724.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2\"}}","rspec.Spree::Order at ./spec/models/spree/order/checkout_spec.rb.remove checkout step maintains removed transitions.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","rspec.Spree::Order at ./spec/models/spree/order/checkout_spec.rb.to complete default credit card creates a digital_link for the digital line_item.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:3\"}}","rspec.Spree::Order at ./spec/models/spree/order/checkout_spec.rb.to complete default credit card creates a digital_link for the physical line_item if it has a digital asset.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:4\"}}","rspec.Spree::Order at ./spec/models/spree/order/checkout_spec.rb.to complete default credit card does not assign a default credit card if temporary_credit_card is set.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:5\"}}","rspec.Spree::Order at ./spec/models/spree/order/checkout_spec.rb.to complete default credit card makes the current credit card a user's default credit card.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:2\"}}","rspec.Spree::Order at ./spec/models/spree/order/checkout_spec.rb.to complete default credit card newsletter subscription when newsletter is accepted for the order subscribes to newsletter.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1:1:1\"}}","rspec.Spree::Order at ./spec/models/spree/order/checkout_spec.rb.to complete default credit card newsletter subscription when newsletter is not accepted for the order does not subscribe to newsletter.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1:2:1\"}}","rspec.Spree::Order at ./spec/models/spree/order/checkout_spec.rb.to complete default credit card when gift card is present redeems the gift card.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:6:1\"}}","rspec.Spree::Order at ./spec/models/spree/order/checkout_spec.rb.to complete default credit card when gift card is present when gift card has amount bigger than order total partially redeems the gift card.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:6:2:1\"}}","rspec.Spree::Order at ./spec/models/spree/order/checkout_spec.rb.to complete default credit card when user is not present with signup_for_an_account set to false does not create a new user.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:7:2:1\"}}","rspec.Spree::Order at ./spec/models/spree/order/checkout_spec.rb.to complete default credit card when user is not present with signup_for_an_account set to true creates a new user.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:7:1:1\"}}","rspec.Spree::Order at ./spec/models/spree/order/checkout_spec.rb.update_from_params calls update_attributes without order params.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1\"}}","rspec.Spree::Order at ./spec/models/spree/order/checkout_spec.rb.update_from_params has params does not let through unpermitted attributes.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:4:1\"}}","rspec.Spree::Order at ./spec/models/spree/order/checkout_spec.rb.update_from_params has params has allowed params accepts permitted attributes.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:4:3:1\"}}","rspec.Spree::Order at ./spec/models/spree/order/checkout_spec.rb.update_from_params has params has existing_card param does not attempt to permit existing_card.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:4:2:1\"}}","rspec.Spree::Order at ./spec/models/spree/order/checkout_spec.rb.update_from_params passing a credit card dont let users mess with others users cards.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:3:4\"}}","rspec.Spree::Order at ./spec/models/spree/order/checkout_spec.rb.update_from_params passing a credit card sets confirmation value when its available via :cvc_confirm.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:3:1\"}}","rspec.Spree::Order at ./spec/models/spree/order/checkout_spec.rb.update_from_params passing a credit card sets existing card as source for new payment.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:3:2\"}}","rspec.Spree::Order at ./spec/models/spree/order/checkout_spec.rb.update_from_params passing a credit card sets request_env on payment.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:3:3\"}}","rspec.Spree::Order at ./spec/models/spree/order/checkout_spec.rb.update_from_params runs the callbacks.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2\"}}","rspec.Spree::Order at ./spec/models/spree/order/checkout_spec.rb.with default state machine #checkout_steps when confirmation not required example at ./spec/models/spree/order/checkout_spec.rb:81.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8:1:1\"}}","rspec.Spree::Order at ./spec/models/spree/order/checkout_spec.rb.with default state machine #checkout_steps when confirmation required example at ./spec/models/spree/order/checkout_spec.rb:92.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8:2:1\"}}","rspec.Spree::Order at ./spec/models/spree/order/checkout_spec.rb.with default state machine #checkout_steps when delivery not required example at ./spec/models/spree/order/checkout_spec.rb:100.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8:3:1\"}}","rspec.Spree::Order at ./spec/models/spree/order/checkout_spec.rb.with default state machine #checkout_steps when payment not required example at ./spec/models/spree/order/checkout_spec.rb:108.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8:4:1\"}}","rspec.Spree::Order at ./spec/models/spree/order/checkout_spec.rb.with default state machine #checkout_steps when payment required example at ./spec/models/spree/order/checkout_spec.rb:116.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8:5:1\"}}","rspec.Spree::Order at ./spec/models/spree/order/checkout_spec.rb.with default state machine .find_transition when contract was broken.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","rspec.Spree::Order at ./spec/models/spree/order/checkout_spec.rb.with default state machine .remove_transition when contract was broken.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","rspec.Spree::Order at ./spec/models/spree/order/checkout_spec.rb.with default state machine .remove_transition.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","rspec.Spree::Order at ./spec/models/spree/order/checkout_spec.rb.with default state machine always return integer on checkout_step_index.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","rspec.Spree::Order at ./spec/models/spree/order/checkout_spec.rb.with default state machine does not have a transition from delivery to confirm.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","rspec.Spree::Order at ./spec/models/spree/order/checkout_spec.rb.with default state machine from address cannot transition to delivery with an existing shipment if there are no shipping rates for any shipment deletes all the shipments.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:11:4:1:1:2\"}}","rspec.Spree::Order at ./spec/models/spree/order/checkout_spec.rb.with default state machine from address cannot transition to delivery with an existing shipment if there are no shipping rates for any shipment raises an InvalidTransitionError.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:11:4:1:1:1\"}}","rspec.Spree::Order at ./spec/models/spree/order/checkout_spec.rb.with default state machine from address transitions to delivery.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:11:3\"}}","rspec.Spree::Order at ./spec/models/spree/order/checkout_spec.rb.with default state machine from address updates prices.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:11:2\"}}","rspec.Spree::Order at ./spec/models/spree/order/checkout_spec.rb.with default state machine from address updates totals.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:11:1\"}}","rspec.Spree::Order at ./spec/models/spree/order/checkout_spec.rb.with default state machine from delivery attempts to apply free shipping promotions.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:13:1\"}}","rspec.Spree::Order at ./spec/models/spree/order/checkout_spec.rb.with default state machine from delivery correctly determining payment required based on shipping information with a shipment that has a price transitions to payment.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:13:4:1:1\"}}","rspec.Spree::Order at ./spec/models/spree/order/checkout_spec.rb.with default state machine from delivery correctly determining payment required based on shipping information with a shipment that is free skips payment, transitions to complete.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:13:4:2:1\"}}","rspec.Spree::Order at ./spec/models/spree/order/checkout_spec.rb.with default state machine from delivery with payment required transitions to payment.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:13:2:1\"}}","rspec.Spree::Order at ./spec/models/spree/order/checkout_spec.rb.with default state machine from delivery without payment required transitions to complete.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:13:3:1\"}}","rspec.Spree::Order at ./spec/models/spree/order/checkout_spec.rb.with default state machine from payment when payment is not required does not call process payments.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:14:3:1\"}}","rspec.Spree::Order at ./spec/models/spree/order/checkout_spec.rb.with default state machine from payment with confirmation required transitions to confirm.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:14:1:1\"}}","rspec.Spree::Order at ./spec/models/spree/order/checkout_spec.rb.with default state machine from payment without confirmation required when there is at least one valid payment line_items are in stock transitions to complete.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:14:2:1:1:1\"}}","rspec.Spree::Order at ./spec/models/spree/order/checkout_spec.rb.with default state machine from payment without confirmation required when there is at least one valid payment line_items are not in stock does not receive process_payments!.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:14:2:1:2:1\"}}","rspec.Spree::Order at ./spec/models/spree/order/checkout_spec.rb.with default state machine from payment without confirmation required when there is at least one valid payment line_items are not in stock does not transition to complete.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:14:2:1:2:2\"}}","rspec.Spree::Order at ./spec/models/spree/order/checkout_spec.rb.with default state machine from payment without confirmation required when there is only an invalid payment raises a StateMachine::InvalidTransition.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:14:2:2:1\"}}","rspec.Spree::Order at ./spec/models/spree/order/checkout_spec.rb.with default state machine has the following transitions.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::Order at ./spec/models/spree/order/checkout_spec.rb.with default state machine passes delivery state when transitioning from address over delivery to payment.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7\"}}","rspec.Spree::Order at ./spec/models/spree/order/checkout_spec.rb.with default state machine starts out at cart.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:9\"}}","rspec.Spree::Order at ./spec/models/spree/order/checkout_spec.rb.with default state machine to address cannot transition to address without any line items.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:10:2\"}}","rspec.Spree::Order at ./spec/models/spree/order/checkout_spec.rb.with default state machine to address with a line item doesn't raise an error if the default address is invalid.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:10:1:2\"}}","rspec.Spree::Order at ./spec/models/spree/order/checkout_spec.rb.with default state machine to address with a line item transitions to address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:10:1:1\"}}","rspec.Spree::Order at ./spec/models/spree/order/checkout_spec.rb.with default state machine to address with a line item with default addresses behaves like it cloned the default address example at ./spec/models/spree/order/checkout_spec.rb:160.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:10:1:3:1:1\"}}","rspec.Spree::Order at ./spec/models/spree/order/checkout_spec.rb.with default state machine to address with a line item with default addresses behaves like it cloned the default address example at ./spec/models/spree/order/checkout_spec.rb:160.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:10:1:3:2:1\"}}","rspec.Spree::Order at ./spec/models/spree/order/checkout_spec.rb.with default state machine to delivery when order has default selected_shipping_rate_id invokes set_shipment_cost.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:12:1:1\"}}","rspec.Spree::Order at ./spec/models/spree/order/checkout_spec.rb.with default state machine to delivery when order has default selected_shipping_rate_id updates shipment_total.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:12:1:2\"}}","rspec.Spree::Order at ./spec/models/spree/order/checkout_spec.rb.with only a complete step does not attempt to process payments.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","rspec.Spree::Order at ./spec/models/spree/order/currency_updater_spec.rb.CurrencyUpdater when changing order currency #homogenize_line_item_currencies calculates the item total in the order.currency.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:4\"}}","rspec.Spree::Order at ./spec/models/spree/order/currency_updater_spec.rb.CurrencyUpdater when changing order currency #homogenize_line_item_currencies changes the line_item amounts.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:3\"}}","rspec.Spree::Order at ./spec/models/spree/order/currency_updater_spec.rb.CurrencyUpdater when changing order currency #homogenize_line_item_currencies changes the line_item currencies.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:2\"}}","rspec.Spree::Order at ./spec/models/spree/order/currency_updater_spec.rb.CurrencyUpdater when changing order currency #homogenize_line_item_currencies succeeds without error.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","rspec.Spree::Order at ./spec/models/spree/order/currency_updater_spec.rb.CurrencyUpdater when changing order currency #homogenize_line_item_currencies when there is a price with nil amount destroys the line item when we switch to that price's currency.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:5:1\"}}","rspec.Spree::Order at ./spec/models/spree/order/digital_spec.rb.#digital?/#some_digital? returns false/false for an exclusively non-digital order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3\"}}","rspec.Spree::Order at ./spec/models/spree/order/digital_spec.rb.#digital?/#some_digital? returns false/true for a mixed order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","rspec.Spree::Order at ./spec/models/spree/order/digital_spec.rb.#digital?/#some_digital? returns true/true for a digital order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","rspec.Spree::Order at ./spec/models/spree/order/digital_spec.rb.#digital_links correctly loads the links.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","rspec.Spree::Order at ./spec/models/spree/order/digital_spec.rb.Spree::Cart::AddItem.call adds digital Variants of quantity 1 to an order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.Spree::Order at ./spec/models/spree/order/digital_spec.rb.Spree::Cart::AddItem.call handles quantity higher than 1 when adding one specific digital Variant.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","rspec.Spree::Order at ./spec/models/spree/order/digital_spec.rb.line_item analysis understands that all products are digital.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::Order at ./spec/models/spree/order/digital_spec.rb.line_item analysis understands that empty order is not digital.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","rspec.Spree::Order at ./spec/models/spree/order/digital_spec.rb.line_item analysis understands that no products are digital.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","rspec.Spree::Order at ./spec/models/spree/order/digital_spec.rb.line_item analysis understands that not all products are digital.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","rspec.Spree::Order at ./spec/models/spree/order/finalizing_spec.rb.#finalize! changes the shipment state to ready if order is paid.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","rspec.Spree::Order at ./spec/models/spree/order/finalizing_spec.rb.#finalize! decreases the stock for each variant in the shipment.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","rspec.Spree::Order at ./spec/models/spree/order/finalizing_spec.rb.#finalize! does not sell inventory units if track_inventory_levels is false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","rspec.Spree::Order at ./spec/models/spree/order/finalizing_spec.rb.#finalize! freezes all adjustments.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","rspec.Spree::Order at ./spec/models/spree/order/finalizing_spec.rb.#finalize! order is considered risky and order is approved leaves order in complete state.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7:2:1\"}}","rspec.Spree::Order at ./spec/models/spree/order/finalizing_spec.rb.#finalize! order is considered risky changes state to risky.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7:1\"}}","rspec.Spree::Order at ./spec/models/spree/order/finalizing_spec.rb.#finalize! order is not considered risky sets completed_at.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8:1\"}}","rspec.Spree::Order at ./spec/models/spree/order/finalizing_spec.rb.#finalize! sells inventory units.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","rspec.Spree::Order at ./spec/models/spree/order/finalizing_spec.rb.#finalize! sets completed_at.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::Order at ./spec/models/spree/order/payment_spec.rb.#authorize_payments! example at ./spec/models/spree/order/payment_spec.rb:236.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2\"}}","rspec.Spree::Order at ./spec/models/spree/order/payment_spec.rb.#authorize_payments! processes payments with attempt_authorization!.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","rspec.Spree::Order at ./spec/models/spree/order/payment_spec.rb.#capture_payments! example at ./spec/models/spree/order/payment_spec.rb:251.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2\"}}","rspec.Spree::Order at ./spec/models/spree/order/payment_spec.rb.#capture_payments! processes payments with attempt_authorization!.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","rspec.Spree::Order at ./spec/models/spree/order/payment_spec.rb.#outstanding_balance does not incorporate refunds without a reimbursement.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:4\"}}","rspec.Spree::Order at ./spec/models/spree/order/payment_spec.rb.#outstanding_balance incorporates refund reimbursements.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:3\"}}","rspec.Spree::Order at ./spec/models/spree/order/payment_spec.rb.#outstanding_balance returns negative amount when payment_total is greater than total.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2\"}}","rspec.Spree::Order at ./spec/models/spree/order/payment_spec.rb.#outstanding_balance returns positive amount when payment_total is less than total.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","rspec.Spree::Order at ./spec/models/spree/order/payment_spec.rb.#outstanding_balance? is false when total equals payment_total.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:3\"}}","rspec.Spree::Order at ./spec/models/spree/order/payment_spec.rb.#outstanding_balance? is true when total greater than payment_total.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","rspec.Spree::Order at ./spec/models/spree/order/payment_spec.rb.#outstanding_balance? is true when total less than payment_total.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2\"}}","rspec.Spree::Order at ./spec/models/spree/order/payment_spec.rb.#process_payments! processes the payments.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","rspec.Spree::Order at ./spec/models/spree/order/payment_spec.rb.#process_payments! raises an error if there are no payments to process.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","rspec.Spree::Order at ./spec/models/spree/order/payment_spec.rb.#process_payments! updates order with correct payment total.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:5\"}}","rspec.Spree::Order at ./spec/models/spree/order/payment_spec.rb.#process_payments! when a payment raises a GatewayError returns false when not configured to allow checkout on gateway failures.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4:2\"}}","rspec.Spree::Order at ./spec/models/spree/order/payment_spec.rb.#process_payments! when a payment raises a GatewayError returns true when configured to allow checkout on gateway failures.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4:1\"}}","rspec.Spree::Order at ./spec/models/spree/order/payment_spec.rb.#process_payments! when there are pending payments skips processing the payments.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3:1\"}}","rspec.Spree::Order at ./spec/models/spree/order/payment_spec.rb.#process_payments! when there are pending payments when there is other unprocessed payment processes only the other payment.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3:2:1\"}}","rspec.Spree::Order at ./spec/models/spree/order/payment_spec.rb.ensure source attributes stick around does not have inverse_of defined.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.Spree::Order at ./spec/models/spree/order/payment_spec.rb.ensure source attributes stick around keeps source attributes after updating.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","rspec.Spree::Order at ./spec/models/spree/order/payment_spec.rb.payment required? total > zero example at ./spec/models/spree/order/payment_spec.rb:332.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2:1\"}}","rspec.Spree::Order at ./spec/models/spree/order/payment_spec.rb.payment required? total is zero example at ./spec/models/spree/order/payment_spec.rb:326.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1:1\"}}","rspec.Spree::Order at ./spec/models/spree/order/payment_spec.rb.processing payments does not go over total for order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","rspec.Spree::Order at ./spec/models/spree/order/payment_spec.rb.processing payments does not use failed payments.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","rspec.Spree::Order at ./spec/models/spree/order/payment_spec.rb.processing payments processes all checkout payments along with store credits with store credits payment method auto capture turned off order payment state should be balance due example at ./spec/models/spree/order/payment_spec.rb:66.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:1:1\"}}","rspec.Spree::Order at ./spec/models/spree/order/payment_spec.rb.processing payments processes all checkout payments along with store credits with store credits payment method auto capture turned off order payment state should be balance due example at ./spec/models/spree/order/payment_spec.rb:76.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:2:1\"}}","rspec.Spree::Order at ./spec/models/spree/order/payment_spec.rb.processing payments processes all checkout payments along with store credits with store credits payment method auto capture turned on order should be paid.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1:1\"}}","rspec.Spree::Order at ./spec/models/spree/order/payment_spec.rb.processing payments processes the checkout payment.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::Order at ./spec/models/spree/order/risk_assessment_spec.rb..is_risky? Not risky order with avs_response == '' is not considered risky.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:1\"}}","rspec.Spree::Order at ./spec/models/spree/order/risk_assessment_spec.rb..is_risky? Not risky order with avs_response == D is not considered risky.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","rspec.Spree::Order at ./spec/models/spree/order/risk_assessment_spec.rb..is_risky? Not risky order with avs_response == M is not considered risky.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","rspec.Spree::Order at ./spec/models/spree/order/risk_assessment_spec.rb..is_risky? Not risky order with cvv_response_code == M is not considered risky.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:4:1\"}}","rspec.Spree::Order at ./spec/models/spree/order/risk_assessment_spec.rb..is_risky? Not risky order with cvv_response_message == '' is not considered risky.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:5:1\"}}","rspec.Spree::Order at ./spec/models/spree/order/risk_assessment_spec.rb..is_risky? Risky order AVS response message returns true if the order has an avs_response.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1:1\"}}","rspec.Spree::Order at ./spec/models/spree/order/risk_assessment_spec.rb..is_risky? Risky order CVV response code returns true if the order has an cvv_response_code.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:1\"}}","rspec.Spree::Order at ./spec/models/spree/order/risk_assessment_spec.rb..is_risky? Risky order state == 'failed' returns true if the order has state == 'failed'.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:3:1\"}}","rspec.Spree::Order at ./spec/models/spree/order/risk_assessment_spec.rb.is considered risky can be approved by a user.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.Spree::Order at ./spec/models/spree/order/shipments_spec.rb.ensure shipments will be updated destroys current shipments.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::Order at ./spec/models/spree/order/shipments_spec.rb.ensure shipments will be updated except when order is completed, that's OrderInventory job doesn't touch anything.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1\"}}","rspec.Spree::Order at ./spec/models/spree/order/shipments_spec.rb.ensure shipments will be updated puts order back in address state.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","rspec.Spree::Order at ./spec/models/spree/order/shipments_spec.rb.ensure shipments will be updated resets shipment_total.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","rspec.Spree::Order at ./spec/models/spree/order/state_machine_spec.rb.#can_cancel? should be false if shipment_state is shipped.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:4\"}}","rspec.Spree::Order at ./spec/models/spree/order/state_machine_spec.rb.#can_cancel? should be true if shipment_state is backorder.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","rspec.Spree::Order at ./spec/models/spree/order/state_machine_spec.rb.#can_cancel? should be true if shipment_state is pending.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.Spree::Order at ./spec/models/spree/order/state_machine_spec.rb.#can_cancel? should be true if shipment_state is ready.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3\"}}","rspec.Spree::Order at ./spec/models/spree/order/state_machine_spec.rb.#cancel resets payment state with payments automatically refunds all payments.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:3:1\"}}","rspec.Spree::Order at ./spec/models/spree/order/state_machine_spec.rb.#cancel resets payment state with shipped items does not alter the payment state.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:2:1\"}}","rspec.Spree::Order at ./spec/models/spree/order/state_machine_spec.rb.#cancel resets payment state without shipped items sets payment state to 'void'.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1:1\"}}","rspec.Spree::Order at ./spec/models/spree/order/state_machine_spec.rb.#next! when current state is confirm when payment processing fails cannot transition to complete.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","rspec.Spree::Order at ./spec/models/spree/order/state_machine_spec.rb.#next! when current state is confirm when payment processing succeeds finalizes order when transitioning to complete state.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","rspec.Spree::Order at ./spec/models/spree/order/state_machine_spec.rb.#next! when current state is confirm when payment processing succeeds when credit card processing fails does not complete the order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:2:1\"}}","rspec.Spree::Order at ./spec/models/spree/order/state_machine_spec.rb.#next! when current state is delivery adjusts tax rates twice if there are any shipments.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2\"}}","rspec.Spree::Order at ./spec/models/spree/order/state_machine_spec.rb.#next! when current state is delivery adjusts tax rates when transitioning to delivery.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","rspec.Spree::Order at ./spec/models/spree/order/tax_spec.rb.#tax_zone when no default tax zone when there is a matching zone returns the matching zone.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5:1:1\"}}","rspec.Spree::Order at ./spec/models/spree/order/tax_spec.rb.#tax_zone when no default tax zone when there is no matching zone returns nil.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5:2:1\"}}","rspec.Spree::Order at ./spec/models/spree/order/tax_spec.rb.#tax_zone when no zones exist returns nil.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","rspec.Spree::Order at ./spec/models/spree/order/tax_spec.rb.#tax_zone when tax_using_ship_address: false calculates using bill_address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","rspec.Spree::Order at ./spec/models/spree/order/tax_spec.rb.#tax_zone when tax_using_ship_address: true calculates using ship_address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","rspec.Spree::Order at ./spec/models/spree/order/tax_spec.rb.#tax_zone when there is a default tax zone when there is a matching zone returns the matching zone.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1:1\"}}","rspec.Spree::Order at ./spec/models/spree/order/tax_spec.rb.#tax_zone when there is a default tax zone when there is no matching zone returns the default tax zone.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:2:1\"}}","rspec.Spree::Order at ./spec/models/spree/order/totals_spec.rb.adds item to cart and activates promo item quantity changes recalculates order adjustments.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","rspec.Spree::Order at ./spec/models/spree/order/updating_spec.rb.#update_with_updater! when there are update hooks calls each of the update hooks.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","rspec.Spree::Order at ./spec/models/spree/order/validations_spec.rb.validations does not return two error messages when email is blank.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#after_cancel events publishes order.canceled event.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:3:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#after_cancel when gift card is present handles additional actions.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#after_cancel when no gift card handles additional actions.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:2:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#after_resume publishes order.resumed event.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#all_inventory_units_returned? all inventory units are returned is true.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:57:1:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#all_inventory_units_returned? no inventory units are returned is false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:57:3:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#all_inventory_units_returned? some inventory units are returned is false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:57:2:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#allow_cancel? when all shipments are canceled or ready returns true.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#allow_checkout? is false if there are no line_items in the order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:43:2\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#allow_checkout? is true if there are line_items in the order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:43:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#amount returns the correct sum of items.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:44:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#analytics_subtotal returns the subtotal used for analytics integrations.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:53:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#apply_free_shipping_promotions calls out to the FreeShipping promotion handler.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:31:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#approve! events publishes order.approved event.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:37:2:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#approve! sets considered_risky to false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:37:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#approved_by calls approve!.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:35:3\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#approved_by events publishes order.approved event.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:35:4:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#approved_by sets approved_at.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:35:2\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#approved_by sets approver_id.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:35:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#associate_user! events publishes order.updated event.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:33:7:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#associate_user! when bill_address is set behaves like #associate_user! associates a user to an order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:33:3:1:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#associate_user! when bill_address is set behaves like #associate_user! does not persist the order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:33:3:1:2\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#associate_user! when created_by is set behaves like #associate_user! associates a user to an order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:33:2:1:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#associate_user! when created_by is set behaves like #associate_user! does not persist the order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:33:2:1:2\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#associate_user! when email is set when email should be overridden behaves like #associate_user! associates a user to an order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:33:1:1:1:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#associate_user! when email is set when email should be overridden behaves like #associate_user! does not persist the order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:33:1:1:1:2\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#associate_user! when email is set when email should not be overridden behaves like #associate_user! associates a user to an order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:33:1:2:1:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#associate_user! when email is set when email should not be overridden behaves like #associate_user! does not persist the order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:33:1:2:1:2\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#associate_user! when ship_address is set behaves like #associate_user! associates a user to an order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:33:4:1:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#associate_user! when ship_address is set behaves like #associate_user! does not persist the order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:33:4:1:2\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#associate_user! when the order is persisted associates a user to a persisted order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:33:6:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#associate_user! when the order is persisted behaves like #associate_user! associates a user to an order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:33:6:5:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#associate_user! when the order is persisted does not change any other orders.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:33:6:3\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#associate_user! when the order is persisted does not persist other changes to the order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:33:6:2\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#associate_user! when the order is persisted is not affected by scoping.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:33:6:4\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#associate_user! when the user is not persisted behaves like #associate_user! associates a user to an order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:33:5:2:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#associate_user! when the user is not persisted behaves like #associate_user! does not persist the order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:33:5:2:2\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#associate_user! when the user is not persisted does not persist the user.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:33:5:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#backordered? is backordered if one of the shipments is backordered.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:45:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#backordered_variants returns the backordered variants.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:81:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#bill_address_attributes= when user does not have any addresses changes user default bill addresss.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:71:3:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#bill_address_attributes= when user has address but without default bill address changes user default bill addresss.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:71:4:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#bill_address_attributes= when user has default bill address changes user default bill address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:71:1:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#bill_address_attributes= when user has no default address assigns a new default address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:71:2:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#can_be_deleted? when order has finalized payments behaves like cannot be destroyed example at ./spec/models/spree/order_spec.rb:1140.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:40:2:1:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#can_be_deleted? when order is completed behaves like cannot be destroyed example at ./spec/models/spree/order_spec.rb:1140.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:40:1:1:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#can_be_deleted? when order is not completed and does not have finalized payments can be destroyed.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:40:3:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#can_cancel? is false for completed order in the canceled state.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:46:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#can_cancel? is true for completed order with no shipment.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:46:2\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#can_ship? is false if the order is neither in the 'complete' nor 'resumed' state.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:39:5\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#can_ship? is true for an order in the 'awaiting return' state.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:39:3\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#can_ship? is true for an order in the 'returned' state.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:39:4\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#can_ship? is true for order in the 'complete' state.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:39:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#can_ship? is true for order in the 'resumed' state.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:39:2\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#cancel marks the payments as void.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#cancel with incomplete payments marks the incomplete payments as void.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#cancel with incomplete payments voids transactions for incomplete payments.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2:2\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#canceled_by cancels the order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#canceled_by events publishes order.canceled event.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:6:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#canceled_by has canceler.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:3\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#canceled_by saves canceler_id.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#canceled_by when canceled_at is given saves canceled_at to given time.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:5:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#canceled_by when canceled_at is not given saves canceled_at to Time.current.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:4:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#cart_promo_total with promotions free shipping includes free shipping prromo.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:67:2:1:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#cart_promo_total with promotions free shipping returns 0.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:67:2:1:2\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#cart_promo_total with promotions line item discount includes line item promo.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:67:2:2:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#cart_promo_total with promotions line item discount reeturns -100.0.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:67:2:2:2\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#cart_promo_total with promotions multiple promotions includes all promotions.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:67:2:4:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#cart_promo_total with promotions multiple promotions returns -110.00.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:67:2:4:2\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#cart_promo_total with promotions order discount includes order promo.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:67:2:3:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#cart_promo_total with promotions order discount reeturns -10.0.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:67:2:3:2\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#cart_promo_total without promotions returns 0.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:67:1:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#collect_backend_payment_methods example at ./spec/models/spree/order_spec.rb:1608.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:62:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#collect_backend_payment_methods example at ./spec/models/spree/order_spec.rb:1609.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:62:2\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#collect_backend_payment_methods example at ./spec/models/spree/order_spec.rb:1610.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:62:3\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#collect_frontend_payment_methods does not include a payment method from different stores.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:30:6\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#collect_frontend_payment_methods does not include a payment method that is not suitable for this order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:30:5\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#collect_frontend_payment_methods does not include backend payment method.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:30:3\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#collect_frontend_payment_methods does not include inactive payment methods.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:30:4\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#collect_frontend_payment_methods includes 'both' payment methods.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:30:2\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#collect_frontend_payment_methods includes frontend payment methods.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:30:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#completed? indicates if order is completed.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:42:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#confirmation_required? Spree::Config[:always_include_confirm_step] == false does not bomb out when an order has an unpersisted payment.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:25:3:2\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#confirmation_required? Spree::Config[:always_include_confirm_step] == false returns false if payments empty and Spree::Config[:always_include_confirm_step] == false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:25:3:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#confirmation_required? Spree::Config[:always_include_confirm_step] == true returns true if payments empty.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:25:2:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#confirmation_required? is required if the state is currently 'confirm'.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:25:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#confirmation_required? when at least one payment method requires confirmation example at ./spec/models/spree/order_spec.rb:627.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:25:5:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#confirmation_required? when the payment does not require confirmation example at ./spec/models/spree/order_spec.rb:618.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:25:4:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#considered_risky! events publishes order.updated event.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:36:2:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#considered_risky! sets considered_risky to true.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:36:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#create assigns an order number.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#create creates a randomized 35 character token.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:2\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#create_proposed_shipments assigns the coordinator returned shipments to its shipments.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:56:2\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#create_proposed_shipments has unassociated inventory units when backordered deletes inventory_unit.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:56:1:4:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#create_proposed_shipments has unassociated inventory units when on_hand deletes inventory_unit.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:56:1:3:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#create_proposed_shipments has unassociated inventory units when returned does not delete inventory_unit.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:56:1:2:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#create_proposed_shipments has unassociated inventory units when shipped does not delete inventory_unit.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:56:1:1:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#create_shipment_tax_charge! when order has no shipments example at ./spec/models/spree/order_spec.rb:1635.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:63:2:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#create_shipment_tax_charge! when order has shipments example at ./spec/models/spree/order_spec.rb:1625.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:63:1:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#create_shipment_tax_charge! when order has shipments example at ./spec/models/spree/order_spec.rb:1626.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:63:1:2\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#create_shipment_tax_charge! when order has shipments example at ./spec/models/spree/order_spec.rb:1627.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:63:1:3\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#credit_card_nil_payment when valid-amount(>0) creditcard payment expect not to build a new payment.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:61:2:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#credit_card_nil_payment when zero amount credit-card payment expect not to build a new payment.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:61:1:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#currency when object currency is ABC returns the currency from the object.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:24:1:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#destroying order will trigger ship and bill addresses destroy example at ./spec/models/spree/order_spec.rb:1668.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:65:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#disassociate_user! disassociates a user from an order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:34:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#display_adjustment_total returns the value as a spree money.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:21:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#display_item_total returns the value as a spree money.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:20:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#display_outstanding_balance returns the value as a spree money.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#display_pre_tax_item_amount returns the value as a spree money.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:50:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#display_pre_tax_total returns the value as a spree money.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:52:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#display_promo_total returns the value as a spree money.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:22:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#display_total returns the value as a spree money.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:23:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#ensure_available_shipping_rates when order has no shipments returns false and adds an error to the order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:83:1:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#ensure_available_shipping_rates when order has shipments with no shipping rates deletes all the shipments.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:83:2:2\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#ensure_available_shipping_rates when order has shipments with no shipping rates returns false and adds an error to the order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:83:2:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#ensure_available_shipping_rates when order has shipments with shipping rates returns nil and does not add an error to the order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:83:3:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#ensure_line_item_variants_are_not_discontinued when no variants are destroyed does not restart checkout.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:2:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#ensure_line_item_variants_are_not_discontinued when no variants are destroyed is true.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:2:2\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#ensure_line_item_variants_are_not_discontinued when variant is destroyed has error message.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:1:2\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#ensure_line_item_variants_are_not_discontinued when variant is destroyed is false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:1:3\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#ensure_line_item_variants_are_not_discontinued when variant is destroyed restarts checkout flow.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:1:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#ensure_line_items_are_in_stock has error message.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:17:2\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#ensure_line_items_are_in_stock is false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:17:3\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#ensure_line_items_are_in_stock restarts checkout flow.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:17:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#ensure_updated_shipments when order has shipments and is not completed destroys all shipments.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:38:1:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#ensure_updated_shipments when order has shipments and is not completed events publishes order.updated event.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:38:1:4:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#ensure_updated_shipments when order has shipments and is not completed resets shipment_total to 0.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:38:1:2\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#ensure_updated_shipments when order has shipments and is not completed restarts checkout flow.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:38:1:3\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#ensure_updated_shipments when order is completed does not destroy shipments.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:38:2:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#finalize! changes the shipment state to ready if order is paid.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:4\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#finalize! decreases the stock for each variant in the shipment.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:3\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#finalize! does not sell inventory units if track_inventory_levels is false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:5\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#finalize! events publishes order.completed event.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:8:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#finalize! freezes all adjustments.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:6\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#finalize! order is considered risky and order is approved leaves order in complete state.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:7:2:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#finalize! order is considered risky changes state to risky.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:7:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#finalize! sells inventory units.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:2\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#finalize! sets completed_at.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#full_name for a guest order example at ./spec/models/spree/order_spec.rb:118.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#full_name for a guest order with billing address example at ./spec/models/spree/order_spec.rb:123.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:2:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#full_name for an order with user example at ./spec/models/spree/order_spec.rb:106.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#full_name for an order with user without name example at ./spec/models/spree/order_spec.rb:111.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:2:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#fully_discounted? the order had inventory-related cost example at ./spec/models/spree/order_spec.rb:1507.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:58:2:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#fully_discounted? the order had no inventory-related cost example at ./spec/models/spree/order_spec.rb:1493.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:58:1:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#fully_shipped? when all order shipments were shipped example at ./spec/models/spree/order_spec.rb:2209.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:75:1:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#fully_shipped? when not all order shipments were shipped example at ./spec/models/spree/order_spec.rb:2213.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:75:2:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#has_free_shipping? when promotion is applied example at ./spec/models/spree/order_spec.rb:1823.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:68:1:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#has_free_shipping? when promotion is applied when free shipping promotion has item total rule when order total is in defined range example at ./spec/models/spree/order_spec.rb:1835.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:68:1:2:1:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#has_free_shipping? when promotion is applied when free shipping promotion has item total rule when order total is not in defined range example at ./spec/models/spree/order_spec.rb:1841.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:68:1:2:2:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#has_free_shipping? when promotion is not applied example at ./spec/models/spree/order_spec.rb:1847.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:68:2:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#has_non_reimbursement_related_refunds? a non-reimbursement related refund exists example at ./spec/models/spree/order_spec.rb:1355.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:55:2:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#has_non_reimbursement_related_refunds? a reimbursement related refund exists example at ./spec/models/spree/order_spec.rb:1377.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:55:4:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#has_non_reimbursement_related_refunds? an old-style refund exists example at ./spec/models/spree/order_spec.rb:1369.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:55:3:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#has_non_reimbursement_related_refunds? no refunds exist example at ./spec/models/spree/order_spec.rb:1348.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:55:1:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#line_items_without_shipping_rates when order has no shipments returns an empty array.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:82:1:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#line_items_without_shipping_rates when order has shipments with no shipping rates returns the line items without shipping rates.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:82:2:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#line_items_without_shipping_rates when order has shipments with shipping rates returns an empty array.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:82:3:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#order_refunded? when order does not have refunds returns false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:78:2:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#order_refunded? when orders has refunds when payment is void returns true.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:78:1:3:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#order_refunded? when orders has refunds when sum of refunds is equal to max amount which could be refunded returns true.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:78:1:2:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#order_refunded? when orders has refunds when sum of refunds is less than max amount which could be refunded returns false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:78:1:1:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#paid? when all order valid payments are completed when the amount of the valid payments < the order total example at ./spec/models/spree/order_spec.rb:2086.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:74:1:1:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#paid? when all order valid payments are completed when the amount of the valid payments == the order total example at ./spec/models/spree/order_spec.rb:2092.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:74:1:2:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#paid? when all order valid payments are completed when the amount of the valid payments > the order total example at ./spec/models/spree/order_spec.rb:2098.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:74:1:3:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#paid? when not all order payments are completed one is failed when the amount of the valid payments < the order total example at ./spec/models/spree/order_spec.rb:2140.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:74:3:1:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#paid? when not all order payments are completed one is failed when the amount of the valid payments == the order total example at ./spec/models/spree/order_spec.rb:2146.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:74:3:2:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#paid? when not all order payments are completed one is failed when the amount of the valid payments > the order total example at ./spec/models/spree/order_spec.rb:2152.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:74:3:3:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#paid? when not all order payments are completed one is invalid when the amount of the valid payments < the order total example at ./spec/models/spree/order_spec.rb:2168.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:74:4:1:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#paid? when not all order payments are completed one is invalid when the amount of the valid payments == the order total example at ./spec/models/spree/order_spec.rb:2174.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:74:4:2:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#paid? when not all order payments are completed one is invalid when the amount of the valid payments > the order total example at ./spec/models/spree/order_spec.rb:2180.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:74:4:3:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#paid? when not all order payments are completed one is void when the amount of the valid payments < the order total example at ./spec/models/spree/order_spec.rb:2112.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:74:2:1:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#paid? when not all order payments are completed one is void when the amount of the valid payments == the order total example at ./spec/models/spree/order_spec.rb:2118.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:74:2:2:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#paid? when not all order payments are completed one is void when the amount of the valid payments > the order total example at ./spec/models/spree/order_spec.rb:2124.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:74:2:3:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#partially_refunded? when order does not have refunds returns false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:77:2:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#partially_refunded? when orders has refunds when payment is failed returns false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:77:1:5:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#partially_refunded? when orders has refunds when payment is void returns false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:77:1:4:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#partially_refunded? when orders has refunds when sum of refunds is equal to max amount which could be refunded returns false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:77:1:2:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#partially_refunded? when orders has refunds when sum of refunds is greater than max amount which could be refunded returns false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:77:1:3:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#partially_refunded? when orders has refunds when sum of refunds is less than max amount which could be refunded returns true.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:77:1:1:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#payment_method returns the payment method.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:79:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#payment_source returns the payment source.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:80:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#pre_tax_item_amount sums all of the line items' pre tax amounts.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:49:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#pre_tax_total sums all of the line items' and shipments pre tax amounts.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:51:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#products can find a line item matching a given variant.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:32:2\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#products gets the quantity of a given variant.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:32:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#products match line item with options does not match line item without options.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:32:3:2\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#products match line item with options matches line item when options match.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:32:3:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#promo_code with promo code with coupon code batches returns the promotion code.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:59:2:2:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#promo_code with promo code with coupon code batches returns the same promotion code after line item removal.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:59:2:2:2\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#promo_code with promo code with single coupon code returns the promotion code.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:59:2:1:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#promo_code without promo code returns nil.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:59:1:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#quantity sums the quantity of all line items.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:54:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#restart_checkout_flow events publishes order.updated event.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:28:3:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#restart_checkout_flow updates the state column to the first checkout_steps value.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:28:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#restart_checkout_flow without line items updates the state column to cart.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:28:2:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#ship_address_attributes= when user does not have any addresses changes user default ship address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:73:3:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#ship_address_attributes= when user has address but without default ship address changes user default ship address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:73:4:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#ship_address_attributes= when user has default ship address changes user default ship addresss.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:73:1:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#ship_address_attributes= when user has no default address assigns a new default address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:73:2:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#shipping_eq_billing_address blank addresses example at ./spec/models/spree/order_spec.rb:1652.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:64:2:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#shipping_eq_billing_address no addresses example at ./spec/models/spree/order_spec.rb:1661.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:64:3:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#shipping_eq_billing_address with only bill address example at ./spec/models/spree/order_spec.rb:1643.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:64:1:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#state_changed does not do anything if state does not change.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:2\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#state_changed logs state changes.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#tax_address when tax_using_ship_address is not true returns bill_address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:27:2:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#tax_address when tax_using_ship_address is true returns ship_address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:27:1:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#tax_total adds included tax and additional tax.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:47:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#to_csv when order has line items returns the csv lines.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:84:2:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#to_csv when order has no line items returns no csv lines.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:84:1:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#total_weight example at ./spec/models/spree/order_spec.rb:2230.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:76:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#uneditable? returns false when order is during checkout.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:41:4\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#uneditable? returns true when order is canceled.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:41:2\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#uneditable? returns true when order is completed.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:41:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#uneditable? returns true when order is returned.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:41:3\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#update_with_updater! expects to update order with order updater.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#uppercase_number example at ./spec/models/spree/order_spec.rb:1854.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:69:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#valid_promotions with promotions expect return valid order promotions.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:66:2:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.#valid_promotions without promotions expect to return an empty array.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:66:1:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.Callbacks #clone_shipping_address clones the shipping address when use_shipping is true.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.Callbacks #clone_shipping_address does not clone the shipping address when use_shipping is false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:2\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.Scopes .complete example at ./spec/models/spree/order_spec.rb:27.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.Scopes .complete example at ./spec/models/spree/order_spec.rb:28.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:2\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.Scopes .incomplete example at ./spec/models/spree/order_spec.rb:32.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.Scopes .incomplete example at ./spec/models/spree/order_spec.rb:33.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:2\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.Scopes .multi_search returns orders based on an email.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.Scopes .multi_search returns orders based on the first name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4:2\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.Scopes .multi_search returns orders based on the full name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4:4\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.Scopes .multi_search returns orders based on the last name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4:3\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.Scopes .not_canceled example at ./spec/models/spree/order_spec.rb:37.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.add_update_hook calls hook during finalize.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:26:2\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.add_update_hook calls hook during update.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:26:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.behaves like lifecycle events lifecycle events order.created publishes created event when record is created.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.behaves like lifecycle events lifecycle events order.deleted publishes deleted event when record is deleted.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.behaves like lifecycle events lifecycle events order.updated publishes updated event when record is updated.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.behaves like metadata can query records by metadata properties.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:10\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:10.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:5\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:11.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:6\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:4.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:5.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:7.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:8.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:4\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.behaves like metadata reads data as not symbolized keys.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:8\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.behaves like metadata reads data as symbolized keys.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:7\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.bill_address_id= when assigned address does not belong to user sets order bill address to nil.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:70:2:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.bill_address_id= when assigned address exist when assigned address belongs to user assigns address to order as bill address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:70:1:1:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.bill_address_id= when assigned address exist when assigned address belongs to user does not set address as user default bill address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:70:1:1:2\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.bill_address_id= with guest user when assigning a different existing address sets order bill address to nil.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:70:3:2:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.bill_address_id= with guest user when assigning the same existing address does nothing.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:70:3:1:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.creates shipments cost update and persist totals.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.empty! completed order raises an exception.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:1:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.empty! incomplete order clears out line items, adjustments and update totals.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:2:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.insufficient_stock_lines returns line_item that has insufficient stock on hand.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.locking can lock.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:48:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.order transit to returned state from resumed state when all inventory_units returned example at ./spec/models/spree/order_spec.rb:1568.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:60:1:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.order transit to returned state from resumed state when some inventory_units returned example at ./spec/models/spree/order_spec.rb:1577.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:60:2:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.quick checkout #quick_checkout? returns false if the order has a shipping address but it is not a quick checkout address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:85:1:2\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.quick checkout #quick_checkout? returns false if the order has no shipping address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:85:1:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.quick checkout #quick_checkout? returns true if the order has a quick checkout shipping address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:85:1:3\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.quick checkout #quick_checkout_available? returns false if order does not require payment.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:85:2:5\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.quick checkout #quick_checkout_available? returns false if order has many shipments.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:85:2:4\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.quick checkout #quick_checkout_available? returns false if the order has physical products and some digital products.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:85:2:3\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.quick checkout #quick_checkout_available? returns true if the order has no digital products at all.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:85:2:2\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.quick checkout #quick_checkout_available? returns true if the order is fully digital.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:85:2:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.quick checkout #quick_checkout_require_address? returns false if the order does not require delivery.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:85:3:3\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.quick checkout #quick_checkout_require_address? returns false if the order is digital.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:85:3:2\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.quick checkout #quick_checkout_require_address? returns true if the order is not digital and delivery is required.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:85:3:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.ship_address_id= when assigned address does not belong to user sets order ship address to nil.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:72:2:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.ship_address_id= when assigned address exist when assigned address belongs to user assigns address to order as ship address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:72:1:1:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.ship_address_id= when assigned address exist when assigned address belongs to user does not set address as user default ship address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:72:1:1:2\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.ship_address_id= with guest user when assigning a different existing address sets order ship address to nil.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:72:3:2:1\"}}","rspec.Spree::Order at ./spec/models/spree/order_spec.rb.ship_address_id= with guest user when assigning the same existing address does nothing.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:72:3:1:1\"}}","rspec.Spree::OrderContents at ./spec/models/spree/order_contents_spec.rb.#add adds line item if one does not exist.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","rspec.Spree::OrderContents at ./spec/models/spree/order_contents_spec.rb.#add given a shipment ensure shipment calls update_amounts instead of order calling ensure_updated_shipments.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","rspec.Spree::OrderContents at ./spec/models/spree/order_contents_spec.rb.#add given quantity is not explicitly provided adds one line item.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","rspec.Spree::OrderContents at ./spec/models/spree/order_contents_spec.rb.#add not given a shipment ensures updated shipments.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","rspec.Spree::OrderContents at ./spec/models/spree/order_contents_spec.rb.#add running promotions one active line item promotion creates valid discount on order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8:2:1\"}}","rspec.Spree::OrderContents at ./spec/models/spree/order_contents_spec.rb.#add running promotions one active line item promotion example at ./spec/models/spree/order_contents_spec.rb:75.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8:2:2\"}}","rspec.Spree::OrderContents at ./spec/models/spree/order_contents_spec.rb.#add running promotions one active order promotion creates valid discount on order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8:1:1\"}}","rspec.Spree::OrderContents at ./spec/models/spree/order_contents_spec.rb.#add running promotions one active order promotion example at ./spec/models/spree/order_contents_spec.rb:75.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8:1:2\"}}","rspec.Spree::OrderContents at ./spec/models/spree/order_contents_spec.rb.#add updates line item if one exists.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","rspec.Spree::OrderContents at ./spec/models/spree/order_contents_spec.rb.#add updates order totals.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","rspec.Spree::OrderContents at ./spec/models/spree/order_contents_spec.rb.#add when store_credits payment example at ./spec/models/spree/order_contents_spec.rb:65.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7:1\"}}","rspec.Spree::OrderContents at ./spec/models/spree/order_contents_spec.rb.#remove given a shipment ensure shipment calls update_amounts instead of order calling ensure_updated_shipments.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:1\"}}","rspec.Spree::OrderContents at ./spec/models/spree/order_contents_spec.rb.#remove given an invalid variant raises an exception.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","rspec.Spree::OrderContents at ./spec/models/spree/order_contents_spec.rb.#remove given quantity is not explicitly provided removes one line item.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","rspec.Spree::OrderContents at ./spec/models/spree/order_contents_spec.rb.#remove not given a shipment ensures updated shipments.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:4:1\"}}","rspec.Spree::OrderContents at ./spec/models/spree/order_contents_spec.rb.#remove reduces line_item quantity if quantity is less the line_item quantity.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:5\"}}","rspec.Spree::OrderContents at ./spec/models/spree/order_contents_spec.rb.#remove removes line_item if quantity matches line_item quantity.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:7\"}}","rspec.Spree::OrderContents at ./spec/models/spree/order_contents_spec.rb.#remove updates order totals.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:8\"}}","rspec.Spree::OrderContents at ./spec/models/spree/order_contents_spec.rb.#remove when store_credits payment example at ./spec/models/spree/order_contents_spec.rb:184.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:6:1\"}}","rspec.Spree::OrderContents at ./spec/models/spree/order_contents_spec.rb.#remove_line_item given a shipment ensure shipment calls update_amounts instead of order calling ensure_updated_shipments.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","rspec.Spree::OrderContents at ./spec/models/spree/order_contents_spec.rb.#remove_line_item not given a shipment ensures updated shipments.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","rspec.Spree::OrderContents at ./spec/models/spree/order_contents_spec.rb.#remove_line_item removes line_item.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4\"}}","rspec.Spree::OrderContents at ./spec/models/spree/order_contents_spec.rb.#remove_line_item updates order totals.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:5\"}}","rspec.Spree::OrderContents at ./spec/models/spree/order_contents_spec.rb.#remove_line_item when store_credits payment example at ./spec/models/spree/order_contents_spec.rb:238.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3:1\"}}","rspec.Spree::OrderContents at ./spec/models/spree/order_contents_spec.rb.completed order updates order payment state.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","rspec.Spree::OrderContents at ./spec/models/spree/order_contents_spec.rb.update cart changes item quantity.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","rspec.Spree::OrderContents at ./spec/models/spree/order_contents_spec.rb.update cart ensures updated shipments.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:5\"}}","rspec.Spree::OrderContents at ./spec/models/spree/order_contents_spec.rb.update cart submits item quantity 0 does not filter if there is only one line item.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:4:3\"}}","rspec.Spree::OrderContents at ./spec/models/spree/order_contents_spec.rb.update cart submits item quantity 0 doesnt try to update unexistent items.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:4:2\"}}","rspec.Spree::OrderContents at ./spec/models/spree/order_contents_spec.rb.update cart submits item quantity 0 removes item from order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:4:1\"}}","rspec.Spree::OrderContents at ./spec/models/spree/order_contents_spec.rb.update cart updates order totals.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2\"}}","rspec.Spree::OrderContents at ./spec/models/spree/order_contents_spec.rb.update cart when store_credits payment example at ./spec/models/spree/order_contents_spec.rb:287.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3:1\"}}","rspec.Spree::OrderInventory at ./spec/models/spree/order_inventory_spec.rb.#add_to_shipment creates stock_movement.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:5\"}}","rspec.Spree::OrderInventory at ./spec/models/spree/order_inventory_spec.rb.#add_to_shipment inventory units state sets inventory_units state as per stock location availability.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","rspec.Spree::OrderInventory at ./spec/models/spree/order_inventory_spec.rb.#add_to_shipment order is not completed doesn't unstock items.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","rspec.Spree::OrderInventory at ./spec/models/spree/order_inventory_spec.rb.#add_to_shipment store doesnt track inventory creates only on hand inventory units.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:1\"}}","rspec.Spree::OrderInventory at ./spec/models/spree/order_inventory_spec.rb.#add_to_shipment variant doesnt track inventory creates only on hand inventory units.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:4:1\"}}","rspec.Spree::OrderInventory at ./spec/models/spree/order_inventory_spec.rb.#determine_target_shipment selects first non-shipped shipment that already contains given variant.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","rspec.Spree::OrderInventory at ./spec/models/spree/order_inventory_spec.rb.#determine_target_shipment when no shipments already contain this varint selects first non-shipped shipment that leaves from same stock_location.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","rspec.Spree::OrderInventory at ./spec/models/spree/order_inventory_spec.rb.when order has too many inventory units #remove_from_shipment backordered items are removed doesn't create on_hand items from backordered items.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3:7:1\"}}","rspec.Spree::OrderInventory at ./spec/models/spree/order_inventory_spec.rb.when order has too many inventory units #remove_from_shipment destroys backordered units first.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3:2\"}}","rspec.Spree::OrderInventory at ./spec/models/spree/order_inventory_spec.rb.when order has too many inventory units #remove_from_shipment destroys self if not inventory units remain.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3:5\"}}","rspec.Spree::OrderInventory at ./spec/models/spree/order_inventory_spec.rb.when order has too many inventory units #remove_from_shipment destroys unshipped units first.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3:3\"}}","rspec.Spree::OrderInventory at ./spec/models/spree/order_inventory_spec.rb.when order has too many inventory units #remove_from_shipment inventory unit line item and variant points to different products completed order removes only units that match both line item and variant.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3:6:1:1\"}}","rspec.Spree::OrderInventory at ./spec/models/spree/order_inventory_spec.rb.when order has too many inventory units #remove_from_shipment only attempts to destroy as many units as are eligible, and return amount destroyed.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3:4\"}}","rspec.Spree::OrderInventory at ./spec/models/spree/order_inventory_spec.rb.when order has too many inventory units #remove_from_shipment order is not completed doesn't restock items.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3:1:1\"}}","rspec.Spree::OrderInventory at ./spec/models/spree/order_inventory_spec.rb.when order has too many inventory units decreases the number of inventory units.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2\"}}","rspec.Spree::OrderInventory at ./spec/models/spree/order_inventory_spec.rb.when order has too many inventory units is a messed up order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","rspec.Spree::OrderInventory at ./spec/models/spree/order_inventory_spec.rb.when order is missing inventory units creates the proper number of inventory units.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::OrderMerger at ./spec/models/spree/order_merger_spec.rb.destroys the other order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","rspec.Spree::OrderMerger at ./spec/models/spree/order_merger_spec.rb.merging an order with a gift card merges the gift card.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1\"}}","rspec.Spree::OrderMerger at ./spec/models/spree/order_merger_spec.rb.merging an order with addresses assigned to an other complete order destroys the other order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1\"}}","rspec.Spree::OrderMerger at ./spec/models/spree/order_merger_spec.rb.merging together orders with invalid line items creates errors with invalid line items.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1\"}}","rspec.Spree::OrderMerger at ./spec/models/spree/order_merger_spec.rb.merging together two orders with different line items example at ./spec/models/spree/order_merger_spec.rb:117.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","rspec.Spree::OrderMerger at ./spec/models/spree/order_merger_spec.rb.merging together two orders with line items for the same variant example at ./spec/models/spree/order_merger_spec.rb:48.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","rspec.Spree::OrderMerger at ./spec/models/spree/order_merger_spec.rb.merging using extension-specific line_item_comparison_hooks 2 different line items example at ./spec/models/spree/order_merger_spec.rb:94.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2:1\"}}","rspec.Spree::OrderMerger at ./spec/models/spree/order_merger_spec.rb.merging using extension-specific line_item_comparison_hooks 2 equal line items example at ./spec/models/spree/order_merger_spec.rb:75.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1:1\"}}","rspec.Spree::OrderMerger at ./spec/models/spree/order_merger_spec.rb.persist the merge.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3\"}}","rspec.Spree::OrderMerger at ./spec/models/spree/order_merger_spec.rb.user is provided assigns user to new order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","rspec.Spree::OrderMerger at ./spec/models/spree/order_merger_spec.rb.when `discard_merged` is false does not change the other order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","rspec.Spree::OrderMerger at ./spec/models/spree/order_merger_spec.rb.when `discard_merged` is false keeps the other order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.Spree::OrderPromotion at ./spec/models/spree/order_promotion_spec.rb.#amount equals sum of adjustments created by promotion.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","rspec.Spree::OrderPromotion at ./spec/models/spree/order_promotion_spec.rb.#description returns the same value as Promotion description.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.Spree::OrderPromotion at ./spec/models/spree/order_promotion_spec.rb.#display_amount different currency return same currency as order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1\"}}","rspec.Spree::OrderPromotion at ./spec/models/spree/order_promotion_spec.rb.#display_amount returns Spree::Money instance with amount value and proper currency.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","rspec.Spree::OrderPromotion at ./spec/models/spree/order_promotion_spec.rb.#name returns the same value as Promotion name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::OrderUpdater at ./spec/models/spree/order_updater_spec.rb.#update_with_updater! updates item count.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.Spree::OrderUpdater at ./spec/models/spree/order_updater_spec.rb.completed order #update updates payment state.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1:1\"}}","rspec.Spree::OrderUpdater at ./spec/models/spree/order_updater_spec.rb.completed order #update updates shipment state.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1:2\"}}","rspec.Spree::OrderUpdater at ./spec/models/spree/order_updater_spec.rb.completed order #update updates shipments total again after updating shipments.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1:3\"}}","rspec.Spree::OrderUpdater at ./spec/models/spree/order_updater_spec.rb.completed order #update_shipments refresh rates keeps the original shipping method.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2:4:1\"}}","rspec.Spree::OrderUpdater at ./spec/models/spree/order_updater_spec.rb.completed order #update_shipments refreshes shipment rates.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2:2\"}}","rspec.Spree::OrderUpdater at ./spec/models/spree/order_updater_spec.rb.completed order #update_shipments updates each shipment.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2:1\"}}","rspec.Spree::OrderUpdater at ./spec/models/spree/order_updater_spec.rb.completed order #update_shipments updates the shipment amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2:3\"}}","rspec.Spree::OrderUpdater at ./spec/models/spree/order_updater_spec.rb.incomplete order #update_shipments resets shipping method to frontend-available.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:4:1\"}}","rspec.Spree::OrderUpdater at ./spec/models/spree/order_updater_spec.rb.incomplete order doesnt update each shipment.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:3\"}}","rspec.Spree::OrderUpdater at ./spec/models/spree/order_updater_spec.rb.incomplete order doesnt update payment state.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","rspec.Spree::OrderUpdater at ./spec/models/spree/order_updater_spec.rb.incomplete order doesnt update shipment state.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2\"}}","rspec.Spree::OrderUpdater at ./spec/models/spree/order_updater_spec.rb.order totals update item total.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","rspec.Spree::OrderUpdater at ./spec/models/spree/order_updater_spec.rb.order totals update order adjustments.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","rspec.Spree::OrderUpdater at ./spec/models/spree/order_updater_spec.rb.order totals update shipment total.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","rspec.Spree::OrderUpdater at ./spec/models/spree/order_updater_spec.rb.order totals updates payment totals.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::OrderUpdater at ./spec/models/spree/order_updater_spec.rb.order totals with order promotion followed by line item addition updates promotion total.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1\"}}","rspec.Spree::OrderUpdater at ./spec/models/spree/order_updater_spec.rb.state change.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5\"}}","rspec.Spree::OrderUpdater at ./spec/models/spree/order_updater_spec.rb.updating payment state is failed if no valid payments.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","rspec.Spree::OrderUpdater at ./spec/models/spree/order_updater_spec.rb.updating payment state order is canceled and is paid is credit_owed.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:5:2:1\"}}","rspec.Spree::OrderUpdater at ./spec/models/spree/order_updater_spec.rb.updating payment state order is canceled and is still unpaid is void.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:5:1:1\"}}","rspec.Spree::OrderUpdater at ./spec/models/spree/order_updater_spec.rb.updating payment state order is canceled and payment is refunded is void.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:5:3:1\"}}","rspec.Spree::OrderUpdater at ./spec/models/spree/order_updater_spec.rb.updating payment state order total equals payment total is paid.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:4:1\"}}","rspec.Spree::OrderUpdater at ./spec/models/spree/order_updater_spec.rb.updating payment state order total is greater than payment total is balance_due.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3:1\"}}","rspec.Spree::OrderUpdater at ./spec/models/spree/order_updater_spec.rb.updating payment state payment total is greater than order total is credit_owed.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1\"}}","rspec.Spree::OrderUpdater at ./spec/models/spree/order_updater_spec.rb.updating shipment state is backordered.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","rspec.Spree::OrderUpdater at ./spec/models/spree/order_updater_spec.rb.updating shipment state is nil.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","rspec.Spree::OrderUpdater at ./spec/models/spree/order_updater_spec.rb.updating shipment state is partial.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:6\"}}","rspec.Spree::OrderUpdater at ./spec/models/spree/order_updater_spec.rb.updating shipment state is pending.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:5\"}}","rspec.Spree::OrderUpdater at ./spec/models/spree/order_updater_spec.rb.updating shipment state is ready.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4\"}}","rspec.Spree::OrderUpdater at ./spec/models/spree/order_updater_spec.rb.updating shipment state is shipped.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3\"}}","rspec.Spree::Orders::Approve at ./spec/services/spree/orders/approve_spec.rb.with approver passed behaves like approves order example at ./spec/services/spree/orders/approve_spec.rb:13.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","rspec.Spree::Orders::Approve at ./spec/services/spree/orders/approve_spec.rb.with approver passed behaves like approves order example at ./spec/services/spree/orders/approve_spec.rb:14.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2\"}}","rspec.Spree::Orders::Approve at ./spec/services/spree/orders/approve_spec.rb.with approver passed behaves like approves order example at ./spec/services/spree/orders/approve_spec.rb:15.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3\"}}","rspec.Spree::Orders::Approve at ./spec/services/spree/orders/approve_spec.rb.with approver passed example at ./spec/services/spree/orders/approve_spec.rb:21.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","rspec.Spree::Orders::Approve at ./spec/services/spree/orders/approve_spec.rb.without approver passed behaves like approves order example at ./spec/services/spree/orders/approve_spec.rb:13.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","rspec.Spree::Orders::Approve at ./spec/services/spree/orders/approve_spec.rb.without approver passed behaves like approves order example at ./spec/services/spree/orders/approve_spec.rb:14.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:2\"}}","rspec.Spree::Orders::Approve at ./spec/services/spree/orders/approve_spec.rb.without approver passed behaves like approves order example at ./spec/services/spree/orders/approve_spec.rb:15.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:3\"}}","rspec.Spree::Orders::CreateUserAccount at ./spec/services/spree/orders/create_user_account_spec.rb.when order has no user assigns the bill address to the user.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","rspec.Spree::Orders::CreateUserAccount at ./spec/services/spree/orders/create_user_account_spec.rb.when order has no user assigns the ship address to the user.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","rspec.Spree::Orders::CreateUserAccount at ./spec/services/spree/orders/create_user_account_spec.rb.when order has no user assigns the user to the order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","rspec.Spree::Orders::CreateUserAccount at ./spec/services/spree/orders/create_user_account_spec.rb.when order has no user creates a new user.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::Orders::CreateUserAccount at ./spec/services/spree/orders/create_user_account_spec.rb.when user with the given email already exists assigns the user to the order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","rspec.Spree::Orders::CreateUserAccount at ./spec/services/spree/orders/create_user_account_spec.rb.when user with the given email already exists does not create a new user.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.Spree::Orders::CreateUserAccount at ./spec/services/spree/orders/create_user_account_spec.rb.when user with the given email already exists returns success with the user.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3\"}}","rspec.Spree::Payment at ./spec/models/spree/payment_spec.rb.#add_gateway_processing_error adds a gateway processing error.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:32:1\"}}","rspec.Spree::Payment at ./spec/models/spree/payment_spec.rb.#add_gateway_processing_error when the metafield already exists adds a gateway processing error.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:32:2:1\"}}","rspec.Spree::Payment at ./spec/models/spree/payment_spec.rb.#amount= when the amount is a number #amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:24:2:1\"}}","rspec.Spree::Payment at ./spec/models/spree/payment_spec.rb.#amount= when the amount is a string amount contains a comma #amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:24:1:4:1\"}}","rspec.Spree::Payment at ./spec/models/spree/payment_spec.rb.#amount= when the amount is a string amount contains a dollar sign #amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:24:1:3:1\"}}","rspec.Spree::Payment at ./spec/models/spree/payment_spec.rb.#amount= when the amount is a string amount contains a negative sign #amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:24:1:5:1\"}}","rspec.Spree::Payment at ./spec/models/spree/payment_spec.rb.#amount= when the amount is a string amount is a decimal #amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:24:1:1:1\"}}","rspec.Spree::Payment at ./spec/models/spree/payment_spec.rb.#amount= when the amount is a string amount is an empty string #amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:24:1:7:1\"}}","rspec.Spree::Payment at ./spec/models/spree/payment_spec.rb.#amount= when the amount is a string amount is an integer #amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:24:1:2:1\"}}","rspec.Spree::Payment at ./spec/models/spree/payment_spec.rb.#amount= when the amount is a string amount is invalid #amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:24:1:6:1\"}}","rspec.Spree::Payment at ./spec/models/spree/payment_spec.rb.#amount= when the locale uses a coma as a decimal separator amount contains a $ sign #amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:24:3:2:1\"}}","rspec.Spree::Payment at ./spec/models/spree/payment_spec.rb.#amount= when the locale uses a coma as a decimal separator amount contains a negative sign #amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:24:3:4:1\"}}","rspec.Spree::Payment at ./spec/models/spree/payment_spec.rb.#amount= when the locale uses a coma as a decimal separator amount is a decimal #amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:24:3:1:1\"}}","rspec.Spree::Payment at ./spec/models/spree/payment_spec.rb.#amount= when the locale uses a coma as a decimal separator amount is a number #amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:24:3:3:1\"}}","rspec.Spree::Payment at ./spec/models/spree/payment_spec.rb.#amount= when the locale uses a coma as a decimal separator amount uses a dot as a decimal separator #amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:24:3:5:1\"}}","rspec.Spree::Payment at ./spec/models/spree/payment_spec.rb.#build_source assigns user and gateway to payment source.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:20:2\"}}","rspec.Spree::Payment at ./spec/models/spree/payment_spec.rb.#build_source builds the payment's source.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:20:1\"}}","rspec.Spree::Payment at ./spec/models/spree/payment_spec.rb.#build_source does not build a new source when duplicating the model with source_attributes set.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:20:4\"}}","rspec.Spree::Payment at ./spec/models/spree/payment_spec.rb.#build_source errors when payment source not valid.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:20:3\"}}","rspec.Spree::Payment at ./spec/models/spree/payment_spec.rb.#build_source existing card assigns the existing card.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:20:5:1\"}}","rspec.Spree::Payment at ./spec/models/spree/payment_spec.rb.#can_credit? is false if credit_allowed is 0.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:2\"}}","rspec.Spree::Payment at ./spec/models/spree/payment_spec.rb.#can_credit? is true if credit_allowed > 0.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:1\"}}","rspec.Spree::Payment at ./spec/models/spree/payment_spec.rb.#captured_amount calculates based on capture events with 0 capture events.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1:1\"}}","rspec.Spree::Payment at ./spec/models/spree/payment_spec.rb.#captured_amount calculates based on capture events with some capture events.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1:2\"}}","rspec.Spree::Payment at ./spec/models/spree/payment_spec.rb.#credit_allowed is the difference between offsets total and payment amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:17:1\"}}","rspec.Spree::Payment at ./spec/models/spree/payment_spec.rb.#currency returns the order currency.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:21:1\"}}","rspec.Spree::Payment at ./spec/models/spree/payment_spec.rb.#display_amount returns a Spree::Money for this amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:22:1\"}}","rspec.Spree::Payment at ./spec/models/spree/payment_spec.rb.#display_source_name for source with display_name returns the display name of the source class.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:30:1:1\"}}","rspec.Spree::Payment at ./spec/models/spree/payment_spec.rb.#display_source_name for source without display_name returns the display name of the source class.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:30:2:1\"}}","rspec.Spree::Payment at ./spec/models/spree/payment_spec.rb.#editable? when the state is 'checkout' example at ./spec/models/spree/payment_spec.rb:1164.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:27:1:1\"}}","rspec.Spree::Payment at ./spec/models/spree/payment_spec.rb.#editable? when the state is 'completed' example at ./spec/models/spree/payment_spec.rb:1177.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:27:4:1\"}}","rspec.Spree::Payment at ./spec/models/spree/payment_spec.rb.#editable? when the state is 'failed' example at ./spec/models/spree/payment_spec.rb:1177.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:27:5:1\"}}","rspec.Spree::Payment at ./spec/models/spree/payment_spec.rb.#editable? when the state is 'invalid' example at ./spec/models/spree/payment_spec.rb:1177.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:27:7:1\"}}","rspec.Spree::Payment at ./spec/models/spree/payment_spec.rb.#editable? when the state is 'pending' example at ./spec/models/spree/payment_spec.rb:1170.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:27:2:1\"}}","rspec.Spree::Payment at ./spec/models/spree/payment_spec.rb.#editable? when the state is 'processing' example at ./spec/models/spree/payment_spec.rb:1177.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:27:3:1\"}}","rspec.Spree::Payment at ./spec/models/spree/payment_spec.rb.#editable? when the state is 'void' example at ./spec/models/spree/payment_spec.rb:1177.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:27:6:1\"}}","rspec.Spree::Payment at ./spec/models/spree/payment_spec.rb.#gateway_dashboard_payment_url returns nil.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:31:1\"}}","rspec.Spree::Payment at ./spec/models/spree/payment_spec.rb.#gateway_dashboard_payment_url when implemented returns the url.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:31:2:1\"}}","rspec.Spree::Payment at ./spec/models/spree/payment_spec.rb.#gateway_options contains an IP.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:23:1\"}}","rspec.Spree::Payment at ./spec/models/spree/payment_spec.rb.#gateway_options contains the email address from a persisted order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:23:2\"}}","rspec.Spree::Payment at ./spec/models/spree/payment_spec.rb.#gateway_processing_error_messages returns the gateway processing error messages.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:34:1\"}}","rspec.Spree::Payment at ./spec/models/spree/payment_spec.rb.#has_invalid_state? when the state is invalid example at ./spec/models/spree/payment_spec.rb:1306.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:33:1:1\"}}","rspec.Spree::Payment at ./spec/models/spree/payment_spec.rb.#has_invalid_state? when the state is valid example at ./spec/models/spree/payment_spec.rb:1312.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:33:2:1\"}}","rspec.Spree::Payment at ./spec/models/spree/payment_spec.rb.#save captured payments update order payment total.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:1:1\"}}","rspec.Spree::Payment at ./spec/models/spree/payment_spec.rb.#save completed orders updates payment_state and shipments.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:4:1\"}}","rspec.Spree::Payment at ./spec/models/spree/payment_spec.rb.#save not completed payments doesn't update order payment total.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:2:1\"}}","rspec.Spree::Payment at ./spec/models/spree/payment_spec.rb.#save not completed payments requires a payment method.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:2:2\"}}","rspec.Spree::Payment at ./spec/models/spree/payment_spec.rb.#save when profiles are not supported does not create a payment profile.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:6:1\"}}","rspec.Spree::Payment at ./spec/models/spree/payment_spec.rb.#save when profiles are supported when successfully connecting to the gateway creates a payment profile.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:5:3:1\"}}","rspec.Spree::Payment at ./spec/models/spree/payment_spec.rb.#save when profiles are supported when there is an error connecting to the gateway calls gateway_error.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:5:1:1\"}}","rspec.Spree::Payment at ./spec/models/spree/payment_spec.rb.#save when profiles are supported with multiple payment attempts does not try to create profiles on old failed payment attempts.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:5:2:1\"}}","rspec.Spree::Payment at ./spec/models/spree/payment_spec.rb.#save when the payment was completed but now void updates order payment total.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:3:1\"}}","rspec.Spree::Payment at ./spec/models/spree/payment_spec.rb.#source with source required disabled example at ./spec/models/spree/payment_spec.rb:1224.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:2:1\"}}","rspec.Spree::Payment at ./spec/models/spree/payment_spec.rb.#source with source required enabled example at ./spec/models/spree/payment_spec.rb:1207.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:1:1\"}}","rspec.Spree::Payment at ./spec/models/spree/payment_spec.rb.#source with source required enabled example at ./spec/models/spree/payment_spec.rb:1208.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:1:2\"}}","rspec.Spree::Payment at ./spec/models/spree/payment_spec.rb.#source with source required enabled when credit card is removed example at ./spec/models/spree/payment_spec.rb:1216.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:1:3:1\"}}","rspec.Spree::Payment at ./spec/models/spree/payment_spec.rb.#source with source required enabled when credit card is removed example at ./spec/models/spree/payment_spec.rb:1217.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:1:3:2\"}}","rspec.Spree::Payment at ./spec/models/spree/payment_spec.rb.#uncaptured_amount calculates based on capture events with 0 capture events.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1:1\"}}","rspec.Spree::Payment at ./spec/models/spree/payment_spec.rb.#uncaptured_amount calculates based on capture events with some capture events.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1:2\"}}","rspec.Spree::Payment at ./spec/models/spree/payment_spec.rb..risky does not return successful responses.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","rspec.Spree::Payment at ./spec/models/spree/payment_spec.rb.Callbacks #create_payment_profile when payment method supports profiles when source is a credit card creates a payment profile.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:2:1:1:1\"}}","rspec.Spree::Payment at ./spec/models/spree/payment_spec.rb.Callbacks #create_payment_profile when payment method supports profiles when source is not a credit card creates a payment profile.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:2:1:2:1\"}}","rspec.Spree::Payment at ./spec/models/spree/payment_spec.rb.Callbacks #update_order when destroying completed payment updates the order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1:1:1\"}}","rspec.Spree::Payment at ./spec/models/spree/payment_spec.rb.Callbacks #update_order when voiding a payment updates the order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1:2:1\"}}","rspec.Spree::Payment at ./spec/models/spree/payment_spec.rb.Constants example at ./spec/models/spree/payment_spec.rb:55.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","rspec.Spree::Payment at ./spec/models/spree/payment_spec.rb.Scopes .valid example at ./spec/models/spree/payment_spec.rb:78.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1\"}}","rspec.Spree::Payment at ./spec/models/spree/payment_spec.rb.Scopes .valid example at ./spec/models/spree/payment_spec.rb:79.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:2\"}}","rspec.Spree::Payment at ./spec/models/spree/payment_spec.rb.Scopes .valid example at ./spec/models/spree/payment_spec.rb:80.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:3\"}}","rspec.Spree::Payment at ./spec/models/spree/payment_spec.rb.Scopes .valid example at ./spec/models/spree/payment_spec.rb:81.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:4\"}}","rspec.Spree::Payment at ./spec/models/spree/payment_spec.rb.Validations amount validation with an associated order when the amount is greater than the max amount is invalid.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:4:1:1:1\"}}","rspec.Spree::Payment at ./spec/models/spree/payment_spec.rb.Validations amount validation with an associated order when the amount is less than the max amount example at ./spec/models/spree/payment_spec.rb:211.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:4:1:2:1\"}}","rspec.Spree::Payment at ./spec/models/spree/payment_spec.rb.Validations returns useful error messages when source is invalid.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:3\"}}","rspec.Spree::Payment at ./spec/models/spree/payment_spec.rb.Validations when payment source is not required do not validate source presence.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1:1\"}}","rspec.Spree::Payment at ./spec/models/spree/payment_spec.rb.Validations with payment source required validate source presence.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:2:1\"}}","rspec.Spree::Payment at ./spec/models/spree/payment_spec.rb.Validations with payment source required when skip_source_requirement is set to true does not validate source presence.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:2:2:1\"}}","rspec.Spree::Payment at ./spec/models/spree/payment_spec.rb.after_initialize :set_amount when associated with an order sets the amount to the order total minus the payment total.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:1\"}}","rspec.Spree::Payment at ./spec/models/spree/payment_spec.rb.after_initialize :set_amount when associated with an order when the amount is already set does not set the amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:2:1\"}}","rspec.Spree::Payment at ./spec/models/spree/payment_spec.rb.after_initialize :set_amount when not associated with an order does not set the amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1\"}}","rspec.Spree::Payment at ./spec/models/spree/payment_spec.rb.behaves like lifecycle events lifecycle events payment.created publishes created event when record is created.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","rspec.Spree::Payment at ./spec/models/spree/payment_spec.rb.behaves like lifecycle events lifecycle events payment.deleted publishes deleted event when record is deleted.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:1\"}}","rspec.Spree::Payment at ./spec/models/spree/payment_spec.rb.behaves like lifecycle events lifecycle events payment.updated publishes updated event when record is updated.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","rspec.Spree::Payment at ./spec/models/spree/payment_spec.rb.behaves like metadata can query records by metadata properties.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:10\"}}","rspec.Spree::Payment at ./spec/models/spree/payment_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:10.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:5\"}}","rspec.Spree::Payment at ./spec/models/spree/payment_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:11.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:6\"}}","rspec.Spree::Payment at ./spec/models/spree/payment_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:4.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.Spree::Payment at ./spec/models/spree/payment_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:5.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","rspec.Spree::Payment at ./spec/models/spree/payment_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:7.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3\"}}","rspec.Spree::Payment at ./spec/models/spree/payment_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:8.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:4\"}}","rspec.Spree::Payment at ./spec/models/spree/payment_spec.rb.behaves like metadata reads data as not symbolized keys.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:8\"}}","rspec.Spree::Payment at ./spec/models/spree/payment_spec.rb.behaves like metadata reads data as symbolized keys.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:7\"}}","rspec.Spree::Payment at ./spec/models/spree/payment_spec.rb.events completed state transition publishes payment.completed event.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:35:1:1\"}}","rspec.Spree::Payment at ./spec/models/spree/payment_spec.rb.events voided state transition publishes payment.voided event.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:35:2:1\"}}","rspec.Spree::Payment at ./spec/models/spree/payment_spec.rb.failure transitions to failed from pending state.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1\"}}","rspec.Spree::Payment at ./spec/models/spree/payment_spec.rb.failure transitions to failed from processing state.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2\"}}","rspec.Spree::Payment at ./spec/models/spree/payment_spec.rb.invalidate transitions from checkout to invalid.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:1\"}}","rspec.Spree::Payment at ./spec/models/spree/payment_spec.rb.is_avs_risky? returns false if avs_response included in NON_RISKY_AVS_CODES.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:25:1\"}}","rspec.Spree::Payment at ./spec/models/spree/payment_spec.rb.is_avs_risky? returns false if avs_response.blank?.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:25:2\"}}","rspec.Spree::Payment at ./spec/models/spree/payment_spec.rb.is_avs_risky? returns true if avs_response in RISKY_AVS_CODES.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:25:3\"}}","rspec.Spree::Payment at ./spec/models/spree/payment_spec.rb.is_cvv_risky? returns false if cvv_response_code == 'M'.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:26:1\"}}","rspec.Spree::Payment at ./spec/models/spree/payment_spec.rb.is_cvv_risky? returns false if cvv_response_code == nil.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:26:2\"}}","rspec.Spree::Payment at ./spec/models/spree/payment_spec.rb.is_cvv_risky? returns false if cvv_response_message == ''.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:26:3\"}}","rspec.Spree::Payment at ./spec/models/spree/payment_spec.rb.is_cvv_risky? returns true if cvv_response_code == [A-Z], omitting D.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:26:4\"}}","rspec.Spree::Payment at ./spec/models/spree/payment_spec.rb.processing #authorize! calls authorize on the gateway with the currency code.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:2:2\"}}","rspec.Spree::Payment at ./spec/models/spree/payment_spec.rb.processing #authorize! calls authorize on the gateway with the payment amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:2:1\"}}","rspec.Spree::Payment at ./spec/models/spree/payment_spec.rb.processing #authorize! if successful makes payment pending.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:2:4:2\"}}","rspec.Spree::Payment at ./spec/models/spree/payment_spec.rb.processing #authorize! if successful stores the response_code, avs_response and cvv_response fields.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:2:4:1\"}}","rspec.Spree::Payment at ./spec/models/spree/payment_spec.rb.processing #authorize! if unsuccessful when response is returned from gateway marks payment as failed.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:2:5:1:1\"}}","rspec.Spree::Payment at ./spec/models/spree/payment_spec.rb.processing #authorize! if unsuccessful when there is an error connecting to the gateway raises ActiveMerchant::ConnectionError and marks payment as failed.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:2:5:2:1\"}}","rspec.Spree::Payment at ./spec/models/spree/payment_spec.rb.processing #authorize! logs the response.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:2:3\"}}","rspec.Spree::Payment at ./spec/models/spree/payment_spec.rb.processing #capture! when payment is completed does nothing.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:5:2:1\"}}","rspec.Spree::Payment at ./spec/models/spree/payment_spec.rb.processing #capture! when payment is pending if successful for entire amount logs capture events.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:5:1:1:1:2\"}}","rspec.Spree::Payment at ./spec/models/spree/payment_spec.rb.processing #capture! when payment is pending if successful for entire amount makes payment complete.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:5:1:1:1:1\"}}","rspec.Spree::Payment at ./spec/models/spree/payment_spec.rb.processing #capture! when payment is pending if successful for partial amount logs capture events.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:5:1:1:2:2\"}}","rspec.Spree::Payment at ./spec/models/spree/payment_spec.rb.processing #capture! when payment is pending if successful for partial amount makes payment complete & create pending payment for remaining amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:5:1:1:2:1\"}}","rspec.Spree::Payment at ./spec/models/spree/payment_spec.rb.processing #capture! when payment is pending if unsuccessful when response is returned from gateway does not make payment complete.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:5:1:2:1:1\"}}","rspec.Spree::Payment at ./spec/models/spree/payment_spec.rb.processing #capture! when payment is pending if unsuccessful when there is an error connecting to the gateway raises ActiveMerchant::ConnectionError and marks payment as failed.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:5:1:2:2:1\"}}","rspec.Spree::Payment at ./spec/models/spree/payment_spec.rb.processing #confirm! for automatically captured payments logs a capture event.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:4:1:2\"}}","rspec.Spree::Payment at ./spec/models/spree/payment_spec.rb.processing #confirm! for automatically captured payments makes the payment complete.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:4:1:1\"}}","rspec.Spree::Payment at ./spec/models/spree/payment_spec.rb.processing #confirm! for automatically captured payments when payment is already completed does not log a duplicated capture event.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:4:1:3:2\"}}","rspec.Spree::Payment at ./spec/models/spree/payment_spec.rb.processing #confirm! for automatically captured payments when payment is already completed keeps the payment completed.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:4:1:3:1\"}}","rspec.Spree::Payment at ./spec/models/spree/payment_spec.rb.processing #confirm! for manually captured payments makes the payment pending.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:4:2:1\"}}","rspec.Spree::Payment at ./spec/models/spree/payment_spec.rb.processing #confirm! for manually captured payments when payment is already pending keeps the payment pending.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:4:2:2:1\"}}","rspec.Spree::Payment at ./spec/models/spree/payment_spec.rb.processing #process! allows payments with a gateway_customer_profile_id.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:1:5\"}}","rspec.Spree::Payment at ./spec/models/spree/payment_spec.rb.processing #process! allows payments with a gateway_payment_profile_id.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:1:6\"}}","rspec.Spree::Payment at ./spec/models/spree/payment_spec.rb.processing #process! authorizes without auto_capture.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:1:2\"}}","rspec.Spree::Payment at ./spec/models/spree/payment_spec.rb.processing #process! invalidates if payment method doesnt support source.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:1:4\"}}","rspec.Spree::Payment at ./spec/models/spree/payment_spec.rb.processing #process! makes the state 'processing'.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:1:3\"}}","rspec.Spree::Payment at ./spec/models/spree/payment_spec.rb.processing #process! purchases if with auto_capture.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:1:1\"}}","rspec.Spree::Payment at ./spec/models/spree/payment_spec.rb.processing #purchase! calls purchase on the gateway with the payment amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:3:1\"}}","rspec.Spree::Payment at ./spec/models/spree/payment_spec.rb.processing #purchase! if successful logs a capture event.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:3:3:3\"}}","rspec.Spree::Payment at ./spec/models/spree/payment_spec.rb.processing #purchase! if successful makes payment complete.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:3:3:2\"}}","rspec.Spree::Payment at ./spec/models/spree/payment_spec.rb.processing #purchase! if successful sets the uncaptured amount to 0.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:3:3:4\"}}","rspec.Spree::Payment at ./spec/models/spree/payment_spec.rb.processing #purchase! if successful stores the response_code and avs_response.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:3:3:1\"}}","rspec.Spree::Payment at ./spec/models/spree/payment_spec.rb.processing #purchase! if unsuccessful when response is returned from gateway does not log a capture event.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:3:4:1:2\"}}","rspec.Spree::Payment at ./spec/models/spree/payment_spec.rb.processing #purchase! if unsuccessful when response is returned from gateway makes payment failed.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:3:4:1:1\"}}","rspec.Spree::Payment at ./spec/models/spree/payment_spec.rb.processing #purchase! if unsuccessful when there is an error connecting to the gateway raises ActiveMerchant::ConnectionError and marks payment as failed.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:3:4:2:1\"}}","rspec.Spree::Payment at ./spec/models/spree/payment_spec.rb.processing #purchase! logs the response.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:3:2\"}}","rspec.Spree::Payment at ./spec/models/spree/payment_spec.rb.processing #void_transaction! if payment is already voided does not void the payment.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:6:6:1\"}}","rspec.Spree::Payment at ./spec/models/spree/payment_spec.rb.processing #void_transaction! if response_code is blank voids the payment without calling the gateway.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:6:7:1\"}}","rspec.Spree::Payment at ./spec/models/spree/payment_spec.rb.processing #void_transaction! if successful updates the response_code with the authorization from the gateway.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:6:4:1\"}}","rspec.Spree::Payment at ./spec/models/spree/payment_spec.rb.processing #void_transaction! if unsuccessful when response is returned from gateway does not void the payment.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:6:5:1:1\"}}","rspec.Spree::Payment at ./spec/models/spree/payment_spec.rb.processing #void_transaction! if unsuccessful when there is an error connecting to the gateway raises ActiveMerchant::ConnectionError and marks payment as failed.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:6:5:2:1\"}}","rspec.Spree::Payment at ./spec/models/spree/payment_spec.rb.processing #void_transaction! logs the response.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:6:3\"}}","rspec.Spree::Payment at ./spec/models/spree/payment_spec.rb.processing #void_transaction! when profiles are not supported calls payment_gateway.void with the payment's response_code.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:6:2:1\"}}","rspec.Spree::Payment at ./spec/models/spree/payment_spec.rb.processing #void_transaction! when profiles are supported calls payment_gateway.void with the payment's response_code.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:6:1:1\"}}","rspec.Spree::Payment at ./spec/models/spree/payment_spec.rb.state changes are logged to the database.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:28:1\"}}","rspec.Spree::Payment at ./spec/models/spree/payment_spec.rb.when already processing returns nil without trying to process the source.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:1\"}}","rspec.Spree::Payment at ./spec/models/spree/payment_spec.rb.with source optional raises no error if source is not specified example at ./spec/models/spree/payment_spec.rb:740.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:1:1\"}}","rspec.Spree::Payment at ./spec/models/spree/payment_spec.rb.with source required raises an error if no source is specified example at ./spec/models/spree/payment_spec.rb:727.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:1:1\"}}","rspec.Spree::Payment::CustomEvents at ./spec/models/spree/payment/custom_events_spec.rb.order.paid event does not publish order.paid when order still has outstanding balance.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","rspec.Spree::Payment::CustomEvents at ./spec/models/spree/payment/custom_events_spec.rb.order.paid event publishes order.paid when payment completes and order is fully paid.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.Spree::Payment::CustomEvents at ./spec/models/spree/payment/custom_events_spec.rb.payment.paid event does not publish payment.paid when state changes to something other than completed.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","rspec.Spree::Payment::CustomEvents at ./spec/models/spree/payment/custom_events_spec.rb.payment.paid event does not publish when events are disabled.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","rspec.Spree::Payment::CustomEvents at ./spec/models/spree/payment/custom_events_spec.rb.payment.paid event publishes payment.paid when payment state changes to completed.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::Payment::GatewayOptions at ./spec/models/spree/payment/gateway_options_spec.rb.#billing_address example at ./spec/models/spree/payment/gateway_options_spec.rb:128.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:1\"}}","rspec.Spree::Payment::GatewayOptions at ./spec/models/spree/payment/gateway_options_spec.rb.#currency example at ./spec/models/spree/payment/gateway_options_spec.rb:122.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:1\"}}","rspec.Spree::Payment::GatewayOptions at ./spec/models/spree/payment/gateway_options_spec.rb.#customer example at ./spec/models/spree/payment/gateway_options_spec.rb:74.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","rspec.Spree::Payment::GatewayOptions at ./spec/models/spree/payment/gateway_options_spec.rb.#customer_id example at ./spec/models/spree/payment/gateway_options_spec.rb:80.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","rspec.Spree::Payment::GatewayOptions at ./spec/models/spree/payment/gateway_options_spec.rb.#discount example at ./spec/models/spree/payment/gateway_options_spec.rb:116.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:1\"}}","rspec.Spree::Payment::GatewayOptions at ./spec/models/spree/payment/gateway_options_spec.rb.#email example at ./spec/models/spree/payment/gateway_options_spec.rb:68.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","rspec.Spree::Payment::GatewayOptions at ./spec/models/spree/payment/gateway_options_spec.rb.#ip example at ./spec/models/spree/payment/gateway_options_spec.rb:86.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","rspec.Spree::Payment::GatewayOptions at ./spec/models/spree/payment/gateway_options_spec.rb.#order example at ./spec/models/spree/payment/gateway_options_spec.rb:50.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::Payment::GatewayOptions at ./spec/models/spree/payment/gateway_options_spec.rb.#order_id example at ./spec/models/spree/payment/gateway_options_spec.rb:92.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1\"}}","rspec.Spree::Payment::GatewayOptions at ./spec/models/spree/payment/gateway_options_spec.rb.#payment example at ./spec/models/spree/payment/gateway_options_spec.rb:56.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.Spree::Payment::GatewayOptions at ./spec/models/spree/payment/gateway_options_spec.rb.#payment_id example at ./spec/models/spree/payment/gateway_options_spec.rb:62.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","rspec.Spree::Payment::GatewayOptions at ./spec/models/spree/payment/gateway_options_spec.rb.#shipping example at ./spec/models/spree/payment/gateway_options_spec.rb:98.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1\"}}","rspec.Spree::Payment::GatewayOptions at ./spec/models/spree/payment/gateway_options_spec.rb.#shipping_address example at ./spec/models/spree/payment/gateway_options_spec.rb:134.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:1\"}}","rspec.Spree::Payment::GatewayOptions at ./spec/models/spree/payment/gateway_options_spec.rb.#subtotal example at ./spec/models/spree/payment/gateway_options_spec.rb:110.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1\"}}","rspec.Spree::Payment::GatewayOptions at ./spec/models/spree/payment/gateway_options_spec.rb.#tax example at ./spec/models/spree/payment/gateway_options_spec.rb:104.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1\"}}","rspec.Spree::Payment::GatewayOptions at ./spec/models/spree/payment/gateway_options_spec.rb.#to_hash example at ./spec/models/spree/payment/gateway_options_spec.rb:158.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:1\"}}","rspec.Spree::PaymentMethod at ./spec/models/spree/payment_method_spec.rb.#auto_capture? when auto_capture is nil and when Spree::Config[:auto_capture] is false is false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1:1\"}}","rspec.Spree::PaymentMethod at ./spec/models/spree/payment_method_spec.rb.#auto_capture? when auto_capture is nil and when Spree::Config[:auto_capture] is true is true.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:2:1\"}}","rspec.Spree::PaymentMethod at ./spec/models/spree/payment_method_spec.rb.#auto_capture? when auto_capture is not nil and is false is true.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:2:1\"}}","rspec.Spree::PaymentMethod at ./spec/models/spree/payment_method_spec.rb.#auto_capture? when auto_capture is not nil and is true is true.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1:1\"}}","rspec.Spree::PaymentMethod at ./spec/models/spree/payment_method_spec.rb.#available_for_order? when the order is fully covered by store credit example at ./spec/models/spree/payment_method_spec.rb:148.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3:1\"}}","rspec.Spree::PaymentMethod at ./spec/models/spree/payment_method_spec.rb.#available_for_order? when the order is not covered by store credit example at ./spec/models/spree/payment_method_spec.rb:136.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1\"}}","rspec.Spree::PaymentMethod at ./spec/models/spree/payment_method_spec.rb.#available_for_order? when the order is partially covered by store credit example at ./spec/models/spree/payment_method_spec.rb:142.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1\"}}","rspec.Spree::PaymentMethod at ./spec/models/spree/payment_method_spec.rb.#available_for_store? returns false if currenct store id is not included.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2\"}}","rspec.Spree::PaymentMethod at ./spec/models/spree/payment_method_spec.rb.#available_for_store? returns true if currenct store id is included.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3\"}}","rspec.Spree::PaymentMethod at ./spec/models/spree/payment_method_spec.rb.#available_for_store? returns true when passed a nil value.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","rspec.Spree::PaymentMethod at ./spec/models/spree/payment_method_spec.rb.#payment_icon_name example at ./spec/models/spree/payment_method_spec.rb:185.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1\"}}","rspec.Spree::PaymentMethod at ./spec/models/spree/payment_method_spec.rb.#payment_source_class example at ./spec/models/spree/payment_method_spec.rb:181.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","rspec.Spree::PaymentMethod at ./spec/models/spree/payment_method_spec.rb.#source_required? example at ./spec/models/spree/payment_method_spec.rb:175.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","rspec.Spree::PaymentMethod at ./spec/models/spree/payment_method_spec.rb.behaves like metadata can query records by metadata properties.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:10\"}}","rspec.Spree::PaymentMethod at ./spec/models/spree/payment_method_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:10.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","rspec.Spree::PaymentMethod at ./spec/models/spree/payment_method_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:11.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","rspec.Spree::PaymentMethod at ./spec/models/spree/payment_method_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:4.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::PaymentMethod at ./spec/models/spree/payment_method_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:5.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","rspec.Spree::PaymentMethod at ./spec/models/spree/payment_method_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:7.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","rspec.Spree::PaymentMethod at ./spec/models/spree/payment_method_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:8.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","rspec.Spree::PaymentMethod at ./spec/models/spree/payment_method_spec.rb.behaves like metadata reads data as not symbolized keys.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8\"}}","rspec.Spree::PaymentMethod at ./spec/models/spree/payment_method_spec.rb.behaves like metadata reads data as symbolized keys.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7\"}}","rspec.Spree::PaymentMethod at ./spec/models/spree/payment_method_spec.rb.visibility scopes #available returns all methods available to front-end/back-end.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","rspec.Spree::PaymentMethod at ./spec/models/spree/payment_method_spec.rb.visibility scopes #available_on_back_end returns all methods available to back-end.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:4:1\"}}","rspec.Spree::PaymentMethod at ./spec/models/spree/payment_method_spec.rb.visibility scopes #available_on_front_end returns all methods available to front-end.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:1\"}}","rspec.Spree::PaymentMethod at ./spec/models/spree/payment_method_spec.rb.visibility scopes #for_store returns all methods available to front-end/back-end for a store.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:5:1\"}}","rspec.Spree::PaymentMethod at ./spec/models/spree/payment_method_spec.rb.visibility scopes has 5 total methods.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.Spree::PaymentMethod at ./spec/models/spree/payment_method_spec.rb.when payment method is destroyed destroys the payment method.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1\"}}","rspec.Spree::PaymentMethod::StoreCredit at ./spec/models/spree/payment_method/store_credit_spec.rb.#authorize when the currency does not match the order currency declines the credit.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","rspec.Spree::PaymentMethod::StoreCredit at ./spec/models/spree/payment_method/store_credit_spec.rb.#authorize with a valid request authorizes a valid store credit.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1\"}}","rspec.Spree::PaymentMethod::StoreCredit at ./spec/models/spree/payment_method/store_credit_spec.rb.#authorize with a valid request with an originator passes the originator.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:2:1\"}}","rspec.Spree::PaymentMethod::StoreCredit at ./spec/models/spree/payment_method/store_credit_spec.rb.#authorize with insuffient funds declines a store credit.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","rspec.Spree::PaymentMethod::StoreCredit at ./spec/models/spree/payment_method/store_credit_spec.rb.#authorize without an invalid store credit declines an unknown store credit.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","rspec.Spree::PaymentMethod::StoreCredit at ./spec/models/spree/payment_method/store_credit_spec.rb.#available_for_order? when order has a gift card example at ./spec/models/spree/payment_method/store_credit_spec.rb:316.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:3:1\"}}","rspec.Spree::PaymentMethod::StoreCredit at ./spec/models/spree/payment_method/store_credit_spec.rb.#available_for_order? when user don't store credits example at ./spec/models/spree/payment_method/store_credit_spec.rb:309.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2:1\"}}","rspec.Spree::PaymentMethod::StoreCredit at ./spec/models/spree/payment_method/store_credit_spec.rb.#available_for_order? when user have store credits example at ./spec/models/spree/payment_method/store_credit_spec.rb:302.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1:1\"}}","rspec.Spree::PaymentMethod::StoreCredit at ./spec/models/spree/payment_method/store_credit_spec.rb.#cancel store credit event found creates a store credit for the same amount that was captured.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1:1\"}}","rspec.Spree::PaymentMethod::StoreCredit at ./spec/models/spree/payment_method/store_credit_spec.rb.#cancel store credit event found returns a valid store credit cancel request.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1:2\"}}","rspec.Spree::PaymentMethod::StoreCredit at ./spec/models/spree/payment_method/store_credit_spec.rb.#cancel store credit event not found returns an error response.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2:1\"}}","rspec.Spree::PaymentMethod::StoreCredit at ./spec/models/spree/payment_method/store_credit_spec.rb.#capture when the currency does not match the order currency declines the credit.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:1\"}}","rspec.Spree::PaymentMethod::StoreCredit at ./spec/models/spree/payment_method/store_credit_spec.rb.#capture when unable to authorize the amount declines a store credit.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","rspec.Spree::PaymentMethod::StoreCredit at ./spec/models/spree/payment_method/store_credit_spec.rb.#capture with a valid request captures the store credit.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:4:1\"}}","rspec.Spree::PaymentMethod::StoreCredit at ./spec/models/spree/payment_method/store_credit_spec.rb.#capture with a valid request with an originator passes the originator.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:4:2:1\"}}","rspec.Spree::PaymentMethod::StoreCredit at ./spec/models/spree/payment_method/store_credit_spec.rb.#capture with an invalid auth code declines an unknown store credit.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","rspec.Spree::PaymentMethod::StoreCredit at ./spec/models/spree/payment_method/store_credit_spec.rb.#credit when the store credit isn't credited successfully returns an error response.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1\"}}","rspec.Spree::PaymentMethod::StoreCredit at ./spec/models/spree/payment_method/store_credit_spec.rb.#credit with a valid credit request credits a valid store credit credit request.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3:1\"}}","rspec.Spree::PaymentMethod::StoreCredit at ./spec/models/spree/payment_method/store_credit_spec.rb.#credit with an invalid auth code declines an unknown store credit.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:1\"}}","rspec.Spree::PaymentMethod::StoreCredit at ./spec/models/spree/payment_method/store_credit_spec.rb.#credit with an originator passes the originator.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:4:1\"}}","rspec.Spree::PaymentMethod::StoreCredit at ./spec/models/spree/payment_method/store_credit_spec.rb.#payment_source_class example at ./spec/models/spree/payment_method/store_credit_spec.rb:329.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1\"}}","rspec.Spree::PaymentMethod::StoreCredit at ./spec/models/spree/payment_method/store_credit_spec.rb.#purchase captures a purchase if it can find a pending credit for the correct amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2\"}}","rspec.Spree::PaymentMethod::StoreCredit at ./spec/models/spree/payment_method/store_credit_spec.rb.#purchase declines a purchase if it can't find a pending credit for the correct amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","rspec.Spree::PaymentMethod::StoreCredit at ./spec/models/spree/payment_method/store_credit_spec.rb.#source_required? example at ./spec/models/spree/payment_method/store_credit_spec.rb:323.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1\"}}","rspec.Spree::PaymentMethod::StoreCredit at ./spec/models/spree/payment_method/store_credit_spec.rb.#void voids a valid store credit void request.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3\"}}","rspec.Spree::PaymentMethod::StoreCredit at ./spec/models/spree/payment_method/store_credit_spec.rb.#void when the store credit is not voided successfully returns an error response.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","rspec.Spree::PaymentMethod::StoreCredit at ./spec/models/spree/payment_method/store_credit_spec.rb.#void with an invalid auth code declines an unknown store credit.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","rspec.Spree::PaymentMethod::StoreCredit at ./spec/models/spree/payment_method/store_credit_spec.rb.#void with an originator passes the originator.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4:1\"}}","rspec.Spree::PaymentSource at ./spec/models/spree/payment_source_spec.rb.#gateway_customer when user is not present returns nil.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","rspec.Spree::PaymentSource at ./spec/models/spree/payment_source_spec.rb.#gateway_customer when user is present returns the gateway customer for the user.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","rspec.Spree::Payments::Create at ./spec/services/spree/payments/create_spec.rb.invalid attributes example at ./spec/services/spree/payments/create_spec.rb:151.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","rspec.Spree::Payments::Create at ./spec/services/spree/payments/create_spec.rb.invalid attributes example at ./spec/services/spree/payments/create_spec.rb:152.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","rspec.Spree::Payments::Create at ./spec/services/spree/payments/create_spec.rb.missing payment method example at ./spec/services/spree/payments/create_spec.rb:131.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.Spree::Payments::Create at ./spec/services/spree/payments/create_spec.rb.missing payment method example at ./spec/services/spree/payments/create_spec.rb:132.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","rspec.Spree::Payments::Create at ./spec/services/spree/payments/create_spec.rb.valid attributes with existing source source assigned to a different user example at ./spec/services/spree/payments/create_spec.rb:93.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:1\"}}","rspec.Spree::Payments::Create at ./spec/services/spree/payments/create_spec.rb.valid attributes with existing source source assigned to a different user example at ./spec/services/spree/payments/create_spec.rb:94.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:2\"}}","rspec.Spree::Payments::Create at ./spec/services/spree/payments/create_spec.rb.valid attributes with existing source valid source creates new payment record.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1:1\"}}","rspec.Spree::Payments::Create at ./spec/services/spree/payments/create_spec.rb.valid attributes with existing source valid source example at ./spec/services/spree/payments/create_spec.rb:39.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1:2\"}}","rspec.Spree::Payments::Create at ./spec/services/spree/payments/create_spec.rb.valid attributes with existing source valid source example at ./spec/services/spree/payments/create_spec.rb:40.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1:3\"}}","rspec.Spree::Payments::Create at ./spec/services/spree/payments/create_spec.rb.valid attributes with existing source valid source example at ./spec/services/spree/payments/create_spec.rb:85.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1:4\"}}","rspec.Spree::Payments::Create at ./spec/services/spree/payments/create_spec.rb.valid attributes with new source attributes creates new payment record.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","rspec.Spree::Payments::Create at ./spec/services/spree/payments/create_spec.rb.valid attributes with new source attributes creates new payment source record.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:4\"}}","rspec.Spree::Payments::Create at ./spec/services/spree/payments/create_spec.rb.valid attributes with new source attributes example at ./spec/services/spree/payments/create_spec.rb:39.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2\"}}","rspec.Spree::Payments::Create at ./spec/services/spree/payments/create_spec.rb.valid attributes with new source attributes example at ./spec/services/spree/payments/create_spec.rb:40.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3\"}}","rspec.Spree::Payments::Create at ./spec/services/spree/payments/create_spec.rb.valid attributes with new source attributes with user assigns user example at ./spec/services/spree/payments/create_spec.rb:64.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:5:5:1\"}}","rspec.Spree::Payments::Create at ./spec/services/spree/payments/create_spec.rb.valid attributes with new source attributes with user creates new payment record.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:5:1\"}}","rspec.Spree::Payments::Create at ./spec/services/spree/payments/create_spec.rb.valid attributes with new source attributes with user creates new payment source record.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:5:4\"}}","rspec.Spree::Payments::Create at ./spec/services/spree/payments/create_spec.rb.valid attributes with new source attributes with user example at ./spec/services/spree/payments/create_spec.rb:39.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:5:2\"}}","rspec.Spree::Payments::Create at ./spec/services/spree/payments/create_spec.rb.valid attributes with new source attributes with user example at ./spec/services/spree/payments/create_spec.rb:40.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:5:3\"}}","rspec.Spree::Payments::Create at ./spec/services/spree/payments/create_spec.rb.valid attributes without source example at ./spec/services/spree/payments/create_spec.rb:110.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","rspec.Spree::Payments::Create at ./spec/services/spree/payments/create_spec.rb.valid attributes without source example at ./spec/services/spree/payments/create_spec.rb:111.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:2\"}}","rspec.Spree::PermissionConfiguration at ./spec/lib/spree/core/permission_configuration_spec.rb.#assign adds to existing permission sets when called multiple times.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","rspec.Spree::PermissionConfiguration at ./spec/lib/spree/core/permission_configuration_spec.rb.#assign assigns a single permission set to a role.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::PermissionConfiguration at ./spec/lib/spree/core/permission_configuration_spec.rb.#assign assigns multiple permission sets to a role.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","rspec.Spree::PermissionConfiguration at ./spec/lib/spree/core/permission_configuration_spec.rb.#assign does not duplicate permission sets.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","rspec.Spree::PermissionConfiguration at ./spec/lib/spree/core/permission_configuration_spec.rb.#assign normalizes role names to symbols.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","rspec.Spree::PermissionConfiguration at ./spec/lib/spree/core/permission_configuration_spec.rb.#clear removes all permission sets from a role.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.Spree::PermissionConfiguration at ./spec/lib/spree/core/permission_configuration_spec.rb.#clear returns nil for non-existent roles.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3\"}}","rspec.Spree::PermissionConfiguration at ./spec/lib/spree/core/permission_configuration_spec.rb.#clear returns the removed permission sets.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","rspec.Spree::PermissionConfiguration at ./spec/lib/spree/core/permission_configuration_spec.rb.#permission_sets_for normalizes role names.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3\"}}","rspec.Spree::PermissionConfiguration at ./spec/lib/spree/core/permission_configuration_spec.rb.#permission_sets_for returns an empty array for non-configured roles.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","rspec.Spree::PermissionConfiguration at ./spec/lib/spree/core/permission_configuration_spec.rb.#permission_sets_for returns the assigned permission sets.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","rspec.Spree::PermissionConfiguration at ./spec/lib/spree/core/permission_configuration_spec.rb.#permission_sets_for_roles combines permission sets from multiple roles.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","rspec.Spree::PermissionConfiguration at ./spec/lib/spree/core/permission_configuration_spec.rb.#permission_sets_for_roles deduplicates permission sets shared across roles.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2\"}}","rspec.Spree::PermissionConfiguration at ./spec/lib/spree/core/permission_configuration_spec.rb.#permission_sets_for_roles returns empty array when no roles have permission sets.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3\"}}","rspec.Spree::PermissionConfiguration at ./spec/lib/spree/core/permission_configuration_spec.rb.#reset! clears all role permissions.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","rspec.Spree::PermissionConfiguration at ./spec/lib/spree/core/permission_configuration_spec.rb.#role_configured? returns false for cleared roles.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:3\"}}","rspec.Spree::PermissionConfiguration at ./spec/lib/spree/core/permission_configuration_spec.rb.#role_configured? returns false for non-configured roles.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2\"}}","rspec.Spree::PermissionConfiguration at ./spec/lib/spree/core/permission_configuration_spec.rb.#role_configured? returns true for configured roles.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","rspec.Spree::PermissionConfiguration at ./spec/lib/spree/core/permission_configuration_spec.rb.#roles returns all configured roles.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","rspec.Spree::PermissionConfiguration at ./spec/lib/spree/core/permission_configuration_spec.rb.#roles returns empty array when no roles are configured.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2\"}}","rspec.Spree::PermissionSets::Base at ./spec/models/spree/permission_sets/base_spec.rb.#activate! raises NotImplementedError.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.Spree::PermissionSets::Base at ./spec/models/spree/permission_sets/base_spec.rb.#initialize stores the ability.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::PermissionSets::Base at ./spec/models/spree/permission_sets/base_spec.rb.delegation methods #can delegates to ability.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","rspec.Spree::PermissionSets::Base at ./spec/models/spree/permission_sets/base_spec.rb.delegation methods #can? delegates to ability.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3:1\"}}","rspec.Spree::PermissionSets::Base at ./spec/models/spree/permission_sets/base_spec.rb.delegation methods #cannot delegates to ability.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","rspec.Spree::PermissionSets::Base at ./spec/models/spree/permission_sets/base_spec.rb.delegation methods #store returns the store from the ability.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:5:1\"}}","rspec.Spree::PermissionSets::Base at ./spec/models/spree/permission_sets/base_spec.rb.delegation methods #user returns the user from the ability.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4:1\"}}","rspec.Spree::PermissionSets::DefaultCustomer at ./spec/models/spree/permission_sets/default_customer_spec.rb.#activate! address permissions allows managing own address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5:1\"}}","rspec.Spree::PermissionSets::DefaultCustomer at ./spec/models/spree/permission_sets/default_customer_spec.rb.#activate! address permissions prevents managing other user address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5:2\"}}","rspec.Spree::PermissionSets::DefaultCustomer at ./spec/models/spree/permission_sets/default_customer_spec.rb.#activate! address permissions with guest user (non-persisted) prevents guest user from editing other guest addresses (IDOR protection).{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5:3:2\"}}","rspec.Spree::PermissionSets::DefaultCustomer at ./spec/models/spree/permission_sets/default_customer_spec.rb.#activate! address permissions with guest user (non-persisted) prevents guest user from managing addresses with nil user_id (IDOR protection).{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5:3:1\"}}","rspec.Spree::PermissionSets::DefaultCustomer at ./spec/models/spree/permission_sets/default_customer_spec.rb.#activate! address permissions with guest user (non-persisted) prevents guest user from reading other guest addresses (IDOR protection).{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5:3:4\"}}","rspec.Spree::PermissionSets::DefaultCustomer at ./spec/models/spree/permission_sets/default_customer_spec.rb.#activate! address permissions with guest user (non-persisted) prevents guest user from updating other guest addresses (IDOR protection).{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5:3:3\"}}","rspec.Spree::PermissionSets::DefaultCustomer at ./spec/models/spree/permission_sets/default_customer_spec.rb.#activate! admin permissions does not grant admin access.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8:1\"}}","rspec.Spree::PermissionSets::DefaultCustomer at ./spec/models/spree/permission_sets/default_customer_spec.rb.#activate! admin permissions does not grant manage access to Product.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8:2\"}}","rspec.Spree::PermissionSets::DefaultCustomer at ./spec/models/spree/permission_sets/default_customer_spec.rb.#activate! catalog read access grants read access to Country.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","rspec.Spree::PermissionSets::DefaultCustomer at ./spec/models/spree/permission_sets/default_customer_spec.rb.#activate! catalog read access grants read access to Product.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2\"}}","rspec.Spree::PermissionSets::DefaultCustomer at ./spec/models/spree/permission_sets/default_customer_spec.rb.#activate! catalog read access grants read access to Store.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:5\"}}","rspec.Spree::PermissionSets::DefaultCustomer at ./spec/models/spree/permission_sets/default_customer_spec.rb.#activate! catalog read access grants read access to Taxon.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:4\"}}","rspec.Spree::PermissionSets::DefaultCustomer at ./spec/models/spree/permission_sets/default_customer_spec.rb.#activate! catalog read access grants read access to Variant.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3\"}}","rspec.Spree::PermissionSets::DefaultCustomer at ./spec/models/spree/permission_sets/default_customer_spec.rb.#activate! credit card permissions allows destroying own credit card.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6:2\"}}","rspec.Spree::PermissionSets::DefaultCustomer at ./spec/models/spree/permission_sets/default_customer_spec.rb.#activate! credit card permissions allows reading own credit card.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6:1\"}}","rspec.Spree::PermissionSets::DefaultCustomer at ./spec/models/spree/permission_sets/default_customer_spec.rb.#activate! credit card permissions prevents reading other user credit card.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6:3\"}}","rspec.Spree::PermissionSets::DefaultCustomer at ./spec/models/spree/permission_sets/default_customer_spec.rb.#activate! order permissions allows creating orders.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","rspec.Spree::PermissionSets::DefaultCustomer at ./spec/models/spree/permission_sets/default_customer_spec.rb.#activate! order permissions with token allows updating incomplete order with correct token.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:3:2\"}}","rspec.Spree::PermissionSets::DefaultCustomer at ./spec/models/spree/permission_sets/default_customer_spec.rb.#activate! order permissions with token allows viewing order with correct token.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:3:1\"}}","rspec.Spree::PermissionSets::DefaultCustomer at ./spec/models/spree/permission_sets/default_customer_spec.rb.#activate! order permissions with token prevents viewing order with incorrect token.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:3:3\"}}","rspec.Spree::PermissionSets::DefaultCustomer at ./spec/models/spree/permission_sets/default_customer_spec.rb.#activate! order permissions with user order allows updating own incomplete order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:2\"}}","rspec.Spree::PermissionSets::DefaultCustomer at ./spec/models/spree/permission_sets/default_customer_spec.rb.#activate! order permissions with user order allows viewing own order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:1\"}}","rspec.Spree::PermissionSets::DefaultCustomer at ./spec/models/spree/permission_sets/default_customer_spec.rb.#activate! order permissions with user order prevents updating own completed order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:3\"}}","rspec.Spree::PermissionSets::DefaultCustomer at ./spec/models/spree/permission_sets/default_customer_spec.rb.#activate! user account permissions allows creating new user.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:5\"}}","rspec.Spree::PermissionSets::DefaultCustomer at ./spec/models/spree/permission_sets/default_customer_spec.rb.#activate! user account permissions allows destroying own user.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:3\"}}","rspec.Spree::PermissionSets::DefaultCustomer at ./spec/models/spree/permission_sets/default_customer_spec.rb.#activate! user account permissions allows updating own user.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:2\"}}","rspec.Spree::PermissionSets::DefaultCustomer at ./spec/models/spree/permission_sets/default_customer_spec.rb.#activate! user account permissions allows viewing own user.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","rspec.Spree::PermissionSets::DefaultCustomer at ./spec/models/spree/permission_sets/default_customer_spec.rb.#activate! user account permissions prevents viewing other user.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:4\"}}","rspec.Spree::PermissionSets::DefaultCustomer at ./spec/models/spree/permission_sets/default_customer_spec.rb.#activate! wishlist permissions allows managing own wishlist.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7:1\"}}","rspec.Spree::PermissionSets::DefaultCustomer at ./spec/models/spree/permission_sets/default_customer_spec.rb.#activate! wishlist permissions allows viewing public wishlist.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7:2\"}}","rspec.Spree::PermissionSets::DefaultCustomer at ./spec/models/spree/permission_sets/default_customer_spec.rb.#activate! wishlist permissions prevents viewing private wishlist.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7:3\"}}","rspec.Spree::PermissionSets::DefaultCustomer at ./spec/models/spree/permission_sets/default_customer_spec.rb.#activate! with non-persisted user allows updating self.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:2\"}}","rspec.Spree::PermissionSets::DefaultCustomer at ./spec/models/spree/permission_sets/default_customer_spec.rb.#activate! with non-persisted user allows viewing self.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1\"}}","rspec.Spree::PermissionSets::OrderManagement at ./spec/models/spree/permission_sets/order_management_spec.rb.#activate! does not grant manage access to Product.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:10\"}}","rspec.Spree::PermissionSets::OrderManagement at ./spec/models/spree/permission_sets/order_management_spec.rb.#activate! grants manage access to Adjustment.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","rspec.Spree::PermissionSets::OrderManagement at ./spec/models/spree/permission_sets/order_management_spec.rb.#activate! grants manage access to CustomerReturn.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7\"}}","rspec.Spree::PermissionSets::OrderManagement at ./spec/models/spree/permission_sets/order_management_spec.rb.#activate! grants manage access to LineItem.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","rspec.Spree::PermissionSets::OrderManagement at ./spec/models/spree/permission_sets/order_management_spec.rb.#activate! grants manage access to Order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::PermissionSets::OrderManagement at ./spec/models/spree/permission_sets/order_management_spec.rb.#activate! grants manage access to Payment.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","rspec.Spree::PermissionSets::OrderManagement at ./spec/models/spree/permission_sets/order_management_spec.rb.#activate! grants manage access to Refund.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:9\"}}","rspec.Spree::PermissionSets::OrderManagement at ./spec/models/spree/permission_sets/order_management_spec.rb.#activate! grants manage access to Reimbursement.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8\"}}","rspec.Spree::PermissionSets::OrderManagement at ./spec/models/spree/permission_sets/order_management_spec.rb.#activate! grants manage access to ReturnAuthorization.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","rspec.Spree::PermissionSets::OrderManagement at ./spec/models/spree/permission_sets/order_management_spec.rb.#activate! grants manage access to Shipment.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","rspec.Spree::PermissionSets::OrderManagement at ./spec/models/spree/permission_sets/order_management_spec.rb.#activate! order restrictions allows canceling orders that allow cancellation.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:11:1\"}}","rspec.Spree::PermissionSets::OrderManagement at ./spec/models/spree/permission_sets/order_management_spec.rb.#activate! order restrictions allows destroying orders that can be deleted.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:11:3\"}}","rspec.Spree::PermissionSets::OrderManagement at ./spec/models/spree/permission_sets/order_management_spec.rb.#activate! order restrictions prevents canceling orders that do not allow cancellation.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:11:2\"}}","rspec.Spree::PermissionSets::OrderManagement at ./spec/models/spree/permission_sets/order_management_spec.rb.#activate! order restrictions prevents destroying orders that cannot be deleted.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:11:4\"}}","rspec.Spree::PermissionSets::ProductManagement at ./spec/models/spree/permission_sets/product_management_spec.rb.#activate! does not grant manage access to Order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:11\"}}","rspec.Spree::PermissionSets::ProductManagement at ./spec/models/spree/permission_sets/product_management_spec.rb.#activate! does not grant manage access to User.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:12\"}}","rspec.Spree::PermissionSets::ProductManagement at ./spec/models/spree/permission_sets/product_management_spec.rb.#activate! grants manage access to Classification.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:9\"}}","rspec.Spree::PermissionSets::ProductManagement at ./spec/models/spree/permission_sets/product_management_spec.rb.#activate! grants manage access to OptionType.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","rspec.Spree::PermissionSets::ProductManagement at ./spec/models/spree/permission_sets/product_management_spec.rb.#activate! grants manage access to OptionValue.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","rspec.Spree::PermissionSets::ProductManagement at ./spec/models/spree/permission_sets/product_management_spec.rb.#activate! grants manage access to Price.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:10\"}}","rspec.Spree::PermissionSets::ProductManagement at ./spec/models/spree/permission_sets/product_management_spec.rb.#activate! grants manage access to Product.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::PermissionSets::ProductManagement at ./spec/models/spree/permission_sets/product_management_spec.rb.#activate! grants manage access to ProductProperty.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","rspec.Spree::PermissionSets::ProductManagement at ./spec/models/spree/permission_sets/product_management_spec.rb.#activate! grants manage access to Property.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","rspec.Spree::PermissionSets::ProductManagement at ./spec/models/spree/permission_sets/product_management_spec.rb.#activate! grants manage access to Taxon.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7\"}}","rspec.Spree::PermissionSets::ProductManagement at ./spec/models/spree/permission_sets/product_management_spec.rb.#activate! grants manage access to Taxonomy.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8\"}}","rspec.Spree::PermissionSets::ProductManagement at ./spec/models/spree/permission_sets/product_management_spec.rb.#activate! grants manage access to Variant.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","rspec.Spree::PermissionSets::SuperUser at ./spec/models/spree/permission_sets/super_user_spec.rb.#activate! admin role protection allows destroying other roles.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6:4\"}}","rspec.Spree::PermissionSets::SuperUser at ./spec/models/spree/permission_sets/super_user_spec.rb.#activate! admin role protection allows updating other roles.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6:3\"}}","rspec.Spree::PermissionSets::SuperUser at ./spec/models/spree/permission_sets/super_user_spec.rb.#activate! admin role protection prevents destroying the admin role.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6:2\"}}","rspec.Spree::PermissionSets::SuperUser at ./spec/models/spree/permission_sets/super_user_spec.rb.#activate! admin role protection prevents updating the admin role.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6:1\"}}","rspec.Spree::PermissionSets::SuperUser at ./spec/models/spree/permission_sets/super_user_spec.rb.#activate! grants manage access to Order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","rspec.Spree::PermissionSets::SuperUser at ./spec/models/spree/permission_sets/super_user_spec.rb.#activate! grants manage access to Product.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","rspec.Spree::PermissionSets::SuperUser at ./spec/models/spree/permission_sets/super_user_spec.rb.#activate! grants manage access to all resources.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::PermissionSets::SuperUser at ./spec/models/spree/permission_sets/super_user_spec.rb.#activate! immutable types allows editing mutable refund reasons.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5:1\"}}","rspec.Spree::PermissionSets::SuperUser at ./spec/models/spree/permission_sets/super_user_spec.rb.#activate! immutable types prevents editing immutable refund reasons.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5:2\"}}","rspec.Spree::PermissionSets::SuperUser at ./spec/models/spree/permission_sets/super_user_spec.rb.#activate! order restrictions allows canceling orders that allow cancellation.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1\"}}","rspec.Spree::PermissionSets::SuperUser at ./spec/models/spree/permission_sets/super_user_spec.rb.#activate! order restrictions allows destroying orders that can be deleted.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:3\"}}","rspec.Spree::PermissionSets::SuperUser at ./spec/models/spree/permission_sets/super_user_spec.rb.#activate! order restrictions prevents canceling orders that do not allow cancellation.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:2\"}}","rspec.Spree::PermissionSets::SuperUser at ./spec/models/spree/permission_sets/super_user_spec.rb.#activate! order restrictions prevents destroying orders that cannot be deleted.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:4\"}}","rspec.Spree::Policy at ./spec/models/spree/policy_spec.rb.Scopes .for_store for policies with a different owner type returns policies for the store and the user policy.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:2:1\"}}","rspec.Spree::Policy at ./spec/models/spree/policy_spec.rb.Scopes .for_store returns policies for specific store.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1\"}}","rspec.Spree::Policy at ./spec/models/spree/policy_spec.rb.Scopes .with_matching_name does not find policy with partial match.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:2\"}}","rspec.Spree::Policy at ./spec/models/spree/policy_spec.rb.Scopes .with_matching_name finds policy by exact name match (case insensitive).{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1\"}}","rspec.Spree::Policy at ./spec/models/spree/policy_spec.rb.Scopes .with_matching_name returns empty when no match found.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:4\"}}","rspec.Spree::Policy at ./spec/models/spree/policy_spec.rb.Scopes .with_matching_name strips whitespace from search term.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:3\"}}","rspec.Spree::Policy at ./spec/models/spree/policy_spec.rb.Translations has translatable name field.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","rspec.Spree::Policy at ./spec/models/spree/policy_spec.rb.Translations supports translations for name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","rspec.Spree::Policy at ./spec/models/spree/policy_spec.rb.Translations when always_use_translations is enabled allows creating policies with translations.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3:1\"}}","rspec.Spree::Policy at ./spec/models/spree/policy_spec.rb.Validations owner presence is invalid without an owner.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","rspec.Spree::Policy at ./spec/models/spree/policy_spec.rb.Validations slug uniqueness allows same slug for different stores.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","rspec.Spree::Policy at ./spec/models/spree/policy_spec.rb.friendly_id generates friendly URLs from slug.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.Spree::Policy at ./spec/models/spree/policy_spec.rb.friendly_id maintains slug history.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","rspec.Spree::Policy at ./spec/models/spree/policy_spec.rb.friendly_id when the policy is destroyed fully destroys the slug.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:1\"}}","rspec.Spree::Post at ./spec/models/spree/post_spec.rb.#author_name returns the author name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","rspec.Spree::Post at ./spec/models/spree/post_spec.rb.#author_name when author is deleted returns the author name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","rspec.Spree::Post at ./spec/models/spree/post_spec.rb.Validations image validates content type.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","rspec.Spree::Post at ./spec/models/spree/post_spec.rb.Validations slug validates uniqueness.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","rspec.Spree::Post at ./spec/models/spree/post_spec.rb.behaves like lifecycle events lifecycle events post.created publishes created event when record is created.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","rspec.Spree::Post at ./spec/models/spree/post_spec.rb.behaves like lifecycle events lifecycle events post.deleted publishes deleted event when record is deleted.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:1\"}}","rspec.Spree::Post at ./spec/models/spree/post_spec.rb.behaves like lifecycle events lifecycle events post.updated publishes updated event when record is updated.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","rspec.Spree::PostCategory at ./spec/models/spree/post_category_spec.rb.Associations posts has many posts.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","rspec.Spree::PostCategory at ./spec/models/spree/post_category_spec.rb.Associations posts nullifies posts when destroyed.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:2\"}}","rspec.Spree::PostCategory at ./spec/models/spree/post_category_spec.rb.FriendlyId #should_generate_new_friendly_id? returns false when slug is present and title unchanged.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:3\"}}","rspec.Spree::PostCategory at ./spec/models/spree/post_category_spec.rb.FriendlyId #should_generate_new_friendly_id? returns true when slug is blank.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","rspec.Spree::PostCategory at ./spec/models/spree/post_category_spec.rb.FriendlyId #should_generate_new_friendly_id? returns true when title has changed.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:2\"}}","rspec.Spree::PostCategory at ./spec/models/spree/post_category_spec.rb.FriendlyId #slug_candidates returns correct slug candidates.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","rspec.Spree::PostCategory at ./spec/models/spree/post_category_spec.rb.behaves like lifecycle events lifecycle events post_category.created publishes created event when record is created.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","rspec.Spree::PostCategory at ./spec/models/spree/post_category_spec.rb.behaves like lifecycle events lifecycle events post_category.deleted publishes deleted event when record is deleted.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:1\"}}","rspec.Spree::PostCategory at ./spec/models/spree/post_category_spec.rb.behaves like lifecycle events lifecycle events post_category.updated publishes updated event when record is updated.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","rspec.Spree::Preference at ./spec/models/spree/preference_spec.rb.requires a key.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","rspec.Spree::Preference at ./spec/models/spree/preference_spec.rb.type conversion for values :any.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:8\"}}","rspec.Spree::Preference at ./spec/models/spree/preference_spec.rb.type conversion for values :boolean.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.Spree::Preference at ./spec/models/spree/preference_spec.rb.type conversion for values :decimal.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:4\"}}","rspec.Spree::Preference at ./spec/models/spree/preference_spec.rb.type conversion for values :integer.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3\"}}","rspec.Spree::Preference at ./spec/models/spree/preference_spec.rb.type conversion for values :password.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:7\"}}","rspec.Spree::Preference at ./spec/models/spree/preference_spec.rb.type conversion for values :string.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:5\"}}","rspec.Spree::Preference at ./spec/models/spree/preference_spec.rb.type conversion for values :text.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:6\"}}","rspec.Spree::Preference at ./spec/models/spree/preference_spec.rb.type conversion for values false :boolean.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","rspec.Spree::Preferences::Configuration at ./spec/models/spree/preferences/configuration_spec.rb.has named methods to access preferences.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","rspec.Spree::Preferences::Configuration at ./spec/models/spree/preferences/configuration_spec.rb.uses [ ] to access preferences.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2\"}}","rspec.Spree::Preferences::Configuration at ./spec/models/spree/preferences/configuration_spec.rb.uses set/get to access preferences.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3\"}}","rspec.Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb.persisted preferables clear preferences when record is deleted.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3\"}}","rspec.Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb.persisted preferables clear preferences.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","rspec.Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb.persisted preferables pending preferences for new activerecord objects saves preferences after record is saved.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","rspec.Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb.persisted preferables pending preferences for new activerecord objects saves preferences for serialized object.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:2\"}}","rspec.Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb.persisted preferables preference change tracking methods reports no changes when preference is set to same value.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4:3\"}}","rspec.Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb.persisted preferables preference change tracking methods tracks changes to array preferences.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4:4\"}}","rspec.Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb.persisted preferables preference change tracking methods tracks changes to preferences.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4:1\"}}","rspec.Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb.persisted preferables preference change tracking methods tracks previous changes after save.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4:2\"}}","rspec.Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb.preference access builds a array of deprecated preferences.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:6\"}}","rspec.Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb.preference access builds a hash of preference defaults.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:5\"}}","rspec.Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb.preference access builds a hash of preferences.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:4\"}}","rspec.Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb.preference access converts any preferences to any values with array.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:14:1\"}}","rspec.Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb.preference access converts any preferences to any values with hash.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:14:2\"}}","rspec.Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb.preference access converts array preferences to array values with arrays.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:12:1\"}}","rspec.Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb.preference access converts array preferences to array values with hash.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:12:3\"}}","rspec.Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb.preference access converts array preferences to array values with string.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:12:2\"}}","rspec.Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb.preference access converts boolean preferences to boolean values with an empty hash.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:11:4\"}}","rspec.Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb.preference access converts boolean preferences to boolean values with an empty string.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:11:3\"}}","rspec.Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb.preference access converts boolean preferences to boolean values with integers.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:11:2\"}}","rspec.Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb.preference access converts boolean preferences to boolean values with strings.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:11:1\"}}","rspec.Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb.preference access converts decimal preferences to BigDecimal values returns a BigDecimal.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:9:1\"}}","rspec.Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb.preference access converts decimal preferences to BigDecimal values with strings.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:9:2\"}}","rspec.Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb.preference access converts hash preferences to hash values with a nested array.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:13:6\"}}","rspec.Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb.preference access converts hash preferences to hash values with boolean.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:13:4\"}}","rspec.Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb.preference access converts hash preferences to hash values with hash and keys are integers.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:13:2\"}}","rspec.Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb.preference access converts hash preferences to hash values with hash.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:13:1\"}}","rspec.Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb.preference access converts hash preferences to hash values with simple array.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:13:5\"}}","rspec.Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb.preference access converts hash preferences to hash values with single array.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:13:7\"}}","rspec.Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb.preference access converts hash preferences to hash values with string.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:13:3\"}}","rspec.Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb.preference access converts integer preferences to integer values with strings.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:7:1\"}}","rspec.Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb.preference access converts nullable decimal preferences converts string to BigDecimal when present.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:10:3\"}}","rspec.Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb.preference access converts nullable decimal preferences preserves decimal values.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:10:4\"}}","rspec.Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb.preference access converts nullable decimal preferences stores nil when set to empty string.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:10:1\"}}","rspec.Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb.preference access converts nullable decimal preferences stores nil when set to nil.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:10:2\"}}","rspec.Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb.preference access converts nullable integer preferences converts string to integer when present.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:8:3\"}}","rspec.Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb.preference access converts nullable integer preferences preserves integer values.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:8:4\"}}","rspec.Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb.preference access converts nullable integer preferences stores nil when set to empty string.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:8:1\"}}","rspec.Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb.preference access converts nullable integer preferences stores nil when set to nil.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:8:2\"}}","rspec.Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb.preference access handles ghost methods for preferences.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb.preference access parent and child instances have their own prefs.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","rspec.Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb.preference access raises when preference not defined.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3\"}}","rspec.Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb.preference definitions can be asked and raises.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","rspec.Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb.preference definitions can be asked if it has a preference definition.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","rspec.Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb.preference definitions can have a deprecation message.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8\"}}","rspec.Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb.preference definitions child should have parent and own definitions.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","rspec.Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb.preference definitions has a default.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7\"}}","rspec.Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb.preference definitions has a type.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","rspec.Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb.preference definitions instances have defaults.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","rspec.Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb.preference definitions parent should not see child definitions.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb.preference definitions raises if not defined.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:9\"}}","rspec.Spree::Preferences::RuntimeConfiguration at ./spec/models/spree/preferences/runtime_configuration_spec.rb.#get returns default value if present.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::Preferences::RuntimeConfiguration at ./spec/models/spree/preferences/runtime_configuration_spec.rb.#get returns nil if not present.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","rspec.Spree::Preferences::RuntimeConfiguration at ./spec/models/spree/preferences/runtime_configuration_spec.rb.#get returns value via a hash accessor.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","rspec.Spree::Preferences::RuntimeConfiguration at ./spec/models/spree/preferences/runtime_configuration_spec.rb.#get returns value via an attribute accessor.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","rspec.Spree::Preferences::RuntimeConfiguration at ./spec/models/spree/preferences/runtime_configuration_spec.rb.#set overrides the default value.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.Spree::Preferences::RuntimeConfiguration at ./spec/models/spree/preferences/runtime_configuration_spec.rb.#set sets the value via an attribute accessor.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3\"}}","rspec.Spree::Preferences::RuntimeConfiguration at ./spec/models/spree/preferences/runtime_configuration_spec.rb.#set sets value if not set previously.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","rspec.Spree::Preferences::RuntimeConfiguration at ./spec/models/spree/preferences/runtime_configuration_spec.rb.#set sets value via a hash accessor.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:4\"}}","rspec.Spree::Preferences::ScopedStore at ./spec/models/spree/preferences/scoped_store_spec.rb.#store example at ./spec/models/spree/preferences/scoped_store_spec.rb:14.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::Preferences::ScopedStore at ./spec/models/spree/preferences/scoped_store_spec.rb.stubbed store with a prefix and suffix can assign.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:4:2\"}}","rspec.Spree::Preferences::ScopedStore at ./spec/models/spree/preferences/scoped_store_spec.rb.stubbed store with a prefix and suffix can delete.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:4:3\"}}","rspec.Spree::Preferences::ScopedStore at ./spec/models/spree/preferences/scoped_store_spec.rb.stubbed store with a prefix and suffix can fetch.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:4:1\"}}","rspec.Spree::Preferences::ScopedStore at ./spec/models/spree/preferences/scoped_store_spec.rb.stubbed store with a prefix can assign.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:2\"}}","rspec.Spree::Preferences::ScopedStore at ./spec/models/spree/preferences/scoped_store_spec.rb.stubbed store with a prefix can delete.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:3\"}}","rspec.Spree::Preferences::ScopedStore at ./spec/models/spree/preferences/scoped_store_spec.rb.stubbed store with a prefix can fetch.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","rspec.Spree::Preferences::Store at ./spec/models/spree/preferences/store_spec.rb.can set and get false values when cache return nil.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2\"}}","rspec.Spree::Preferences::Store at ./spec/models/spree/preferences/store_spec.rb.returns nil when key can't be found and fallback value is not supplied.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6\"}}","rspec.Spree::Preferences::Store at ./spec/models/spree/preferences/store_spec.rb.sets and gets a key.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","rspec.Spree::Price at ./spec/models/spree/price_spec.rb.#amount= is expected to equal to localized number.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","rspec.Spree::Price at ./spec/models/spree/price_spec.rb.#compare_at_amount= is expected to equal to localized number.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","rspec.Spree::Price at ./spec/models/spree/price_spec.rb.#compare_at_amount= with empty string being passed as value casts value to nil.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1\"}}","rspec.Spree::Price at ./spec/models/spree/price_spec.rb.#compare_at_price when amount is changed is expected to equal to price.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1:1\"}}","rspec.Spree::Price at ./spec/models/spree/price_spec.rb.#compare_at_price_including_vat_for(zone) when called from the default zone returns the correct price.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:2:1\"}}","rspec.Spree::Price at ./spec/models/spree/price_spec.rb.#compare_at_price_including_vat_for(zone) when called with a non-default zone returns the correct price including another VAT to two digits.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1:1\"}}","rspec.Spree::Price at ./spec/models/spree/price_spec.rb.#compare_at_price_including_vat_for(zone) when no default zone is set returns the correct price.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:3:1\"}}","rspec.Spree::Price at ./spec/models/spree/price_spec.rb.#discounted? when compare at amount is higher example at ./spec/models/spree/price_spec.rb:329.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:1:1\"}}","rspec.Spree::Price at ./spec/models/spree/price_spec.rb.#discounted? when compare at amount is lower example at ./spec/models/spree/price_spec.rb:334.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:2:1\"}}","rspec.Spree::Price at ./spec/models/spree/price_spec.rb.#discounted? when compare at amount is the same example at ./spec/models/spree/price_spec.rb:339.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:3:1\"}}","rspec.Spree::Price at ./spec/models/spree/price_spec.rb.#discounted? when there is no compare at amount example at ./spec/models/spree/price_spec.rb:344.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:4:1\"}}","rspec.Spree::Price at ./spec/models/spree/price_spec.rb.#display_compare_at_price_including_vat_for(zone) calls #price_including_vat_for.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1\"}}","rspec.Spree::Price at ./spec/models/spree/price_spec.rb.#display_price_including_vat_for(zone) calls #price_including_vat_for.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1\"}}","rspec.Spree::Price at ./spec/models/spree/price_spec.rb.#price when amount is changed is expected to equal to price.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:1\"}}","rspec.Spree::Price at ./spec/models/spree/price_spec.rb.#price_including_vat_for(zone) when called from the default zone returns the correct price.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2:1\"}}","rspec.Spree::Price at ./spec/models/spree/price_spec.rb.#price_including_vat_for(zone) when called with a non-default zone returns the correct price including another VAT to two digits.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1:1\"}}","rspec.Spree::Price at ./spec/models/spree/price_spec.rb.#price_including_vat_for(zone) when no default zone is set returns the correct price.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:3:1\"}}","rspec.Spree::Price at ./spec/models/spree/price_spec.rb.Callbacks after_commit :auto_match_taxons when price is discounted on create auto matches taxons.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1:1:1\"}}","rspec.Spree::Price at ./spec/models/spree/price_spec.rb.Callbacks after_commit :auto_match_taxons when price is discounted on update and changed to not be discounted auto matches taxons.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1:2:1:1\"}}","rspec.Spree::Price at ./spec/models/spree/price_spec.rb.Callbacks after_commit :auto_match_taxons when price is discounted on update and is still discounted does not touch shop product.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1:2:2:1\"}}","rspec.Spree::Price at ./spec/models/spree/price_spec.rb.Callbacks after_commit :auto_match_taxons when price is not discounted on create auto matches taxons.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:2:1:1\"}}","rspec.Spree::Price at ./spec/models/spree/price_spec.rb.Callbacks after_commit :auto_match_taxons when price is not discounted on update and changed to be discounted auto matches taxons.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:2:2:1:1\"}}","rspec.Spree::Price at ./spec/models/spree/price_spec.rb.Callbacks after_commit :auto_match_taxons when price is not discounted on update and is still not discounted does not touch shop product.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:2:2:2:1\"}}","rspec.Spree::Price at ./spec/models/spree/price_spec.rb.Callbacks when compare_at_amount is equal to amount sets compare_at_amount to nil.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","rspec.Spree::Price at ./spec/models/spree/price_spec.rb.behaves like lifecycle events lifecycle events price.created publishes created event when record is created.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","rspec.Spree::Price at ./spec/models/spree/price_spec.rb.behaves like lifecycle events lifecycle events price.deleted publishes deleted event when record is deleted.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:1\"}}","rspec.Spree::Price at ./spec/models/spree/price_spec.rb.behaves like lifecycle events lifecycle events price.updated publishes updated event when record is updated.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","rspec.Spree::Price at ./spec/models/spree/price_spec.rb.validations when the amount is between 0 and the maximum amount example at ./spec/models/spree/price_spec.rb:199.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:4:1\"}}","rspec.Spree::Price at ./spec/models/spree/price_spec.rb.validations when the amount is greater than maximum amount has 1 error on amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:3:1\"}}","rspec.Spree::Price at ./spec/models/spree/price_spec.rb.validations when the amount is greater than maximum amount populates errors.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:3:2\"}}","rspec.Spree::Price at ./spec/models/spree/price_spec.rb.validations when the amount is less than 0 has 1 error on amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2:1\"}}","rspec.Spree::Price at ./spec/models/spree/price_spec.rb.validations when the amount is less than 0 populates errors.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2:2\"}}","rspec.Spree::Price at ./spec/models/spree/price_spec.rb.validations when the amount is nil legacy behavior example at ./spec/models/spree/price_spec.rb:164.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1:1:1\"}}","rspec.Spree::Price at ./spec/models/spree/price_spec.rb.validations when the amount is nil new behavior example at ./spec/models/spree/price_spec.rb:168.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1:2:1\"}}","rspec.Spree::PriceList at ./spec/models/spree/price_list_spec.rb.#active? returns false when status is not active.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2\"}}","rspec.Spree::PriceList at ./spec/models/spree/price_list_spec.rb.#active? returns true when status is active.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","rspec.Spree::PriceList at ./spec/models/spree/price_list_spec.rb.#add_products creates prices for all supported currencies.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2\"}}","rspec.Spree::PriceList at ./spec/models/spree/price_list_spec.rb.#add_products creates prices for all variants of the given products.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","rspec.Spree::PriceList at ./spec/models/spree/price_list_spec.rb.#add_products creates prices with nil amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:3\"}}","rspec.Spree::PriceList at ./spec/models/spree/price_list_spec.rb.#add_products does not create duplicate prices for existing variants.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:4\"}}","rspec.Spree::PriceList at ./spec/models/spree/price_list_spec.rb.#add_products enqueues a job to touch affected variants.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:5\"}}","rspec.Spree::PriceList at ./spec/models/spree/price_list_spec.rb.#add_products handles empty product_ids.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:7\"}}","rspec.Spree::PriceList at ./spec/models/spree/price_list_spec.rb.#add_products handles nil product_ids.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:8\"}}","rspec.Spree::PriceList at ./spec/models/spree/price_list_spec.rb.#add_products touches the price list to bust cache.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:6\"}}","rspec.Spree::PriceList at ./spec/models/spree/price_list_spec.rb.#add_products when price already has amount set does not overwrite existing price with amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:11:1\"}}","rspec.Spree::PriceList at ./spec/models/spree/price_list_spec.rb.#add_products when price already has amount set only creates prices for missing currencies.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:11:2\"}}","rspec.Spree::PriceList at ./spec/models/spree/price_list_spec.rb.#add_products with deleted variants only creates prices for non-deleted variants.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:12:1\"}}","rspec.Spree::PriceList at ./spec/models/spree/price_list_spec.rb.#add_products with non-existent product IDs creates prices only for existing products.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:10:2\"}}","rspec.Spree::PriceList at ./spec/models/spree/price_list_spec.rb.#add_products with non-existent product IDs handles gracefully without error.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:10:1\"}}","rspec.Spree::PriceList at ./spec/models/spree/price_list_spec.rb.#add_products with products having multiple variants creates prices for all eligible variants.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:9:1\"}}","rspec.Spree::PriceList at ./spec/models/spree/price_list_spec.rb.#applicable? when price list is inactive returns false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1\"}}","rspec.Spree::PriceList at ./spec/models/spree/price_list_spec.rb.#applicable? when price list is outside date range returns false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1\"}}","rspec.Spree::PriceList at ./spec/models/spree/price_list_spec.rb.#applicable? with rules and match_policy = all returns false if any rule fails.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3:1\"}}","rspec.Spree::PriceList at ./spec/models/spree/price_list_spec.rb.#applicable? with rules and match_policy = any returns true if any rule passes.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:4:1\"}}","rspec.Spree::PriceList at ./spec/models/spree/price_list_spec.rb.#bulk_update_prices clears amount when user removes existing value.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:3\"}}","rspec.Spree::PriceList at ./spec/models/spree/price_list_spec.rb.#bulk_update_prices clears compare_at_amount when it equals amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2\"}}","rspec.Spree::PriceList at ./spec/models/spree/price_list_spec.rb.#bulk_update_prices enqueues a job to touch affected variants.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:6\"}}","rspec.Spree::PriceList at ./spec/models/spree/price_list_spec.rb.#bulk_update_prices returns true for empty attributes.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:7\"}}","rspec.Spree::PriceList at ./spec/models/spree/price_list_spec.rb.#bulk_update_prices skips entries without id.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:8\"}}","rspec.Spree::PriceList at ./spec/models/spree/price_list_spec.rb.#bulk_update_prices skips prices where nothing changed.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:4\"}}","rspec.Spree::PriceList at ./spec/models/spree/price_list_spec.rb.#bulk_update_prices updates prices in bulk using upsert_all.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1\"}}","rspec.Spree::PriceList at ./spec/models/spree/price_list_spec.rb.#bulk_update_prices updates when only compare_at_amount changed.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:5\"}}","rspec.Spree::PriceList at ./spec/models/spree/price_list_spec.rb.#remove_products does not remove prices for other products.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:3\"}}","rspec.Spree::PriceList at ./spec/models/spree/price_list_spec.rb.#remove_products enqueues a job to touch affected variants.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:7\"}}","rspec.Spree::PriceList at ./spec/models/spree/price_list_spec.rb.#remove_products handles empty product_ids.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:4\"}}","rspec.Spree::PriceList at ./spec/models/spree/price_list_spec.rb.#remove_products handles nil product_ids.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:5\"}}","rspec.Spree::PriceList at ./spec/models/spree/price_list_spec.rb.#remove_products removes all prices for the given products.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","rspec.Spree::PriceList at ./spec/models/spree/price_list_spec.rb.#remove_products removes prices for all currencies.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2\"}}","rspec.Spree::PriceList at ./spec/models/spree/price_list_spec.rb.#remove_products removes prices for multiple products at once.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:6\"}}","rspec.Spree::PriceList at ./spec/models/spree/price_list_spec.rb.#remove_products touches the price list to bust cache.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:8\"}}","rspec.Spree::PriceList at ./spec/models/spree/price_list_spec.rb.#remove_products when re-adding a previously removed product allows re-adding a product that had prices with amounts set.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:9:2\"}}","rspec.Spree::PriceList at ./spec/models/spree/price_list_spec.rb.#remove_products when re-adding a previously removed product allows re-adding a product with empty prices.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:9:1\"}}","rspec.Spree::PriceList at ./spec/models/spree/price_list_spec.rb.Validations date range validation validates starts_at is before ends_at.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","rspec.Spree::PriceList at ./spec/models/spree/price_list_spec.rb.scopes .by_position returns price lists ordered by position ascending.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4:1\"}}","rspec.Spree::PriceList at ./spec/models/spree/price_list_spec.rb.scopes .current accepts a timezone parameter.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:6:2\"}}","rspec.Spree::PriceList at ./spec/models/spree/price_list_spec.rb.scopes .current returns only price lists within date range.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:6:1\"}}","rspec.Spree::PriceList at ./spec/models/spree/price_list_spec.rb.scopes .for_store returns only price lists for the specified store.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:5:1\"}}","rspec.Spree::PriceList at ./spec/models/spree/price_list_spec.rb.scopes .with_status(:active) returns only active price lists.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","rspec.Spree::PriceList at ./spec/models/spree/price_list_spec.rb.scopes .with_status(:inactive) returns only inactive price lists.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","rspec.Spree::PriceList at ./spec/models/spree/price_list_spec.rb.scopes .with_status(:scheduled) returns only scheduled price lists.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3:1\"}}","rspec.Spree::PriceList at ./spec/models/spree/price_list_spec.rb.state_machine #activate transitions to active.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","rspec.Spree::PriceList at ./spec/models/spree/price_list_spec.rb.state_machine #deactivate transitions to inactive.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:1\"}}","rspec.Spree::PriceList at ./spec/models/spree/price_list_spec.rb.state_machine #schedule transitions to scheduled.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:4:1\"}}","rspec.Spree::PriceList at ./spec/models/spree/price_list_spec.rb.state_machine has initial status of draft.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.Spree::PriceRules::CustomerGroupRule at ./spec/models/spree/price_rules/customer_group_rule_spec.rb.#applicable? when customer_group_ids preference contains strings returns true when context user is in the customer group.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","rspec.Spree::PriceRules::CustomerGroupRule at ./spec/models/spree/price_rules/customer_group_rule_spec.rb.#applicable? when customer_group_ids preference is empty returns false when user is not present.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2\"}}","rspec.Spree::PriceRules::CustomerGroupRule at ./spec/models/spree/price_rules/customer_group_rule_spec.rb.#applicable? when customer_group_ids preference is empty returns true when user is present.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","rspec.Spree::PriceRules::CustomerGroupRule at ./spec/models/spree/price_rules/customer_group_rule_spec.rb.#applicable? when customer_group_ids preference is set returns false when context has no user.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:3\"}}","rspec.Spree::PriceRules::CustomerGroupRule at ./spec/models/spree/price_rules/customer_group_rule_spec.rb.#applicable? when customer_group_ids preference is set returns false when context user is not in the customer group.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2\"}}","rspec.Spree::PriceRules::CustomerGroupRule at ./spec/models/spree/price_rules/customer_group_rule_spec.rb.#applicable? when customer_group_ids preference is set returns true when context user is in the customer group.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","rspec.Spree::PriceRules::CustomerGroupRule at ./spec/models/spree/price_rules/customer_group_rule_spec.rb.#applicable? with multiple customer groups configured returns false when context user is not in any of the customer groups.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:2\"}}","rspec.Spree::PriceRules::CustomerGroupRule at ./spec/models/spree/price_rules/customer_group_rule_spec.rb.#applicable? with multiple customer groups configured returns true when context user is in any of the customer groups.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1\"}}","rspec.Spree::PriceRules::CustomerGroupRule at ./spec/models/spree/price_rules/customer_group_rule_spec.rb..description returns the translated description.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.Spree::PriceRules::UserRule at ./spec/models/spree/price_rules/user_rule_spec.rb.#applicable? when user_ids preference contains strings returns false when context user does not match.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:2\"}}","rspec.Spree::PriceRules::UserRule at ./spec/models/spree/price_rules/user_rule_spec.rb.#applicable? when user_ids preference contains strings returns true when context user matches.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","rspec.Spree::PriceRules::UserRule at ./spec/models/spree/price_rules/user_rule_spec.rb.#applicable? when user_ids preference is empty returns true when user is present.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","rspec.Spree::PriceRules::UserRule at ./spec/models/spree/price_rules/user_rule_spec.rb.#applicable? when user_ids preference is set returns false when context has no user.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:3\"}}","rspec.Spree::PriceRules::UserRule at ./spec/models/spree/price_rules/user_rule_spec.rb.#applicable? when user_ids preference is set returns false when context user does not match.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2\"}}","rspec.Spree::PriceRules::UserRule at ./spec/models/spree/price_rules/user_rule_spec.rb.#applicable? when user_ids preference is set returns true when context user matches.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","rspec.Spree::PriceRules::VolumeRule at ./spec/models/spree/price_rules/volume_rule_spec.rb.#applicable? returns false when quantity is below minimum.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","rspec.Spree::PriceRules::VolumeRule at ./spec/models/spree/price_rules/volume_rule_spec.rb.#applicable? returns false when quantity is nil.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:4\"}}","rspec.Spree::PriceRules::VolumeRule at ./spec/models/spree/price_rules/volume_rule_spec.rb.#applicable? returns true when quantity meets minimum.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.Spree::PriceRules::VolumeRule at ./spec/models/spree/price_rules/volume_rule_spec.rb.#applicable? with max_quantity set returns false when quantity exceeds maximum.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:2\"}}","rspec.Spree::PriceRules::VolumeRule at ./spec/models/spree/price_rules/volume_rule_spec.rb.#applicable? with max_quantity set returns true when quantity is within range.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:1\"}}","rspec.Spree::PriceRules::VolumeRule at ./spec/models/spree/price_rules/volume_rule_spec.rb.max_quantity preference preserves nil max_quantity.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","rspec.Spree::PriceRules::VolumeRule at ./spec/models/spree/price_rules/volume_rule_spec.rb.max_quantity preference preserves non-zero max_quantity.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","rspec.Spree::PriceRules::VolumeRule at ./spec/models/spree/price_rules/volume_rule_spec.rb.max_quantity preference stores nil when set to empty string.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::PriceRules::ZoneRule at ./spec/models/spree/price_rules/zone_rule_spec.rb.#applicable? when zone_ids preference contains strings returns false when context zone does not match.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:2\"}}","rspec.Spree::PriceRules::ZoneRule at ./spec/models/spree/price_rules/zone_rule_spec.rb.#applicable? when zone_ids preference contains strings returns true when context zone matches.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","rspec.Spree::PriceRules::ZoneRule at ./spec/models/spree/price_rules/zone_rule_spec.rb.#applicable? when zone_ids preference is empty returns true for any zone.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","rspec.Spree::PriceRules::ZoneRule at ./spec/models/spree/price_rules/zone_rule_spec.rb.#applicable? when zone_ids preference is set returns false when context has no zone.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:3\"}}","rspec.Spree::PriceRules::ZoneRule at ./spec/models/spree/price_rules/zone_rule_spec.rb.#applicable? when zone_ids preference is set returns false when context zone does not match.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2\"}}","rspec.Spree::PriceRules::ZoneRule at ./spec/models/spree/price_rules/zone_rule_spec.rb.#applicable? when zone_ids preference is set returns true when context zone matches.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","rspec.Spree::Pricing::Context at ./spec/lib/spree/core/pricing/context_spec.rb.#cache_key with all attributes generates a cache key with all components.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1\"}}","rspec.Spree::Pricing::Context at ./spec/lib/spree/core/pricing/context_spec.rb.#cache_key with minimal attributes generates a cache key with default values from Spree::Current.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1\"}}","rspec.Spree::Pricing::Context at ./spec/lib/spree/core/pricing/context_spec.rb.#cache_key with some optional attributes includes present optional attributes in correct order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3:1\"}}","rspec.Spree::Pricing::Context at ./spec/lib/spree/core/pricing/context_spec.rb.#initialize when Spree::Current.store is set uses Spree::Current.store as default.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","rspec.Spree::Pricing::Context at ./spec/lib/spree/core/pricing/context_spec.rb.#initialize when Spree::Current.zone is set uses Spree::Current.zone as default.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1\"}}","rspec.Spree::Pricing::Context at ./spec/lib/spree/core/pricing/context_spec.rb.#initialize with all parameters sets all attributes.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","rspec.Spree::Pricing::Context at ./spec/lib/spree/core/pricing/context_spec.rb.#initialize with minimal parameters defaults date to current time.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:6\"}}","rspec.Spree::Pricing::Context at ./spec/lib/spree/core/pricing/context_spec.rb.#initialize with minimal parameters defaults quantity to nil.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:5\"}}","rspec.Spree::Pricing::Context at ./spec/lib/spree/core/pricing/context_spec.rb.#initialize with minimal parameters defaults store to Spree::Current.store.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2\"}}","rspec.Spree::Pricing::Context at ./spec/lib/spree/core/pricing/context_spec.rb.#initialize with minimal parameters defaults user to nil.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:4\"}}","rspec.Spree::Pricing::Context at ./spec/lib/spree/core/pricing/context_spec.rb.#initialize with minimal parameters defaults zone to Spree::Current.zone.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:3\"}}","rspec.Spree::Pricing::Context at ./spec/lib/spree/core/pricing/context_spec.rb.#initialize with minimal parameters sets required attributes.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","rspec.Spree::Pricing::Context at ./spec/lib/spree/core/pricing/context_spec.rb..from_currency creates a context with variant and currency.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.Spree::Pricing::Context at ./spec/lib/spree/core/pricing/context_spec.rb..from_currency uses default store.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","rspec.Spree::Pricing::Context at ./spec/lib/spree/core/pricing/context_spec.rb..from_order sets currency from order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","rspec.Spree::Pricing::Context at ./spec/lib/spree/core/pricing/context_spec.rb..from_order sets order reference.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:5\"}}","rspec.Spree::Pricing::Context at ./spec/lib/spree/core/pricing/context_spec.rb..from_order sets quantity from line item.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:6\"}}","rspec.Spree::Pricing::Context at ./spec/lib/spree/core/pricing/context_spec.rb..from_order sets store from order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3\"}}","rspec.Spree::Pricing::Context at ./spec/lib/spree/core/pricing/context_spec.rb..from_order sets user from order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4\"}}","rspec.Spree::Pricing::Context at ./spec/lib/spree/core/pricing/context_spec.rb..from_order sets variant from parameter.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","rspec.Spree::Pricing::Context at ./spec/lib/spree/core/pricing/context_spec.rb..from_order when variant is not in order sets quantity to nil.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:10:1\"}}","rspec.Spree::Pricing::Context at ./spec/lib/spree/core/pricing/context_spec.rb..from_order with explicit quantity parameter uses the provided quantity.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:9:1\"}}","rspec.Spree::Pricing::Context at ./spec/lib/spree/core/pricing/context_spec.rb..from_order with zone from order tax_zone sets zone from order tax_zone.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:7:1\"}}","rspec.Spree::Pricing::Context at ./spec/lib/spree/core/pricing/context_spec.rb..from_order with zone from store checkout_zone sets zone from store checkout_zone.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:8:1\"}}","rspec.Spree::Pricing::Resolver at ./spec/lib/spree/pricing/resolver_spec.rb.#resolve when no base price exists returns a new unpersisted price object.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7:1\"}}","rspec.Spree::Pricing::Resolver at ./spec/lib/spree/pricing/resolver_spec.rb.#resolve when no matching price list exists falls back to base price.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","rspec.Spree::Pricing::Resolver at ./spec/lib/spree/pricing/resolver_spec.rb.#resolve when no price lists exist returns the base price.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","rspec.Spree::Pricing::Resolver at ./spec/lib/spree/pricing/resolver_spec.rb.#resolve with applicable price list returns the price list price.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","rspec.Spree::Pricing::Resolver at ./spec/lib/spree/pricing/resolver_spec.rb.#resolve with date range price list returns base price when outside date range.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5:2\"}}","rspec.Spree::Pricing::Resolver at ./spec/lib/spree/pricing/resolver_spec.rb.#resolve with date range price list returns price list price when within date range.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5:1\"}}","rspec.Spree::Pricing::Resolver at ./spec/lib/spree/pricing/resolver_spec.rb.#resolve with multiple applicable price lists returns the first position price list price.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1\"}}","rspec.Spree::Pricing::Resolver at ./spec/lib/spree/pricing/resolver_spec.rb.#resolve with price list from different store does not return price from other store price list.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8:1\"}}","rspec.Spree::Pricing::Resolver at ./spec/lib/spree/pricing/resolver_spec.rb.#resolve with volume-based pricing returns base price when quantity threshold not met.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6:2\"}}","rspec.Spree::Pricing::Resolver at ./spec/lib/spree/pricing/resolver_spec.rb.#resolve with volume-based pricing returns bulk price when quantity threshold met.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6:1\"}}","rspec.Spree::Product at ./spec/models/spree/product/normalizes_spec.rb.normalizes :name converts empty string to nil.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","rspec.Spree::Product at ./spec/models/spree/product/normalizes_spec.rb.normalizes :name handles nil value.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","rspec.Spree::Product at ./spec/models/spree/product/normalizes_spec.rb.normalizes :name squishes multiple spaces.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","rspec.Spree::Product at ./spec/models/spree/product/normalizes_spec.rb.normalizes :name strips leading and trailing whitespace.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::Product at ./spec/models/spree/product/normalizes_spec.rb.normalizes :name with always_use_translations enabled creates a product with translated name without NotNullViolation.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5:1\"}}","rspec.Spree::Product at ./spec/models/spree/product/normalizes_spec.rb.normalizes :name with always_use_translations enabled normalizes translated names across locales.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5:2\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.#any_variant_available? with variants when all variants are available example at ./spec/models/spree/product_spec.rb:1498.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:38:2:1:1\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.#any_variant_available? with variants when no variants are available example at ./spec/models/spree/product_spec.rb:1504.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:38:2:2:1\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.#any_variant_available? without variants when master variant is available example at ./spec/models/spree/product_spec.rb:1474.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:38:1:1:1\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.#any_variant_available? without variants when master variant is not available example at ./spec/models/spree/product_spec.rb:1480.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:38:1:2:1\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.#any_variant_in_stock_or_backorderable? #digital? when product does not have a shipping method with DigitalDelivery calculator example at ./spec/models/spree/product_spec.rb:1261.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:32:3:2:1\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.#any_variant_in_stock_or_backorderable? #digital? when product has a shipping method with DigitalDelivery calculator example at ./spec/models/spree/product_spec.rb:1255.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:32:3:1:1\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.#any_variant_in_stock_or_backorderable? when only master variant is in stock or backorderable example at ./spec/models/spree/product_spec.rb:1204.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:32:1:1\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.#any_variant_in_stock_or_backorderable? with more variants aside from the master variant when all non-master variant stock items have count_on_hand <= 0 example at ./spec/models/spree/product_spec.rb:1228.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:32:2:2:1\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.#any_variant_in_stock_or_backorderable? with more variants aside from the master variant when all non-master variant stock items have count_on_hand <= 0 when all non-master variant stock items have track_inventory = false example at ./spec/models/spree/product_spec.rb:1233.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:32:2:2:2:1\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.#any_variant_in_stock_or_backorderable? with more variants aside from the master variant when all non-master variant stock items have count_on_hand <= 0 when all non-master variant stock items have track_inventory = true example at ./spec/models/spree/product_spec.rb:1237.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:32:2:2:3:1\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.#any_variant_in_stock_or_backorderable? with more variants aside from the master variant when all non-master variant stock items have count_on_hand <= 0 when all non-master variant stock items have track_inventory = true when all non-master variant stock items have backorderable = true example at ./spec/models/spree/product_spec.rb:1242.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:32:2:2:3:2:1\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.#any_variant_in_stock_or_backorderable? with more variants aside from the master variant with at least one non-master variant stock items count_on_hand > 0 example at ./spec/models/spree/product_spec.rb:1222.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:32:2:1:1\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.#backordered? returns false when out of stock and not backorderable.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:2\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.#backordered? returns false when there is available item in stock.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:3\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.#backordered? returns true when out of stock and backorderable.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:1\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.#brand when brand association is defined uses the brand association.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:2:1\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.#brand when brand association is not defined falls back to brand_taxon.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:1:1\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.#brand when brand association is not defined returns brand name via brand_name method.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:1:2\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.#brand_taxon fetches Brand Taxon.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:1\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.#category when category association is defined checks for the category association.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:2:1\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.#category when category association is not defined falls back to category_taxon.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:1:1\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.#category_taxon fetches Category Taxon.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:17:1\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.#create when prototype is supplied creates properties based on the prototype.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1:1\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.#create when prototype with option types is supplied creates option types based on the prototype.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2:1\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.#create when prototype with option types is supplied creates product option types based on the prototype.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2:2\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.#create when prototype with option types is supplied creates variants from an option values hash with multiple option types.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2:5\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.#create when prototype with option types is supplied creates variants from an option values hash with one option type.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2:3\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.#create when prototype with option types is supplied stills create variants when option_values_hash is given but prototype id is nil.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2:4\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.#create when track inventory is disabled creates a default stock item.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:3:1\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.#default_image when master has images returns the master image.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:23:1:1\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.#default_image when master has images with variants that also have images returns the master image (master takes priority).{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:23:1:2:1\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.#default_image when master has no images but variant does returns the variant image.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:23:2:1\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.#default_image when no variants have images returns nil.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:23:3:1\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.#default_variant track inventory levels product has variants backorderable returns first non-master backorderable variant.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:21:1:1:2:1\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.#default_variant track inventory levels product has variants in stock returns first non-master in stock variant.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:21:1:1:1:1\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.#default_variant track inventory levels product has variants product without variants in stock or backorerable returns first non-master variant.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:21:1:1:3:1\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.#default_variant track inventory levels product without variants returns master variant.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:21:1:3:1\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.#default_variant track inventory levels without tracking inventory levels returns first non-master variant.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:21:1:2:1\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.#default_variant_id product has variants returns first non-master variant ID.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:22:1:1\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.#default_variant_id product without variants returns master variant ID.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:22:2:1\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.#discontinue! changes updated_at.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:3\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.#discontinue! sets the discontinued.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:1\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.#discontinue! sets the status to archived.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:2\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.#discontinued? is false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:1\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.#discontinued? is true.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:2\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.#ensure_not_in_complete_orders adds error on product destroy.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:20:1\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.#ensure_store_presence no store passed auto-assigns store.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:30:1:1\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.#ensure_store_presence store passed does not auto-assign store.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:30:2:1\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.#ensure_store_presence validation disabled preference set example at ./spec/models/spree/product_spec.rb:1177.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:30:3:1:1\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.#first_available_variant returns the first available variant.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:36:1\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.#first_or_default_variant with a variant in the given currency returns the available variant in the given currency.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:35:2:1\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.#first_or_default_variant with all variants in different currencies returns the first variant.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:35:3:1\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.#first_or_default_variant without variants returns the default variant.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:35:1:1\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.#has_images? when any variant has images returns true.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:25:3:1\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.#has_images? when master has images but default_variant does not returns true (checks all variants).{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:25:2:1\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.#has_images? when no variants have images returns false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:25:1:1\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.#has_variant_images? when a variant has images returns true.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:24:3:1\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.#has_variant_images? when master has images returns true.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:24:2:1\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.#has_variant_images? when no variants have images returns false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:24:1:1\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.#has_variant_images? when variant_images are preloaded but empty returns false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:24:5:1\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.#has_variant_images? when variant_images are preloaded uses loaded association.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:24:4:1\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.#has_variants? when variants are loaded in memory uses the loaded association instead of variant_count.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:43:3:1\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.#has_variants? with variants has variant_count of 1.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:43:2:2\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.#has_variants? with variants returns true.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:43:2:1\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.#has_variants? without variants has variant_count of 0.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:43:1:2\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.#has_variants? without variants returns false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:43:1:1\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.#image_count when master has images returns the master image count.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:26:2:1\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.#image_count when master has images when variant also has images returns master image count (master takes priority).{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:26:2:2:1\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.#image_count when no variants have images returns 0.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:26:1:1\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.#image_count when only variant has images returns the variant image count.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:26:3:1\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.#images is sorted by position.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.#images only looks for variant images.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.#lowest_price returns the lowest price.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:39:1\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.#on_sale? when at least one variant is on sale returns true.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:34:1:1\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.#on_sale? when no variant is on sale returns false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:34:2:1\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.#price_varies? when all variants have the same price in the given currency example at ./spec/models/spree/product_spec.rb:1447.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:37:1:1\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.#price_varies? when variants have different prices in the given currency example at ./spec/models/spree/product_spec.rb:1456.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:37:2:1\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.#secondary_image when images are on a non-master variant returns the second image from that variant.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:28:4:1\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.#secondary_image when no variants have images returns nil.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:28:1:1\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.#secondary_image when variant has multiple images returns the second image.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:28:3:1\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.#secondary_image when variant has only one image returns nil.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:28:2:1\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.#taxons_for_store returns product taxons for specified store.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:31:1\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.#to_csv when product has no variants returns an array with one line of CSV data.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:33:1:1\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.#to_csv when product has variants returns an array with CSV data for each variant including the master variant.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:33:2:1\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.#to_csv when store is not provided falls back to first store if no default.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:33:3:2\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.#to_csv when store is not provided uses default store.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:33:3:1\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.#total_on_hand is infinite if track_inventory_levels is false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.#total_on_hand is infinite if variant is on demand.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:2\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.#total_on_hand returns sum of stock items count_on_hand when variants_including_master is not loaded.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:4\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.#total_on_hand returns sum of stock items count_on_hand.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:3\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.#validate_master when duplicate SKUs entered example at ./spec/models/spree/product_spec.rb:653.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.#variant_for_images when master has images returns master.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:27:2:1\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.#variant_for_images when no variants have images returns nil.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:27:1:1\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.#variant_for_images when only a non-default variant has images returns the variant with images.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:27:4:1\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.#variant_for_images when only default_variant has images returns default_variant.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:27:3:1\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.after_initialize :assign_default_tax_category when product is new assigns default tax category.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.after_initialize :assign_default_tax_category when product is persisted does not assign default tax category.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.after_touch :touch_taxons with taxons enqueues a job for touching the taxons.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:41:2:1\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.after_touch :touch_taxons without taxons skips enqueuing a job for touching the taxons.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:41:1:1\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.before_validation :ensure_default_shipping_category assigns the default shipping category.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.before_validation :ensure_default_shipping_category when product has a shipping category keeps the assigned shipping category.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.before_validation :ensure_default_shipping_category when product is persisted does not assign the default shipping category.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3:1\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.behaves like lifecycle events lifecycle events product.created publishes created event when record is created.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1:1\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.behaves like lifecycle events lifecycle events product.deleted publishes deleted event when record is deleted.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:3:1\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.behaves like lifecycle events lifecycle events product.updated publishes updated event when record is updated.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:2:1\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.behaves like metadata can query records by metadata properties.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:10\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:10.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:11.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:4.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:5.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:7.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:8.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.behaves like metadata reads data as not symbolized keys.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.behaves like metadata reads data as symbolized keys.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.classifications and taxons is joined through classifications.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.classifications and taxons will delete all classifications.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:2\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.custom events product.activated publishes product.activated event when activated.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:42:1:1\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.custom events product.archived publishes product.archived event when archived.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:42:2:1\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.image methods with eager loading returns correct images with storefront includes.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:1\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.image methods with eager loading when image is on non-default variant returns image from non-default variant.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:2:1\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.initializes a master variant when building a product.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.product instance #available? is available if status is set to active.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:10:1\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.product instance #available? is not available if destroyed.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:10:2\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.product instance #available? is not available when available_on is in the future.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:10:3\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.product instance #can_supply? is false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:11:2\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.product instance #can_supply? is true.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:11:1\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.product instance #discontinue_on_must_be_later_than_make_active_at make_active_at and discontinue_on are nil is valid.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:15:3:1\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.product instance #discontinue_on_must_be_later_than_make_active_at make_active_at is a date earlier than discontinue_on is not valid example at ./spec/models/spree/product_spec.rb:321.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:15:2:1:1\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.product instance #discontinue_on_must_be_later_than_make_active_at make_active_at is a date earlier than discontinue_on is not valid example at ./spec/models/spree/product_spec.rb:322.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:15:2:1:2\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.product instance #discontinue_on_must_be_later_than_make_active_at make_active_at is a date earlier than discontinue_on is valid.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:15:1:1\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.product instance #display_price shows the amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:9:1\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.product instance #display_price with currency set to JPY displays the currency in yen.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:9:2:1\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.product instance #duplicate calls #duplicate_extra.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:4:3\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.product instance #duplicate duplicates product.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:4:1\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.product instance #duplicate when translations exist for another locale duplicates translations for all locales.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:4:2:1\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.product instance #price strips non-price characters.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:8:1\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.product instance backorderable? with variants returns false if no variant is backorderable even if master is.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1:1\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.product instance backorderable? with variants returns true if variant is backorderable.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1:2\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.product instance backorderable? without variants returns false if master is not backorderable.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:2:1\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.product instance backorderable? without variants returns true if master is backorderable.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:2:2\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.product instance hard deletion doesnt raise ActiveRecordError error.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:16:1\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.product instance has stock items can retrieve stock items.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:14:1\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.product instance has stock movements doesnt raise ReadOnlyRecord error.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:13:1\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.product instance history keeps translations when product is destroyed.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:17:1\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.product instance in_stock? with variants returns false if no variant is in stock even if master is.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3:1:1\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.product instance in_stock? with variants returns true if variant is in stock.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3:1:2\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.product instance in_stock? without variants returns false if master is not in stock.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3:2:1\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.product instance in_stock? without variants returns true if master is in stock.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3:2:2\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.product instance master variant when master default price changed saves the default price.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:5:2:2\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.product instance master variant when master default price changed saves the master.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:5:2:1\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.product instance master variant when master variant and price haven't changed does not save the master.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:5:3:1\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.product instance master variant when master variant changed saves the master.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:5:1:1\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.product instance memoized data resets memoized data after save.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:18:2\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.product instance memoized data resets memoized data reload.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:18:3\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.product instance memoized data without action keeps data.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:18:1\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.product instance product has no variants #destroy sets deleted_at value.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:6:1:1\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.product instance product has variants #destroy sets deleted_at value.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:7:1:1\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.product instance purchasable? with variants returns false if no variant is purchasable even if master is.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:1:1\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.product instance purchasable? with variants returns true if variant is purchasable.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:1:2\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.product instance purchasable? without variants returns false if master is not purchasable.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:2:1\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.product instance purchasable? without variants returns true if master is purchasable.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:2:2\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.product instance variants_and_option_values returns only variants with option values.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:12:1\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.product instance when using another locale translates product fields.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:19:1\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.properties #possible_promotions lists the promotion as a possible promotion.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:5:1\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.properties does not create duplicate properties when set_property is called.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.properties does not overwrite properties' presentation names.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:4\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.properties optional property_presentation is not used example at ./spec/models/spree/product_spec.rb:456.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:3:1:1\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.properties optional property_presentation is used example at ./spec/models/spree/product_spec.rb:462.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:3:2:1\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.properties properly assigns properties.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.scopes .ascend_by_price orders products by minimum price ascending.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:40:3:1\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.scopes .ascend_by_price places products without prices at the end.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:40:3:2\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.scopes .ascend_by_price with variant prices uses minimum variant price for sorting.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:40:3:3:1\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.scopes .available when available_on is not specified returns active, not discontinued products.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:40:2:2:1\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.scopes .available when available_on is specified returns products available before or on the specified date.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:40:2:1:1\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.scopes .available when show_products_without_price is false only returns products with prices in the specified currency.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:40:2:3:1\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.scopes .available when show_products_without_price is true returns products regardless of price.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:40:2:4:1\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.scopes .descend_by_price orders products by maximum price descending.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:40:4:1\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.scopes .descend_by_price places products without prices at the end.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:40:4:2\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.scopes .descend_by_price with variant prices uses maximum variant price for sorting.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:40:4:3:1\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.scopes .not_discontinued when false is passed as an argument returns all products.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:40:1:2:1\"}}","rspec.Spree::Product at ./spec/models/spree/product_spec.rb.scopes .not_discontinued when nothing is passed as an argument returns only not discontinued products.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:40:1:1:1\"}}","rspec.Spree::Product::Slugs at ./spec/models/spree/product/slugs_spec.rb.#localized_slugs_for_store the slugs are generated from default locale name when name and slug for translation is empty saves slugs generated from fallback name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:4:1\"}}","rspec.Spree::Product::Slugs at ./spec/models/spree/product/slugs_spec.rb.#localized_slugs_for_store the slugs are generated from invalid slug format saves slugs in valid format.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:5:1\"}}","rspec.Spree::Product::Slugs at ./spec/models/spree/product/slugs_spec.rb.#localized_slugs_for_store the slugs are generated from name when slug field is empty saves slugs generated from name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:3:1\"}}","rspec.Spree::Product::Slugs at ./spec/models/spree/product/slugs_spec.rb.#localized_slugs_for_store when one of the supported locales does not have a translation falls back to store's default locale.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:2:1\"}}","rspec.Spree::Product::Slugs at ./spec/models/spree/product/slugs_spec.rb.#localized_slugs_for_store when there are slugs in locales not supported by the store returns only slugs in locales supported by the store.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1:1\"}}","rspec.Spree::Product::Slugs at ./spec/models/spree/product/slugs_spec.rb.ability to retake a slug of deleted record with the same name can delete the product again and then create a new product with the original slug.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","rspec.Spree::Product::Slugs at ./spec/models/spree/product/slugs_spec.rb.ability to retake a slug of deleted record with the same name can use original slug.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","rspec.Spree::Product::Slugs at ./spec/models/spree/product/slugs_spec.rb.falls back to 'name-sku' for slug if regular name-based slug already in use.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7\"}}","rspec.Spree::Product::Slugs at ./spec/models/spree/product/slugs_spec.rb.history when product is destroyed keeps the history.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1:1\"}}","rspec.Spree::Product::Slugs at ./spec/models/spree/product/slugs_spec.rb.history when product is restored regenerates the product slug.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2:2\"}}","rspec.Spree::Product::Slugs at ./spec/models/spree/product/slugs_spec.rb.history when product is restored updates the history.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2:1\"}}","rspec.Spree::Product::Slugs at ./spec/models/spree/product/slugs_spec.rb.stores old slugs in FriendlyIds history.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4\"}}","rspec.Spree::Product::Slugs at ./spec/models/spree/product/slugs_spec.rb.translated slugs ensuring slug uniqueness when the slug is not unique in the same locale appends a UUID to make it unique.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:2:2:1\"}}","rspec.Spree::Product::Slugs at ./spec/models/spree/product/slugs_spec.rb.translated slugs ensuring slug uniqueness when the slug is unique in a different locale allows the same slug in different locales.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:2:3:1\"}}","rspec.Spree::Product::Slugs at ./spec/models/spree/product/slugs_spec.rb.translated slugs ensuring slug uniqueness when the slug is unique in the same locale keeps the original slug.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:2:1:1\"}}","rspec.Spree::Product::Slugs at ./spec/models/spree/product/slugs_spec.rb.translated slugs generating slugs when a translated product has a slug normalizes the existing slug.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1:3:1\"}}","rspec.Spree::Product::Slugs at ./spec/models/spree/product/slugs_spec.rb.translated slugs generating slugs when a translated product has no name and slug generates slug from the product name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1:1:1\"}}","rspec.Spree::Product::Slugs at ./spec/models/spree/product/slugs_spec.rb.translated slugs generating slugs when a translated product has no slug generates slug from the translated product name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1:2:1\"}}","rspec.Spree::Product::Slugs at ./spec/models/spree/product/slugs_spec.rb.validates slug uniqueness.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6\"}}","rspec.Spree::Product::Slugs at ./spec/models/spree/product/slugs_spec.rb.when product destroyed renames slug.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","rspec.Spree::Product::Slugs at ./spec/models/spree/product/slugs_spec.rb.when product destroyed when more than one translation exists renames slug for all translations.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1\"}}","rspec.Spree::Product::Slugs at ./spec/models/spree/product/slugs_spec.rb.when product destroyed when slug is already at or near max length truncates renamed slug to ensure it remains within length limit.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3:1\"}}","rspec.Spree::Product::Slugs at ./spec/models/spree/product/slugs_spec.rb.with not normalized slug normalizes slug on update validation.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::Product::Slugs at ./spec/models/spree/product/slugs_spec.rb.with slug history allows re-using the slug from history.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3\"}}","rspec.Spree::Product::Slugs at ./spec/models/spree/product/slugs_spec.rb.with slug history soft deletes slug record.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","rspec.Spree::Product::Slugs at ./spec/models/spree/product/slugs_spec.rb.with slug history updates slugs with deleted-{id} prefix to ensure uniqueness.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.Spree::ProductMetricsSubscriber at ./spec/subscribers/spree/product_metrics_subscriber_spec.rb.#refresh_product_metrics enqueues jobs with correct arguments.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","rspec.Spree::ProductMetricsSubscriber at ./spec/subscribers/spree/product_metrics_subscriber_spec.rb.#refresh_product_metrics enqueues refresh jobs for all products in the order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","rspec.Spree::ProductMetricsSubscriber at ./spec/subscribers/spree/product_metrics_subscriber_spec.rb.#refresh_product_metrics when order does not exist does not enqueue any jobs.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:5:1\"}}","rspec.Spree::ProductMetricsSubscriber at ./spec/subscribers/spree/product_metrics_subscriber_spec.rb.#refresh_product_metrics when order has duplicate products only enqueues one job per unique product.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:7:1\"}}","rspec.Spree::ProductMetricsSubscriber at ./spec/subscribers/spree/product_metrics_subscriber_spec.rb.#refresh_product_metrics when order has no line items does not enqueue any jobs.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:6:1\"}}","rspec.Spree::ProductMetricsSubscriber at ./spec/subscribers/spree/product_metrics_subscriber_spec.rb.#refresh_product_metrics when order_id is missing does not enqueue any jobs.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3:1\"}}","rspec.Spree::ProductMetricsSubscriber at ./spec/subscribers/spree/product_metrics_subscriber_spec.rb.#refresh_product_metrics when store_id is missing does not enqueue any jobs.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4:1\"}}","rspec.Spree::ProductMetricsSubscriber at ./spec/subscribers/spree/product_metrics_subscriber_spec.rb..event_handlers routes order.completed to refresh_product_metrics.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.Spree::ProductMetricsSubscriber at ./spec/subscribers/spree/product_metrics_subscriber_spec.rb..subscription_patterns subscribes to order.completed event.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::ProductProperties::FindAvailable at ./spec/finders/spree/product_properties/find_available_spec.rb.#execute finds available Product Properties.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::ProductProperties::FindAvailable at ./spec/finders/spree/product_properties/find_available_spec.rb.#execute when given a predefined products scope finds filterable Product Properties with respect to a predefined Products scope.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","rspec.Spree::ProductProperties::FindAvailable at ./spec/finders/spree/product_properties/find_available_spec.rb.#execute when given a predefined scope finds available Product Properties with respect to a predefined scope.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","rspec.Spree::ProductProperty at ./spec/models/spree/product_property_spec.rb.#validations should not create duplicated property for product.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::ProductProperty at ./spec/models/spree/product_property_spec.rb.#validations value field validates presence.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","rspec.Spree::ProductProperty at ./spec/models/spree/product_property_spec.rb.ransackable_associations example at ./spec/models/spree/product_property_spec.rb:58.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","rspec.Spree::ProductProperty at ./spec/models/spree/product_property_spec.rb.setting param example at ./spec/models/spree/product_property_spec.rb:64.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","rspec.Spree::ProductProperty at ./spec/models/spree/product_property_spec.rb.setting value normalizes value by stripping whitespace.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","rspec.Spree::ProductProperty at ./spec/models/spree/product_property_spec.rb.touching updates product.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","rspec.Spree::ProductProperty at ./spec/models/spree/product_property_spec.rb.touching updates property.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","rspec.Spree::ProductProperty at ./spec/models/spree/product_property_spec.rb.translations translates product property fields.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.Spree::Products::AutoMatchTaxons at ./spec/services/spree/products/auto_match_taxons_spec.rb.when product matches new taxon doesn't do circular call.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","rspec.Spree::Products::AutoMatchTaxons at ./spec/services/spree/products/auto_match_taxons_spec.rb.when product matches new taxon should be added to the taxon.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::Products::AutoMatchTaxons at ./spec/services/spree/products/auto_match_taxons_spec.rb.when product no longer matches taxon should be removed from the taxon.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.Spree::Products::Duplicator at ./spec/services/spree/products/duplicator_spec.rb.duplicates already duplicated product.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3\"}}","rspec.Spree::Products::Duplicator at ./spec/services/spree/products/duplicator_spec.rb.duplicates the product.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2\"}}","rspec.Spree::Products::Duplicator at ./spec/services/spree/products/duplicator_spec.rb.example at ./spec/services/spree/products/duplicator_spec.rb:31.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","rspec.Spree::Products::Duplicator at ./spec/services/spree/products/duplicator_spec.rb.image duplication clones images by default.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","rspec.Spree::Products::Duplicator at ./spec/services/spree/products/duplicator_spec.rb.image duplication when excluding images from cloning doesn't clone images.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1\"}}","rspec.Spree::Products::Duplicator at ./spec/services/spree/products/duplicator_spec.rb.product attributes always sets the product as draft.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","rspec.Spree::Products::Duplicator at ./spec/services/spree/products/duplicator_spec.rb.product attributes clones backorderable and sets stock to 0.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:7\"}}","rspec.Spree::Products::Duplicator at ./spec/services/spree/products/duplicator_spec.rb.product attributes clones barcode.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:6\"}}","rspec.Spree::Products::Duplicator at ./spec/services/spree/products/duplicator_spec.rb.product attributes copies tags.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:5\"}}","rspec.Spree::Products::Duplicator at ./spec/services/spree/products/duplicator_spec.rb.product attributes copies the properties.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:4\"}}","rspec.Spree::Products::Duplicator at ./spec/services/spree/products/duplicator_spec.rb.product attributes sets an unique name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2\"}}","rspec.Spree::Products::Duplicator at ./spec/services/spree/products/duplicator_spec.rb.product attributes sets an unique sku.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3\"}}","rspec.Spree::Products::Duplicator at ./spec/services/spree/products/duplicator_spec.rb.product prices clones prices.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","rspec.Spree::Products::Duplicator at ./spec/services/spree/products/duplicator_spec.rb.stores example at ./spec/services/spree/products/duplicator_spec.rb:115.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","rspec.Spree::Products::Duplicator at ./spec/services/spree/products/duplicator_spec.rb.with variants clones backorderable and sets stock to 0.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:4\"}}","rspec.Spree::Products::Duplicator at ./spec/services/spree/products/duplicator_spec.rb.with variants clones barcodes.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:3\"}}","rspec.Spree::Products::Duplicator at ./spec/services/spree/products/duplicator_spec.rb.with variants doesn't duplicate the option values.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2\"}}","rspec.Spree::Products::Duplicator at ./spec/services/spree/products/duplicator_spec.rb.with variants duplicates the variants.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1\"}}","rspec.Spree::Products::Duplicator at ./spec/services/spree/products/duplicator_spec.rb.with variants image duplication clones images by default.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:5:1\"}}","rspec.Spree::Products::Duplicator at ./spec/services/spree/products/duplicator_spec.rb.with variants image duplication when excluding images from cloning doesn't clone images.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:5:2:1\"}}","rspec.Spree::Products::Duplicator at ./spec/services/spree/products/duplicator_spec.rb.with variants variant prices clones prices.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:6:1\"}}","rspec.Spree::Products::Find at ./spec/finders/spree/products/find_spec.rb.backorderable returns products with backorderable variants.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","rspec.Spree::Products::Find at ./spec/finders/spree/products/find_spec.rb.exclude discontinued and deleted returns not discontinued and not deleted products.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","rspec.Spree::Products::Find at ./spec/finders/spree/products/find_spec.rb.filter by options and option values for option values filtering by one option returns products with proper option values.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2:1:1\"}}","rspec.Spree::Products::Find at ./spec/finders/spree/products/find_spec.rb.filter by options and option values for option values filtering by several options returns products that have both options.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2:2:1\"}}","rspec.Spree::Products::Find at ./spec/finders/spree/products/find_spec.rb.filter by options and option values for options returns products matching all given options.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1:1\"}}","rspec.Spree::Products::Find at ./spec/finders/spree/products/find_spec.rb.filter by prices for a price between 16 and 24 example at ./spec/finders/spree/products/find_spec.rb:363.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:2:1\"}}","rspec.Spree::Products::Find at ./spec/finders/spree/products/find_spec.rb.filter by prices for a price less than 20 example at ./spec/finders/spree/products/find_spec.rb:357.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1:1\"}}","rspec.Spree::Products::Find at ./spec/finders/spree/products/find_spec.rb.filter by prices for a price more than 23 example at ./spec/finders/spree/products/find_spec.rb:369.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:3:1\"}}","rspec.Spree::Products::Find at ./spec/finders/spree/products/find_spec.rb.filter by properties when filtering by many Properties finds Products matching any of Property values, but for all given Properties.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:2:1\"}}","rspec.Spree::Products::Find at ./spec/finders/spree/products/find_spec.rb.filter by properties when filtering by one Property finds Products matching any of Property values.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1:1\"}}","rspec.Spree::Products::Find at ./spec/finders/spree/products/find_spec.rb.filter by slug when product with given slug is not present returns all products.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:2:1\"}}","rspec.Spree::Products::Find at ./spec/finders/spree/products/find_spec.rb.filter by slug when product with given slug is present returns products with the given slug.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:1:1\"}}","rspec.Spree::Products::Find at ./spec/finders/spree/products/find_spec.rb.filter by slug when slug is not present returns all products.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:3:1\"}}","rspec.Spree::Products::Find at ./spec/finders/spree/products/find_spec.rb.filter by taxons multiple taxons + 1 concat_taxons are requested example at ./spec/finders/spree/products/find_spec.rb:308.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:3:1\"}}","rspec.Spree::Products::Find at ./spec/finders/spree/products/find_spec.rb.filter by taxons multiple taxons are requested example at ./spec/finders/spree/products/find_spec.rb:292.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2:1\"}}","rspec.Spree::Products::Find at ./spec/finders/spree/products/find_spec.rb.filter by taxons one taxon is requested in params behaves like returns distinct products associated both to self and descendants example at ./spec/finders/spree/products/find_spec.rb:265.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1:1:1\"}}","rspec.Spree::Products::Find at ./spec/finders/spree/products/find_spec.rb.filter by taxons one taxon is requested in params when product is already related to both taxons behaves like returns distinct products associated both to self and descendants example at ./spec/finders/spree/products/find_spec.rb:265.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1:2:1:1\"}}","rspec.Spree::Products::Find at ./spec/finders/spree/products/find_spec.rb.filter by taxons only multiple concat_taxons are requested example at ./spec/finders/spree/products/find_spec.rb:324.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:4:1\"}}","rspec.Spree::Products::Find at ./spec/finders/spree/products/find_spec.rb.filter by taxons only one concat_taxons is requested example at ./spec/finders/spree/products/find_spec.rb:340.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:5:1\"}}","rspec.Spree::Products::Find at ./spec/finders/spree/products/find_spec.rb.in stock returns products with variants in stock.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","rspec.Spree::Products::Find at ./spec/finders/spree/products/find_spec.rb.include deleted returns products with deleted.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.Spree::Products::Find at ./spec/finders/spree/products/find_spec.rb.include discontinued returns products with discontinued.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::Products::Find at ./spec/finders/spree/products/find_spec.rb.ordered default when filtering by taxons returns products ordered by associated taxon position.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1:2:1\"}}","rspec.Spree::Products::Find at ./spec/finders/spree/products/find_spec.rb.ordered default when not filtering by taxons returns products in default order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1:1:1\"}}","rspec.Spree::Products::Find at ./spec/finders/spree/products/find_spec.rb.ordered returns products in name-a-z order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:5\"}}","rspec.Spree::Products::Find at ./spec/finders/spree/products/find_spec.rb.ordered returns products in name-z-a order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:6\"}}","rspec.Spree::Products::Find at ./spec/finders/spree/products/find_spec.rb.ordered returns products in newest-first order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2\"}}","rspec.Spree::Products::Find at ./spec/finders/spree/products/find_spec.rb.ordered returns products in price-high-to-low order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:3\"}}","rspec.Spree::Products::Find at ./spec/finders/spree/products/find_spec.rb.ordered returns products in price-low-to-high order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:4\"}}","rspec.Spree::Products::Find at ./spec/finders/spree/products/find_spec.rb.purchasable returns products with purchasable variants.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","rspec.Spree::Products::PrepareNestedAttributes at ./spec/services/spree/products/prepare_nested_attributes_spec.rb.prices_attributes handling when user can update prices when price amount is blank marks the price for destruction.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1:1\"}}","rspec.Spree::Products::PrepareNestedAttributes at ./spec/services/spree/products/prepare_nested_attributes_spec.rb.prices_attributes handling when user cannot update prices with master_attributes removes prices_attributes from master.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:2:1\"}}","rspec.Spree::Products::PrepareNestedAttributes at ./spec/services/spree/products/prepare_nested_attributes_spec.rb.prices_attributes handling when user cannot update prices with variants_attributes removes prices_attributes from variants.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1:1\"}}","rspec.Spree::Products::PrepareNestedAttributes at ./spec/services/spree/products/prepare_nested_attributes_spec.rb.product_properties_attributes handling when product property value is blank marks the product property for destruction.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","rspec.Spree::Products::PrepareNestedAttributes at ./spec/services/spree/products/prepare_nested_attributes_spec.rb.product_properties_attributes handling when product property value is present does not mark the product property for destruction.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","rspec.Spree::Products::PrepareNestedAttributes at ./spec/services/spree/products/prepare_nested_attributes_spec.rb.stock_items_attributes handling when user cannot update stock items with master_attributes removes stock_items_attributes from master.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:2:1\"}}","rspec.Spree::Products::PrepareNestedAttributes at ./spec/services/spree/products/prepare_nested_attributes_spec.rb.stock_items_attributes handling when user cannot update stock items with variants_attributes removes stock_items_attributes from variants.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:1:1\"}}","rspec.Spree::Products::PrepareNestedAttributes at ./spec/services/spree/products/prepare_nested_attributes_spec.rb.store_ids handling when store_ids is blank adds current store to store_ids.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","rspec.Spree::Products::PrepareNestedAttributes at ./spec/services/spree/products/prepare_nested_attributes_spec.rb.store_ids handling when store_ids is present preserves submitted store_ids.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","rspec.Spree::Products::PrepareNestedAttributes at ./spec/services/spree/products/prepare_nested_attributes_spec.rb.taxon preservation across stores when creating a new product does not merge taxons from other stores.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","rspec.Spree::Products::PrepareNestedAttributes at ./spec/services/spree/products/prepare_nested_attributes_spec.rb.taxon preservation across stores when creating a new product only includes submitted taxon IDs.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2\"}}","rspec.Spree::Products::PrepareNestedAttributes at ./spec/services/spree/products/prepare_nested_attributes_spec.rb.taxon preservation across stores when editing a product with taxons from multiple stores when removing all taxons from current store does not include taxons from current store.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:2\"}}","rspec.Spree::Products::PrepareNestedAttributes at ./spec/services/spree/products/prepare_nested_attributes_spec.rb.taxon preservation across stores when editing a product with taxons from multiple stores when removing all taxons from current store preserves taxons from other stores.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","rspec.Spree::Products::PrepareNestedAttributes at ./spec/services/spree/products/prepare_nested_attributes_spec.rb.taxon preservation across stores when editing a product with taxons from multiple stores when taxon_ids param is not present does not add taxon_ids key.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:1\"}}","rspec.Spree::Products::PrepareNestedAttributes at ./spec/services/spree/products/prepare_nested_attributes_spec.rb.taxon preservation across stores when editing a product with taxons from multiple stores when updating taxon_ids from current store includes the new taxon from current store.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:2\"}}","rspec.Spree::Products::PrepareNestedAttributes at ./spec/services/spree/products/prepare_nested_attributes_spec.rb.taxon preservation across stores when editing a product with taxons from multiple stores when updating taxon_ids from current store preserves taxons from other stores.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","rspec.Spree::Products::PrepareNestedAttributes at ./spec/services/spree/products/prepare_nested_attributes_spec.rb.taxon preservation across stores when editing a product with taxons from multiple stores when updating taxon_ids from current store removes the old taxon from current store.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:3\"}}","rspec.Spree::Products::PrepareNestedAttributes at ./spec/services/spree/products/prepare_nested_attributes_spec.rb.taxon preservation across stores when editing a product with taxons from multiple stores when updating taxon_ids from current store returns unique taxon IDs.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:4\"}}","rspec.Spree::Products::PrepareNestedAttributes at ./spec/services/spree/products/prepare_nested_attributes_spec.rb.taxon preservation across stores when product has taxons from multiple other stores has exactly 3 taxon IDs.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:3\"}}","rspec.Spree::Products::PrepareNestedAttributes at ./spec/services/spree/products/prepare_nested_attributes_spec.rb.taxon preservation across stores when product has taxons from multiple other stores includes the new taxon from current store.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:2\"}}","rspec.Spree::Products::PrepareNestedAttributes at ./spec/services/spree/products/prepare_nested_attributes_spec.rb.taxon preservation across stores when product has taxons from multiple other stores preserves taxons from all other stores.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","rspec.Spree::Products::RefreshMetricsJob at ./spec/jobs/spree/products/refresh_metrics_job_spec.rb.#perform when product_id is invalid does nothing.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","rspec.Spree::Products::RefreshMetricsJob at ./spec/jobs/spree/products/refresh_metrics_job_spec.rb.#perform when store_id is invalid does nothing.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1\"}}","rspec.Spree::Products::RefreshMetricsJob at ./spec/jobs/spree/products/refresh_metrics_job_spec.rb.#perform when store_product does not exist does nothing.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","rspec.Spree::Products::RefreshMetricsJob at ./spec/jobs/spree/products/refresh_metrics_job_spec.rb.#perform when store_product exists calls refresh_metrics! on the store_product.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","rspec.Spree::Products::TouchTaxonsJob at ./spec/jobs/spree/products/touch_taxons_job_spec.rb.#perform does not touch other taxons.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","rspec.Spree::Products::TouchTaxonsJob at ./spec/jobs/spree/products/touch_taxons_job_spec.rb.#perform touches all specified taxonomies.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","rspec.Spree::Products::TouchTaxonsJob at ./spec/jobs/spree/products/touch_taxons_job_spec.rb.#perform touches all specified taxons.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::ProductsHelper at ./spec/helpers/products_helper_spec.rb.#cache_key_for_product given possible promotions example at ./spec/helpers/products_helper_spec.rb:286.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:6:1\"}}","rspec.Spree::ProductsHelper at ./spec/helpers/products_helper_spec.rb.#cache_key_for_product when current_price_options includes nil values does not include nil values.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3:1\"}}","rspec.Spree::ProductsHelper at ./spec/helpers/products_helper_spec.rb.#cache_key_for_product when current_price_options includes values that do not implement cache_key includes string representations of these values.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:4:1\"}}","rspec.Spree::ProductsHelper at ./spec/helpers/products_helper_spec.rb.#cache_key_for_product when keys in the options hash are inserted in non-alphabetical order the values are nevertheless returned in alphabetical order of their keys.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:5:1\"}}","rspec.Spree::ProductsHelper at ./spec/helpers/products_helper_spec.rb.#cache_key_for_product when there is a current tax zone includes the current_tax_zone.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:1\"}}","rspec.Spree::ProductsHelper at ./spec/helpers/products_helper_spec.rb.#cache_key_for_product when there is no current tax zone example at ./spec/helpers/products_helper_spec.rb:235.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1\"}}","rspec.Spree::ProductsHelper at ./spec/helpers/products_helper_spec.rb.#cache_key_for_products when there is a maximum updated date example at ./spec/helpers/products_helper_spec.rb:175.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1\"}}","rspec.Spree::ProductsHelper at ./spec/helpers/products_helper_spec.rb.#cache_key_for_products when there is no considered maximum updated date example at ./spec/helpers/products_helper_spec.rb:186.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1\"}}","rspec.Spree::ProductsHelper at ./spec/helpers/products_helper_spec.rb.#cache_key_for_products with Taxon ID present example at ./spec/helpers/products_helper_spec.rb:197.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3:1\"}}","rspec.Spree::ProductsHelper at ./spec/helpers/products_helper_spec.rb.#cache_key_for_products with `additional_cache_key` passed example at ./spec/helpers/products_helper_spec.rb:210.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:4:1\"}}","rspec.Spree::ProductsHelper at ./spec/helpers/products_helper_spec.rb.#line_item_description_text behaves like line item descriptions description has line endings example at ./spec/helpers/products_helper_spec.rb:142.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:4:1\"}}","rspec.Spree::ProductsHelper at ./spec/helpers/products_helper_spec.rb.#line_item_description_text behaves like line item descriptions description has nonbreaking spaces example at ./spec/helpers/products_helper_spec.rb:136.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:3:1\"}}","rspec.Spree::ProductsHelper at ./spec/helpers/products_helper_spec.rb.#line_item_description_text behaves like line item descriptions variant has a blank description example at ./spec/helpers/products_helper_spec.rb:124.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1:1\"}}","rspec.Spree::ProductsHelper at ./spec/helpers/products_helper_spec.rb.#line_item_description_text behaves like line item descriptions variant has a description example at ./spec/helpers/products_helper_spec.rb:130.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:2:1\"}}","rspec.Spree::ProductsHelper at ./spec/helpers/products_helper_spec.rb.#variant_price_diff when currency is JPY when variant is less than master example at ./spec/helpers/products_helper_spec.rb:70.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:2:1\"}}","rspec.Spree::ProductsHelper at ./spec/helpers/products_helper_spec.rb.#variant_price_diff when currency is JPY when variant is more than master example at ./spec/helpers/products_helper_spec.rb:64.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1:1\"}}","rspec.Spree::ProductsHelper at ./spec/helpers/products_helper_spec.rb.#variant_price_diff when currency is default when variant is less than master example at ./spec/helpers/products_helper_spec.rb:52.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:2:1\"}}","rspec.Spree::ProductsHelper at ./spec/helpers/products_helper_spec.rb.#variant_price_diff when currency is default when variant is more than master example at ./spec/helpers/products_helper_spec.rb:44.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1:1\"}}","rspec.Spree::ProductsHelper at ./spec/helpers/products_helper_spec.rb.#variant_price_diff when currency is default when variant is more than master example at ./spec/helpers/products_helper_spec.rb:46.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1:2\"}}","rspec.Spree::ProductsHelper at ./spec/helpers/products_helper_spec.rb.#variant_price_diff when the master has no price example at ./spec/helpers/products_helper_spec.rb:37.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","rspec.Spree::ProductsHelper at ./spec/helpers/products_helper_spec.rb.#variant_price_diff when variant is same as master example at ./spec/helpers/products_helper_spec.rb:31.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","rspec.Spree::ProductsHelper at ./spec/helpers/products_helper_spec.rb.#variant_price_full is nil when all variant prices are equal.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3\"}}","rspec.Spree::ProductsHelper at ./spec/helpers/products_helper_spec.rb.#variant_price_full when currency is JPY returns the variant price if the price is different than master.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","rspec.Spree::ProductsHelper at ./spec/helpers/products_helper_spec.rb.#variant_price_full when currency is default returns the variant price if the price is different than master.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","rspec.Spree::Promotion at ./spec/models/spree/promotion_spec.rb.#activate checks path if present.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1\"}}","rspec.Spree::Promotion at ./spec/models/spree/promotion_spec.rb.#activate does activate if newer then order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:3\"}}","rspec.Spree::Promotion at ./spec/models/spree/promotion_spec.rb.#activate does not perform actions against an order in a finalized state.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2\"}}","rspec.Spree::Promotion at ./spec/models/spree/promotion_spec.rb.#activate when activated assigns the order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:4:1\"}}","rspec.Spree::Promotion at ./spec/models/spree/promotion_spec.rb.#activate when not activated doesn't assign the order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:5:1\"}}","rspec.Spree::Promotion at ./spec/models/spree/promotion_spec.rb.#adjusted_credits_count counts item level adjustments.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:2\"}}","rspec.Spree::Promotion at ./spec/models/spree/promotion_spec.rb.#adjusted_credits_count counts order level adjustments.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:1\"}}","rspec.Spree::Promotion at ./spec/models/spree/promotion_spec.rb.#cached_rules returns the rules.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:23:1\"}}","rspec.Spree::Promotion at ./spec/models/spree/promotion_spec.rb.#credits_count counts eligible adjustments.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1\"}}","rspec.Spree::Promotion at ./spec/models/spree/promotion_spec.rb.#credits_count does not count ineligible adjustments.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2\"}}","rspec.Spree::Promotion at ./spec/models/spree/promotion_spec.rb.#destroy deletes actions.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","rspec.Spree::Promotion at ./spec/models/spree/promotion_spec.rb.#destroy deletes rules.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2\"}}","rspec.Spree::Promotion at ./spec/models/spree/promotion_spec.rb.#destroy if promotion was already used does not destroy the promotion.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:3:1\"}}","rspec.Spree::Promotion at ./spec/models/spree/promotion_spec.rb.#eligible? when promotable is a Spree::LineItem and product is not promotionable example at ./spec/models/spree/promotion_spec.rb:494.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:2:2:1\"}}","rspec.Spree::Promotion at ./spec/models/spree/promotion_spec.rb.#eligible? when promotable is a Spree::LineItem and product is promotionable example at ./spec/models/spree/promotion_spec.rb:488.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:2:1:1\"}}","rspec.Spree::Promotion at ./spec/models/spree/promotion_spec.rb.#eligible? when promotable is a Spree::Order and it contains items and at least one item is promotionable example at ./spec/models/spree/promotion_spec.rb:517.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:3:2:2:1\"}}","rspec.Spree::Promotion at ./spec/models/spree/promotion_spec.rb.#eligible? when promotable is a Spree::Order and it contains items and the items are all non-promotionable example at ./spec/models/spree/promotion_spec.rb:513.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:3:2:1:1\"}}","rspec.Spree::Promotion at ./spec/models/spree/promotion_spec.rb.#eligible? when promotable is a Spree::Order and it is empty example at ./spec/models/spree/promotion_spec.rb:502.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:3:1:1\"}}","rspec.Spree::Promotion at ./spec/models/spree/promotion_spec.rb.#eligible? when promotion is expired example at ./spec/models/spree/promotion_spec.rb:474.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:1:1\"}}","rspec.Spree::Promotion at ./spec/models/spree/promotion_spec.rb.#eligible_rules when there are no aplicable rules returns true.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:2:1\"}}","rspec.Spree::Promotion at ./spec/models/spree/promotion_spec.rb.#eligible_rules when there are no rules returns true.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:1:1\"}}","rspec.Spree::Promotion at ./spec/models/spree/promotion_spec.rb.#eligible_rules with 'all' match policy when all rules are eligible does set anything to eligiblity errors.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:3:1:2\"}}","rspec.Spree::Promotion at ./spec/models/spree/promotion_spec.rb.#eligible_rules with 'all' match policy when all rules are eligible returns the eligible rules.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:3:1:1\"}}","rspec.Spree::Promotion at ./spec/models/spree/promotion_spec.rb.#eligible_rules with 'all' match policy when any of the rules is not eligible returns nil.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:3:2:1\"}}","rspec.Spree::Promotion at ./spec/models/spree/promotion_spec.rb.#eligible_rules with 'all' match policy when any of the rules is not eligible sets eligibility errors to the first non-nil one.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:3:2:2\"}}","rspec.Spree::Promotion at ./spec/models/spree/promotion_spec.rb.#eligible_rules with 'any' match policy has eligible rules if any of the rules are eligible.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:4:1\"}}","rspec.Spree::Promotion at ./spec/models/spree/promotion_spec.rb.#eligible_rules with 'any' match policy when none of the rules are eligible returns nil.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:4:2:1\"}}","rspec.Spree::Promotion at ./spec/models/spree/promotion_spec.rb.#eligible_rules with 'any' match policy when none of the rules are eligible sets eligibility errors to the first non-nil one.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:4:2:2\"}}","rspec.Spree::Promotion at ./spec/models/spree/promotion_spec.rb.#expired is expired if it has already ended.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:3\"}}","rspec.Spree::Promotion at ./spec/models/spree/promotion_spec.rb.#expired is expired if it hasn't started yet.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:2\"}}","rspec.Spree::Promotion at ./spec/models/spree/promotion_spec.rb.#expired is not exipired.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1\"}}","rspec.Spree::Promotion at ./spec/models/spree/promotion_spec.rb.#expired is not expired if current time is within starts_at and expires_at range.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:6\"}}","rspec.Spree::Promotion at ./spec/models/spree/promotion_spec.rb.#expired is not expired if it has not ended yet.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:5\"}}","rspec.Spree::Promotion at ./spec/models/spree/promotion_spec.rb.#expired is not expired if it has started already.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:4\"}}","rspec.Spree::Promotion at ./spec/models/spree/promotion_spec.rb.#expired is not expired if usage limit is not exceeded.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:7\"}}","rspec.Spree::Promotion at ./spec/models/spree/promotion_spec.rb.#generate_code with generate_code has a generated code.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:21:1:1\"}}","rspec.Spree::Promotion at ./spec/models/spree/promotion_spec.rb.#generate_code without generate_code has a generated code.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:21:2:1\"}}","rspec.Spree::Promotion at ./spec/models/spree/promotion_spec.rb.#generate_coupon_codes generates new codes when number_of_codes is changed.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:22:2\"}}","rspec.Spree::Promotion at ./spec/models/spree/promotion_spec.rb.#generate_coupon_codes has a generated code.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:22:1\"}}","rspec.Spree::Promotion at ./spec/models/spree/promotion_spec.rb.#generate_coupon_codes when number of codes is greater than the web limit generates the codes in a background job.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:22:4:1\"}}","rspec.Spree::Promotion at ./spec/models/spree/promotion_spec.rb.#generate_coupon_codes with prefix has a generated code with prefix.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:22:3:1\"}}","rspec.Spree::Promotion at ./spec/models/spree/promotion_spec.rb.#line_item_actionable? when the order is eligible for promotion when there are no rules example at ./spec/models/spree/promotion_spec.rb:641.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:1:1:1\"}}","rspec.Spree::Promotion at ./spec/models/spree/promotion_spec.rb.#line_item_actionable? when the order is eligible for promotion when there are rules when the match policy is all when all rules allow action on the line item example at ./spec/models/spree/promotion_spec.rb:651.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:1:2:1:1:1\"}}","rspec.Spree::Promotion at ./spec/models/spree/promotion_spec.rb.#line_item_actionable? when the order is eligible for promotion when there are rules when the match policy is all when at least one rule does not allow action on the line item example at ./spec/models/spree/promotion_spec.rb:657.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:1:2:1:2:1\"}}","rspec.Spree::Promotion at ./spec/models/spree/promotion_spec.rb.#line_item_actionable? when the order is eligible for promotion when there are rules when the match policy is any when at least one rule allows action on the line item example at ./spec/models/spree/promotion_spec.rb:667.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:1:2:2:1:1\"}}","rspec.Spree::Promotion at ./spec/models/spree/promotion_spec.rb.#line_item_actionable? when the order is eligible for promotion when there are rules when the match policy is any when no rules allow action on the line item example at ./spec/models/spree/promotion_spec.rb:673.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:1:2:2:2:1\"}}","rspec.Spree::Promotion at ./spec/models/spree/promotion_spec.rb.#line_item_actionable? when the order is not eligible for the promotion example at ./spec/models/spree/promotion_spec.rb:682.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:2:1\"}}","rspec.Spree::Promotion at ./spec/models/spree/promotion_spec.rb.#products when it has product rules with products associated has products.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:1:1\"}}","rspec.Spree::Promotion at ./spec/models/spree/promotion_spec.rb.#products when there's no product rule associated does not have products but still return an empty array.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:2:1\"}}","rspec.Spree::Promotion at ./spec/models/spree/promotion_spec.rb.#save allows to change promotion type from automatic to multiple discount codes.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:3\"}}","rspec.Spree::Promotion at ./spec/models/spree/promotion_spec.rb.#save allows to change promotion type from automatic to single discount code.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2\"}}","rspec.Spree::Promotion at ./spec/models/spree/promotion_spec.rb.#save allows to change promotion type from multiple discount codes to automatic.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:5\"}}","rspec.Spree::Promotion at ./spec/models/spree/promotion_spec.rb.#save allows to change promotion type from single discount code to automatic.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:4\"}}","rspec.Spree::Promotion at ./spec/models/spree/promotion_spec.rb.#save deeply autosaves records and preferences.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","rspec.Spree::Promotion at ./spec/models/spree/promotion_spec.rb.#usage_limit_exceeded does not have its usage limit exceeded with no usage limit.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1\"}}","rspec.Spree::Promotion at ./spec/models/spree/promotion_spec.rb.#usage_limit_exceeded has its usage limit exceeded.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:2\"}}","rspec.Spree::Promotion at ./spec/models/spree/promotion_spec.rb.#used_by? when the user has not used this promo example at ./spec/models/spree/promotion_spec.rb:784.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:2:1\"}}","rspec.Spree::Promotion at ./spec/models/spree/promotion_spec.rb.#used_by? when the user has used this promo when the order is complete example at ./spec/models/spree/promotion_spec.rb:756.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:1:1:1\"}}","rspec.Spree::Promotion at ./spec/models/spree/promotion_spec.rb.#used_by? when the user has used this promo when the order is complete when the only matching order is the excluded order example at ./spec/models/spree/promotion_spec.rb:772.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:1:1:3:1\"}}","rspec.Spree::Promotion at ./spec/models/spree/promotion_spec.rb.#used_by? when the user has used this promo when the order is complete when the promotion is not eligible example at ./spec/models/spree/promotion_spec.rb:766.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:1:1:2:1\"}}","rspec.Spree::Promotion at ./spec/models/spree/promotion_spec.rb.#used_by? when the user has used this promo when the order is not complete example at ./spec/models/spree/promotion_spec.rb:779.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:1:2:1\"}}","rspec.Spree::Promotion at ./spec/models/spree/promotion_spec.rb.#with_coupon_code and code stored in uppercase finds the code with lowercase.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:1:1\"}}","rspec.Spree::Promotion at ./spec/models/spree/promotion_spec.rb.#with_coupon_code coupon from coupon code batch finds the code with lowercase.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:3:1\"}}","rspec.Spree::Promotion at ./spec/models/spree/promotion_spec.rb.#with_coupon_code coupon from coupon code batch finds the code with uppercase.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:3:2\"}}","rspec.Spree::Promotion at ./spec/models/spree/promotion_spec.rb.#with_coupon_code when promotion has no actions return the last one created.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:2:2\"}}","rspec.Spree::Promotion at ./spec/models/spree/promotion_spec.rb.#with_coupon_code when promotion has no actions then returns the one with an action.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:2:1\"}}","rspec.Spree::Promotion at ./spec/models/spree/promotion_spec.rb.Callbacks #remove_coupons removes the coupons.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1\"}}","rspec.Spree::Promotion at ./spec/models/spree/promotion_spec.rb.Callbacks #set_usage_limit_to_nil when promo has one code for all customers does not change usage_limit.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1:1\"}}","rspec.Spree::Promotion at ./spec/models/spree/promotion_spec.rb.Callbacks #set_usage_limit_to_nil when promo has unique codes sets usage_limit to nil.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:2:1\"}}","rspec.Spree::Promotion at ./spec/models/spree/promotion_spec.rb.Validations can create multiple promos with the same code.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4\"}}","rspec.Spree::Promotion at ./spec/models/spree/promotion_spec.rb.Validations expires_at_must_be_later_than_starts_at starts_at and expires_at are nil is valid.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:5:3:1\"}}","rspec.Spree::Promotion at ./spec/models/spree/promotion_spec.rb.Validations expires_at_must_be_later_than_starts_at starts_at is a date earlier than expires_at is not valid example at ./spec/models/spree/promotion_spec.rb:55.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:5:2:1:1\"}}","rspec.Spree::Promotion at ./spec/models/spree/promotion_spec.rb.Validations expires_at_must_be_later_than_starts_at starts_at is a date earlier than expires_at is not valid example at ./spec/models/spree/promotion_spec.rb:56.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:5:2:1:2\"}}","rspec.Spree::Promotion at ./spec/models/spree/promotion_spec.rb.Validations expires_at_must_be_later_than_starts_at starts_at is a date earlier than expires_at is valid.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:5:1:1\"}}","rspec.Spree::Promotion at ./spec/models/spree/promotion_spec.rb.Validations valid_promotion is valid.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","rspec.Spree::Promotion at ./spec/models/spree/promotion_spec.rb.Validations validates name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3\"}}","rspec.Spree::Promotion at ./spec/models/spree/promotion_spec.rb.Validations validates usage limit.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","rspec.Spree::Promotion at ./spec/models/spree/promotion_spec.rb.adding items to the cart updates the promotions for new line items.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:20:1\"}}","rspec.Spree::Promotion at ./spec/models/spree/promotion_spec.rb.behaves like lifecycle events lifecycle events promotion.created publishes created event when record is created.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1:1\"}}","rspec.Spree::Promotion at ./spec/models/spree/promotion_spec.rb.behaves like lifecycle events lifecycle events promotion.deleted publishes deleted event when record is deleted.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:3:1\"}}","rspec.Spree::Promotion at ./spec/models/spree/promotion_spec.rb.behaves like lifecycle events lifecycle events promotion.updated publishes updated event when record is updated.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:2:1\"}}","rspec.Spree::Promotion at ./spec/models/spree/promotion_spec.rb.behaves like metadata can query records by metadata properties.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:10\"}}","rspec.Spree::Promotion at ./spec/models/spree/promotion_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:10.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","rspec.Spree::Promotion at ./spec/models/spree/promotion_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:11.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","rspec.Spree::Promotion at ./spec/models/spree/promotion_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:4.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::Promotion at ./spec/models/spree/promotion_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:5.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","rspec.Spree::Promotion at ./spec/models/spree/promotion_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:7.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","rspec.Spree::Promotion at ./spec/models/spree/promotion_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:8.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","rspec.Spree::Promotion at ./spec/models/spree/promotion_spec.rb.behaves like metadata reads data as not symbolized keys.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8\"}}","rspec.Spree::Promotion at ./spec/models/spree/promotion_spec.rb.behaves like metadata reads data as symbolized keys.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7\"}}","rspec.Spree::Promotion at ./spec/models/spree/promotion_spec.rb.normalize blank values for code & path will save blank value as nil value instead.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:17:1\"}}","rspec.Spree::Promotion at ./spec/models/spree/promotion_spec.rb.scopes .advertised is expected to include promotion advertised.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3:2\"}}","rspec.Spree::Promotion at ./spec/models/spree/promotion_spec.rb.scopes .advertised is expected to not include promotion not advertised.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3:1\"}}","rspec.Spree::Promotion at ./spec/models/spree/promotion_spec.rb.scopes .applied is expected to include promotion applied.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:2\"}}","rspec.Spree::Promotion at ./spec/models/spree/promotion_spec.rb.scopes .applied is expected to not include promotion not applied.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1\"}}","rspec.Spree::Promotion at ./spec/models/spree/promotion_spec.rb.scopes .coupons is expected to include promotion with code.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:2\"}}","rspec.Spree::Promotion at ./spec/models/spree/promotion_spec.rb.scopes .coupons is expected to not include promotion without code.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:1\"}}","rspec.Spree::Promotion::Actions::CreateAdjustment at ./spec/models/spree/promotion/actions/create_adjustment_spec.rb.#compute_amount when shipping_discount is applied and total is equal to discount returns discount amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:2:1\"}}","rspec.Spree::Promotion::Actions::CreateAdjustment at ./spec/models/spree/promotion/actions/create_adjustment_spec.rb.#compute_amount when shipping_discount is applied and total is greater than discount returns discount amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:3:1\"}}","rspec.Spree::Promotion::Actions::CreateAdjustment at ./spec/models/spree/promotion/actions/create_adjustment_spec.rb.#compute_amount when shipping_discount is applied and total is less than discount returns discount amount eq to total.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1:1\"}}","rspec.Spree::Promotion::Actions::CreateAdjustment at ./spec/models/spree/promotion/actions/create_adjustment_spec.rb.#compute_amount when shipping_discount is not applied and total is equal to discount returns discount amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:2:1\"}}","rspec.Spree::Promotion::Actions::CreateAdjustment at ./spec/models/spree/promotion/actions/create_adjustment_spec.rb.#compute_amount when shipping_discount is not applied and total is greater than discount returns discount amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:3:1\"}}","rspec.Spree::Promotion::Actions::CreateAdjustment at ./spec/models/spree/promotion/actions/create_adjustment_spec.rb.#compute_amount when shipping_discount is not applied and total is less than discount returns discount amount eq to total.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1:1\"}}","rspec.Spree::Promotion::Actions::CreateAdjustment at ./spec/models/spree/promotion/actions/create_adjustment_spec.rb.#perform creates a discount accessible through both order_id and adjustable_id.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3\"}}","rspec.Spree::Promotion::Actions::CreateAdjustment at ./spec/models/spree/promotion/actions/create_adjustment_spec.rb.#perform creates a discount with correct negative amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","rspec.Spree::Promotion::Actions::CreateAdjustment at ./spec/models/spree/promotion/actions/create_adjustment_spec.rb.#perform does not apply an adjustment if the amount is 0.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","rspec.Spree::Promotion::Actions::CreateAdjustment at ./spec/models/spree/promotion/actions/create_adjustment_spec.rb.#perform does not create a discount when order already has one from this promotion.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4\"}}","rspec.Spree::Promotion::Actions::CreateAdjustment at ./spec/models/spree/promotion/actions/create_adjustment_spec.rb.behaves like an adjustment source #destroy when order incomplete example at ./spec/support/concerns/adjustment_source.rb:21.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","rspec.Spree::Promotion::Actions::CreateAdjustment at ./spec/models/spree/promotion/actions/create_adjustment_spec.rb.behaves like an adjustment source #destroy when order is complete example at ./spec/support/concerns/adjustment_source.rb:27.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","rspec.Spree::Promotion::Actions::CreateAdjustment at ./spec/models/spree/promotion/actions/create_adjustment_spec.rb.behaves like an adjustment source #destroy when order is complete example at ./spec/support/concerns/adjustment_source.rb:28.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:2\"}}","rspec.Spree::Promotion::Actions::CreateItemAdjustments at ./spec/models/spree/promotion/actions/create_item_adjustments_spec.rb.#compute_amount when the adjustable is actionable calculator returns amount greater than item total does not exceed it.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:2:1\"}}","rspec.Spree::Promotion::Actions::CreateItemAdjustments at ./spec/models/spree/promotion/actions/create_item_adjustments_spec.rb.#compute_amount when the adjustable is actionable calls compute on the calculator.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","rspec.Spree::Promotion::Actions::CreateItemAdjustments at ./spec/models/spree/promotion/actions/create_item_adjustments_spec.rb.#compute_amount when the adjustable is actionable given other promotions with order adjustment should not consider not eligible adjustments.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:3:1\"}}","rspec.Spree::Promotion::Actions::CreateItemAdjustments at ./spec/models/spree/promotion/actions/create_item_adjustments_spec.rb.#compute_amount when the adjustable is actionable given other promotions with order adjustment when adjustments total is greater than item total does not exceed it.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:3:2:1\"}}","rspec.Spree::Promotion::Actions::CreateItemAdjustments at ./spec/models/spree/promotion/actions/create_item_adjustments_spec.rb.#compute_amount when the adjustable is not actionable returns 0.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","rspec.Spree::Promotion::Actions::CreateItemAdjustments at ./spec/models/spree/promotion/actions/create_item_adjustments_spec.rb.#destroy destroys adjustments for incompleted orders.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","rspec.Spree::Promotion::Actions::CreateItemAdjustments at ./spec/models/spree/promotion/actions/create_item_adjustments_spec.rb.#destroy doesnt mess with unrelated adjustments.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3\"}}","rspec.Spree::Promotion::Actions::CreateItemAdjustments at ./spec/models/spree/promotion/actions/create_item_adjustments_spec.rb.#destroy nullifies adjustments for completed orders.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2\"}}","rspec.Spree::Promotion::Actions::CreateItemAdjustments at ./spec/models/spree/promotion/actions/create_item_adjustments_spec.rb.#perform when calculator computes 0 does not create an adjustment when calculator returns 0.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","rspec.Spree::Promotion::Actions::CreateItemAdjustments at ./spec/models/spree/promotion/actions/create_item_adjustments_spec.rb.#perform when calculator returns a non-zero value creates adjustment with item as adjustable.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","rspec.Spree::Promotion::Actions::CreateItemAdjustments at ./spec/models/spree/promotion/actions/create_item_adjustments_spec.rb.#perform when calculator returns a non-zero value creates adjustment with self as source.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:2\"}}","rspec.Spree::Promotion::Actions::CreateItemAdjustments at ./spec/models/spree/promotion/actions/create_item_adjustments_spec.rb.#perform when calculator returns a non-zero value does not perform twice on the same item.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:3\"}}","rspec.Spree::Promotion::Actions::CreateItemAdjustments at ./spec/models/spree/promotion/actions/create_item_adjustments_spec.rb.#perform when calculator returns a non-zero value with products rules does not create adjustments for line_items not in product rule.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:4:1\"}}","rspec.Spree::Promotion::Actions::CreateItemAdjustments at ./spec/models/spree/promotion/actions/create_item_adjustments_spec.rb.behaves like an adjustment source #destroy when order incomplete example at ./spec/support/concerns/adjustment_source.rb:21.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","rspec.Spree::Promotion::Actions::CreateItemAdjustments at ./spec/models/spree/promotion/actions/create_item_adjustments_spec.rb.behaves like an adjustment source #destroy when order is complete example at ./spec/support/concerns/adjustment_source.rb:27.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","rspec.Spree::Promotion::Actions::CreateItemAdjustments at ./spec/models/spree/promotion/actions/create_item_adjustments_spec.rb.behaves like an adjustment source #destroy when order is complete example at ./spec/support/concerns/adjustment_source.rb:28.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:2\"}}","rspec.Spree::Promotion::Actions::CreateLineItems at ./spec/models/spree/promotion/actions/create_line_items_spec.rb.#handle_promotion_action_line_items creates new promotion action line items.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","rspec.Spree::Promotion::Actions::CreateLineItems at ./spec/models/spree/promotion/actions/create_line_items_spec.rb.#handle_promotion_action_line_items with existing promotion action line items updates existing promotion action line items.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","rspec.Spree::Promotion::Actions::CreateLineItems at ./spec/models/spree/promotion/actions/create_line_items_spec.rb.#handle_promotion_action_line_items with items marked for destruction removes items marked for destruction.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3:1\"}}","rspec.Spree::Promotion::Actions::CreateLineItems at ./spec/models/spree/promotion/actions/create_line_items_spec.rb.#item_available? returns false if the item is out of stock.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.Spree::Promotion::Actions::CreateLineItems at ./spec/models/spree/promotion/actions/create_line_items_spec.rb.#item_available? returns true if the item is in stock.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","rspec.Spree::Promotion::Actions::CreateLineItems at ./spec/models/spree/promotion/actions/create_line_items_spec.rb.#perform order is eligible adds line items to order with correct variant and quantity.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","rspec.Spree::Promotion::Actions::CreateLineItems at ./spec/models/spree/promotion/actions/create_line_items_spec.rb.#perform order is eligible doesn't add if the quantity is greater.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3\"}}","rspec.Spree::Promotion::Actions::CreateLineItems at ./spec/models/spree/promotion/actions/create_line_items_spec.rb.#perform order is eligible doesn't try to add an item if it's out of stock.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:4\"}}","rspec.Spree::Promotion::Actions::CreateLineItems at ./spec/models/spree/promotion/actions/create_line_items_spec.rb.#perform order is eligible only adds the delta of quantity to an order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2\"}}","rspec.Spree::Promotion::Actions::FreeShipping at ./spec/models/spree/promotion/actions/free_shipping_spec.rb.#perform creates a discount with correct negative amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.Spree::Promotion::Actions::FreeShipping at ./spec/models/spree/promotion/actions/free_shipping_spec.rb.#perform does not create a discount when order already has one from this promotion.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","rspec.Spree::Promotion::Actions::FreeShipping at ./spec/models/spree/promotion/actions/free_shipping_spec.rb.#perform when shipping methods are configured to be free can create adjustment with amount equal to 0.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:1\"}}","rspec.Spree::Promotion::Actions::FreeShipping at ./spec/models/spree/promotion/actions/free_shipping_spec.rb.behaves like an adjustment source #destroy when order incomplete example at ./spec/support/concerns/adjustment_source.rb:21.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","rspec.Spree::Promotion::Actions::FreeShipping at ./spec/models/spree/promotion/actions/free_shipping_spec.rb.behaves like an adjustment source #destroy when order is complete example at ./spec/support/concerns/adjustment_source.rb:27.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","rspec.Spree::Promotion::Actions::FreeShipping at ./spec/models/spree/promotion/actions/free_shipping_spec.rb.behaves like an adjustment source #destroy when order is complete example at ./spec/support/concerns/adjustment_source.rb:28.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:2\"}}","rspec.Spree::Promotion::Rules::Country at ./spec/models/spree/promotion/rules/country_spec.rb.preferred country is not set is eligible for default country.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","rspec.Spree::Promotion::Rules::Country at ./spec/models/spree/promotion/rules/country_spec.rb.preferred country is not set is not eligible for incorrect country.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","rspec.Spree::Promotion::Rules::Country at ./spec/models/spree/promotion/rules/country_spec.rb.preferred country_id is set is eligible for correct country.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::Promotion::Rules::Country at ./spec/models/spree/promotion/rules/country_spec.rb.preferred country_id is set is not eligible for incorrect country.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","rspec.Spree::Promotion::Rules::Country at ./spec/models/spree/promotion/rules/country_spec.rb.preferred country_iso is set is eligible for correct country.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.Spree::Promotion::Rules::Country at ./spec/models/spree/promotion/rules/country_spec.rb.preferred country_iso is set is not eligible for incorrect country.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","rspec.Spree::Promotion::Rules::Currency at ./spec/models/spree/promotion/rules/currency_spec.rb.#applicable? when promotable is an order example at ./spec/models/spree/promotion/rules/currency_spec.rb:31.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","rspec.Spree::Promotion::Rules::Currency at ./spec/models/spree/promotion/rules/currency_spec.rb.#applicable? when promotable is not an order example at ./spec/models/spree/promotion/rules/currency_spec.rb:36.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","rspec.Spree::Promotion::Rules::Currency at ./spec/models/spree/promotion/rules/currency_spec.rb.preferred currency is set is eligible for correct currency.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::Promotion::Rules::Currency at ./spec/models/spree/promotion/rules/currency_spec.rb.preferred currency is set is not eligible for incorrect currency.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","rspec.Spree::Promotion::Rules::CustomerGroup at ./spec/models/spree/promotion/rules/customer_group_spec.rb.#applicable? returns false for non-orders.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","rspec.Spree::Promotion::Rules::CustomerGroup at ./spec/models/spree/promotion/rules/customer_group_spec.rb.#applicable? returns true for orders.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::Promotion::Rules::CustomerGroup at ./spec/models/spree/promotion/rules/customer_group_spec.rb.#eligible? when customer_group_ids contains strings is eligible.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:6:1\"}}","rspec.Spree::Promotion::Rules::CustomerGroup at ./spec/models/spree/promotion/rules/customer_group_spec.rb.#eligible? when no customer groups are configured is not eligible.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","rspec.Spree::Promotion::Rules::CustomerGroup at ./spec/models/spree/promotion/rules/customer_group_spec.rb.#eligible? when order has no user is not eligible.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","rspec.Spree::Promotion::Rules::CustomerGroup at ./spec/models/spree/promotion/rules/customer_group_spec.rb.#eligible? when user is in one of multiple configured customer groups is eligible.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:5:1\"}}","rspec.Spree::Promotion::Rules::CustomerGroup at ./spec/models/spree/promotion/rules/customer_group_spec.rb.#eligible? when user is in the customer group is eligible.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:1\"}}","rspec.Spree::Promotion::Rules::CustomerGroup at ./spec/models/spree/promotion/rules/customer_group_spec.rb.#eligible? when user is not in any configured customer group is not eligible.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:4:1\"}}","rspec.Spree::Promotion::Rules::FirstOrder at ./spec/models/spree/promotion/rules/first_order_spec.rb.first order for a guest user with another order example at ./spec/models/spree/promotion/rules/first_order_spec.rb:70.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:2:1\"}}","rspec.Spree::Promotion::Rules::FirstOrder at ./spec/models/spree/promotion/rules/first_order_spec.rb.first order for a guest user with another order sets an error message.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:2:2\"}}","rspec.Spree::Promotion::Rules::FirstOrder at ./spec/models/spree/promotion/rules/first_order_spec.rb.first order for a guest user with no other orders example at ./spec/models/spree/promotion/rules/first_order_spec.rb:64.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1:1\"}}","rspec.Spree::Promotion::Rules::FirstOrder at ./spec/models/spree/promotion/rules/first_order_spec.rb.first order for a signed user with completed orders is eligible when checked against first completed order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:2:1\"}}","rspec.Spree::Promotion::Rules::FirstOrder at ./spec/models/spree/promotion/rules/first_order_spec.rb.first order for a signed user with completed orders with another order example at ./spec/models/spree/promotion/rules/first_order_spec.rb:47.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:2:2:1\"}}","rspec.Spree::Promotion::Rules::FirstOrder at ./spec/models/spree/promotion/rules/first_order_spec.rb.first order for a signed user with completed orders with another order sets an error message.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:2:2:2\"}}","rspec.Spree::Promotion::Rules::FirstOrder at ./spec/models/spree/promotion/rules/first_order_spec.rb.first order for a signed user with no completed orders example at ./spec/models/spree/promotion/rules/first_order_spec.rb:25.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1:1\"}}","rspec.Spree::Promotion::Rules::FirstOrder at ./spec/models/spree/promotion/rules/first_order_spec.rb.first order for a signed user with no completed orders is eligible when user passed in payload data.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1:2\"}}","rspec.Spree::Promotion::Rules::FirstOrder at ./spec/models/spree/promotion/rules/first_order_spec.rb.without a user or email example at ./spec/models/spree/promotion/rules/first_order_spec.rb:11.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::Promotion::Rules::FirstOrder at ./spec/models/spree/promotion/rules/first_order_spec.rb.without a user or email sets an error message.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","rspec.Spree::Promotion::Rules::ItemTotal at ./spec/models/spree/promotion/rules/item_total_spec.rb.preferred operator set to gt and preferred operator_max set to lte and item total is equal to the preferred maximum amount is not eligible.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","rspec.Spree::Promotion::Rules::ItemTotal at ./spec/models/spree/promotion/rules/item_total_spec.rb.preferred operator set to gt and preferred operator_max set to lte and item total is higher than the preferred maximum amount is not eligible.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:1\"}}","rspec.Spree::Promotion::Rules::ItemTotal at ./spec/models/spree/promotion/rules/item_total_spec.rb.preferred operator set to gt and preferred operator_max set to lte and item total is higher than the preferred maximum amount set an error message.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:2\"}}","rspec.Spree::Promotion::Rules::ItemTotal at ./spec/models/spree/promotion/rules/item_total_spec.rb.preferred operator set to gt and preferred operator_max set to lte and item total is lower than preferred maximum amount and item total is equal to the preferred minimum amount is not eligible.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:2:1\"}}","rspec.Spree::Promotion::Rules::ItemTotal at ./spec/models/spree/promotion/rules/item_total_spec.rb.preferred operator set to gt and preferred operator_max set to lte and item total is lower than preferred maximum amount and item total is equal to the preferred minimum amount set an error message.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:2:2\"}}","rspec.Spree::Promotion::Rules::ItemTotal at ./spec/models/spree/promotion/rules/item_total_spec.rb.preferred operator set to gt and preferred operator_max set to lte and item total is lower than preferred maximum amount and item total is higher than preferred minimum amount is eligible.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1:1\"}}","rspec.Spree::Promotion::Rules::ItemTotal at ./spec/models/spree/promotion/rules/item_total_spec.rb.preferred operator set to gt and preferred operator_max set to lte and item total is lower than preferred maximum amount and item total is lower to the preferred minimum amount is not eligible.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:3:1\"}}","rspec.Spree::Promotion::Rules::ItemTotal at ./spec/models/spree/promotion/rules/item_total_spec.rb.preferred operator set to gt and preferred operator_max set to lte and item total is lower than preferred maximum amount and item total is lower to the preferred minimum amount set an error message.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:3:2\"}}","rspec.Spree::Promotion::Rules::ItemTotal at ./spec/models/spree/promotion/rules/item_total_spec.rb.preferred operator set to gte and preferred operator_max set to lt and item total is equal to the preferred maximum amount is not eligible.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","rspec.Spree::Promotion::Rules::ItemTotal at ./spec/models/spree/promotion/rules/item_total_spec.rb.preferred operator set to gte and preferred operator_max set to lt and item total is equal to the preferred maximum amount set an error message.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:2\"}}","rspec.Spree::Promotion::Rules::ItemTotal at ./spec/models/spree/promotion/rules/item_total_spec.rb.preferred operator set to gte and preferred operator_max set to lt and item total is higher than the preferred maximum amount is not eligible.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3:1\"}}","rspec.Spree::Promotion::Rules::ItemTotal at ./spec/models/spree/promotion/rules/item_total_spec.rb.preferred operator set to gte and preferred operator_max set to lt and item total is higher than the preferred maximum amount set an error message.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3:2\"}}","rspec.Spree::Promotion::Rules::ItemTotal at ./spec/models/spree/promotion/rules/item_total_spec.rb.preferred operator set to gte and preferred operator_max set to lt and item total is lower than preferred maximum amount and item total is equal to the preferred minimum amount is not eligible.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:2:1\"}}","rspec.Spree::Promotion::Rules::ItemTotal at ./spec/models/spree/promotion/rules/item_total_spec.rb.preferred operator set to gte and preferred operator_max set to lt and item total is lower than preferred maximum amount and item total is higher than preferred minimum amount is eligible.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1:1\"}}","rspec.Spree::Promotion::Rules::ItemTotal at ./spec/models/spree/promotion/rules/item_total_spec.rb.preferred operator set to gte and preferred operator_max set to lt and item total is lower than preferred maximum amount and item total is lower to the preferred minimum amount is not eligible.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:3:1\"}}","rspec.Spree::Promotion::Rules::ItemTotal at ./spec/models/spree/promotion/rules/item_total_spec.rb.preferred operator set to gte and preferred operator_max set to lt and item total is lower than preferred maximum amount and item total is lower to the preferred minimum amount set an error message.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:3:2\"}}","rspec.Spree::Promotion::Rules::ItemTotal at ./spec/models/spree/promotion/rules/item_total_spec.rb.preferred operator set to gte and preferred operator_max set to lte and item total is equal to the preferred maximum amount is not eligible.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1\"}}","rspec.Spree::Promotion::Rules::ItemTotal at ./spec/models/spree/promotion/rules/item_total_spec.rb.preferred operator set to gte and preferred operator_max set to lte and item total is higher than the preferred maximum amount is not eligible.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3:1\"}}","rspec.Spree::Promotion::Rules::ItemTotal at ./spec/models/spree/promotion/rules/item_total_spec.rb.preferred operator set to gte and preferred operator_max set to lte and item total is higher than the preferred maximum amount set an error message.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3:2\"}}","rspec.Spree::Promotion::Rules::ItemTotal at ./spec/models/spree/promotion/rules/item_total_spec.rb.preferred operator set to gte and preferred operator_max set to lte and item total is lower than preferred maximum amount and item total is equal to the preferred minimum amount is not eligible.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:2:1\"}}","rspec.Spree::Promotion::Rules::ItemTotal at ./spec/models/spree/promotion/rules/item_total_spec.rb.preferred operator set to gte and preferred operator_max set to lte and item total is lower than preferred maximum amount and item total is higher than preferred minimum amount is eligible.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1:1\"}}","rspec.Spree::Promotion::Rules::ItemTotal at ./spec/models/spree/promotion/rules/item_total_spec.rb.preferred operator set to gte and preferred operator_max set to lte and item total is lower than preferred maximum amount and item total is lower to the preferred minimum amount is not eligible.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:3:1\"}}","rspec.Spree::Promotion::Rules::ItemTotal at ./spec/models/spree/promotion/rules/item_total_spec.rb.preferred operator set to gte and preferred operator_max set to lte and item total is lower than preferred maximum amount and item total is lower to the preferred minimum amount set an error message.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:3:2\"}}","rspec.Spree::Promotion::Rules::ItemTotal at ./spec/models/spree/promotion/rules/item_total_spec.rb.preferred operator_min set to gt and preferred operator_max set to lt and item total is equal to the preferred maximum amount is not eligible.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","rspec.Spree::Promotion::Rules::ItemTotal at ./spec/models/spree/promotion/rules/item_total_spec.rb.preferred operator_min set to gt and preferred operator_max set to lt and item total is equal to the preferred maximum amount set an error message.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2\"}}","rspec.Spree::Promotion::Rules::ItemTotal at ./spec/models/spree/promotion/rules/item_total_spec.rb.preferred operator_min set to gt and preferred operator_max set to lt and item total is higher than the preferred maximum amount is not eligible.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","rspec.Spree::Promotion::Rules::ItemTotal at ./spec/models/spree/promotion/rules/item_total_spec.rb.preferred operator_min set to gt and preferred operator_max set to lt and item total is higher than the preferred maximum amount set an error message.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:2\"}}","rspec.Spree::Promotion::Rules::ItemTotal at ./spec/models/spree/promotion/rules/item_total_spec.rb.preferred operator_min set to gt and preferred operator_max set to lt and item total is lower than preferred maximum amount and item total is equal to the preferred minimum amount is not eligible.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","rspec.Spree::Promotion::Rules::ItemTotal at ./spec/models/spree/promotion/rules/item_total_spec.rb.preferred operator_min set to gt and preferred operator_max set to lt and item total is lower than preferred maximum amount and item total is equal to the preferred minimum amount set an error message.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:2\"}}","rspec.Spree::Promotion::Rules::ItemTotal at ./spec/models/spree/promotion/rules/item_total_spec.rb.preferred operator_min set to gt and preferred operator_max set to lt and item total is lower than preferred maximum amount and item total is higher than preferred minimum amount is eligible.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","rspec.Spree::Promotion::Rules::ItemTotal at ./spec/models/spree/promotion/rules/item_total_spec.rb.preferred operator_min set to gt and preferred operator_max set to lt and item total is lower than preferred maximum amount and item total is lower to the preferred minimum amount is not eligible.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:1\"}}","rspec.Spree::Promotion::Rules::ItemTotal at ./spec/models/spree/promotion/rules/item_total_spec.rb.preferred operator_min set to gt and preferred operator_max set to lt and item total is lower than preferred maximum amount and item total is lower to the preferred minimum amount set an error message.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:2\"}}","rspec.Spree::Promotion::Rules::ItemTotal at ./spec/models/spree/promotion/rules/item_total_spec.rb.when preferred amount max is not set and item total is equal to the preferred minimum amount is not eligible.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1\"}}","rspec.Spree::Promotion::Rules::ItemTotal at ./spec/models/spree/promotion/rules/item_total_spec.rb.when preferred amount max is not set and item total is equal to the preferred minimum amount set an error message.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:2\"}}","rspec.Spree::Promotion::Rules::ItemTotal at ./spec/models/spree/promotion/rules/item_total_spec.rb.when preferred amount max is not set and item total is higher than preferred minimum amount is eligible.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:1\"}}","rspec.Spree::Promotion::Rules::ItemTotal at ./spec/models/spree/promotion/rules/item_total_spec.rb.when preferred amount max is not set and item total is lower than preferred minimum amount is not eligible.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3:1\"}}","rspec.Spree::Promotion::Rules::ItemTotal at ./spec/models/spree/promotion/rules/item_total_spec.rb.when preferred amount max is not set and item total is lower than preferred minimum amount set an error message.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3:2\"}}","rspec.Spree::Promotion::Rules::OneUsePerUser at ./spec/models/spree/promotion/rules/one_use_per_user_spec.rb.#eligible?(order) when the order is assigned to a user when the user has not used this promotion before example at ./spec/models/spree/promotion/rules/one_use_per_user_spec.rb:32.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","rspec.Spree::Promotion::Rules::OneUsePerUser at ./spec/models/spree/promotion/rules/one_use_per_user_spec.rb.#eligible?(order) when the order is assigned to a user when the user has used this promotion before example at ./spec/models/spree/promotion/rules/one_use_per_user_spec.rb:23.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","rspec.Spree::Promotion::Rules::OneUsePerUser at ./spec/models/spree/promotion/rules/one_use_per_user_spec.rb.#eligible?(order) when the order is assigned to a user when the user has used this promotion before sets an error message.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:2\"}}","rspec.Spree::Promotion::Rules::OneUsePerUser at ./spec/models/spree/promotion/rules/one_use_per_user_spec.rb.#eligible?(order) when the order is not assigned to a user example at ./spec/models/spree/promotion/rules/one_use_per_user_spec.rb:39.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","rspec.Spree::Promotion::Rules::OneUsePerUser at ./spec/models/spree/promotion/rules/one_use_per_user_spec.rb.#eligible?(order) when the order is not assigned to a user sets an error message.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2\"}}","rspec.Spree::Promotion::Rules::OptionValue at ./spec/models/spree/promotion/rules/option_value_spec.rb.#actionable? when the line item has the correct product when all of the option values match example at ./spec/models/spree/promotion/rules/option_value_spec.rb:99.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1:1\"}}","rspec.Spree::Promotion::Rules::OptionValue at ./spec/models/spree/promotion/rules/option_value_spec.rb.#actionable? when the line item has the correct product when not all of the option values match example at ./spec/models/spree/promotion/rules/option_value_spec.rb:110.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:2:1\"}}","rspec.Spree::Promotion::Rules::OptionValue at ./spec/models/spree/promotion/rules/option_value_spec.rb.#actionable? when the line item's product doesn't match example at ./spec/models/spree/promotion/rules/option_value_spec.rb:122.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1\"}}","rspec.Spree::Promotion::Rules::OptionValue at ./spec/models/spree/promotion/rules/option_value_spec.rb.#applicable? when promotable is an order example at ./spec/models/spree/promotion/rules/option_value_spec.rb:26.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","rspec.Spree::Promotion::Rules::OptionValue at ./spec/models/spree/promotion/rules/option_value_spec.rb.#applicable? when promotable is not an order example at ./spec/models/spree/promotion/rules/option_value_spec.rb:32.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","rspec.Spree::Promotion::Rules::OptionValue at ./spec/models/spree/promotion/rules/option_value_spec.rb.#eligible? when there are any applicable line items example at ./spec/models/spree/promotion/rules/option_value_spec.rb:48.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","rspec.Spree::Promotion::Rules::OptionValue at ./spec/models/spree/promotion/rules/option_value_spec.rb.#eligible? when there are no applicable line items example at ./spec/models/spree/promotion/rules/option_value_spec.rb:56.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","rspec.Spree::Promotion::Rules::OptionValue at ./spec/models/spree/promotion/rules/option_value_spec.rb.setting eligible values parses ids.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::Promotion::Rules::Product at ./spec/models/spree/promotion/rules/product_spec.rb.#actionable? with 'all' match policy for product in rule example at ./spec/models/spree/promotion/rules/product_spec.rb:128.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1:1\"}}","rspec.Spree::Promotion::Rules::Product at ./spec/models/spree/promotion/rules/product_spec.rb.#actionable? with 'all' match policy for product not in rule example at ./spec/models/spree/promotion/rules/product_spec.rb:134.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:2:1\"}}","rspec.Spree::Promotion::Rules::Product at ./spec/models/spree/promotion/rules/product_spec.rb.#actionable? with 'any' match policy for product in rule example at ./spec/models/spree/promotion/rules/product_spec.rb:112.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1:1\"}}","rspec.Spree::Promotion::Rules::Product at ./spec/models/spree/promotion/rules/product_spec.rb.#actionable? with 'any' match policy for product not in rule example at ./spec/models/spree/promotion/rules/product_spec.rb:118.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:2:1\"}}","rspec.Spree::Promotion::Rules::Product at ./spec/models/spree/promotion/rules/product_spec.rb.#actionable? with 'none' match policy for product in rule example at ./spec/models/spree/promotion/rules/product_spec.rb:144.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:1:1\"}}","rspec.Spree::Promotion::Rules::Product at ./spec/models/spree/promotion/rules/product_spec.rb.#actionable? with 'none' match policy for product not in rule example at ./spec/models/spree/promotion/rules/product_spec.rb:150.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:2:1\"}}","rspec.Spree::Promotion::Rules::Product at ./spec/models/spree/promotion/rules/product_spec.rb.#add_products adds the products to the rule.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","rspec.Spree::Promotion::Rules::Product at ./spec/models/spree/promotion/rules/product_spec.rb.#add_products does not remove the products when nil is passed.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3\"}}","rspec.Spree::Promotion::Rules::Product at ./spec/models/spree/promotion/rules/product_spec.rb.#add_products removes the products from the rule.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","rspec.Spree::Promotion::Rules::Product at ./spec/models/spree/promotion/rules/product_spec.rb.#add_products touches the record to invalidate cache.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4\"}}","rspec.Spree::Promotion::Rules::Product at ./spec/models/spree/promotion/rules/product_spec.rb.#eligible?(order) is eligible if there are no products.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::Promotion::Rules::Product at ./spec/models/spree/promotion/rules/product_spec.rb.#eligible?(order) with 'all' match policy is eligible if all of the eligible products are ordered.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","rspec.Spree::Promotion::Rules::Product at ./spec/models/spree/promotion/rules/product_spec.rb.#eligible?(order) with 'all' match policy when any of the eligible products is not ordered example at ./spec/models/spree/promotion/rules/product_spec.rb:58.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:2:1\"}}","rspec.Spree::Promotion::Rules::Product at ./spec/models/spree/promotion/rules/product_spec.rb.#eligible?(order) with 'all' match policy when any of the eligible products is not ordered sets an error message.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:2:2\"}}","rspec.Spree::Promotion::Rules::Product at ./spec/models/spree/promotion/rules/product_spec.rb.#eligible?(order) with 'any' match policy is eligible if any of the products is in eligible products.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","rspec.Spree::Promotion::Rules::Product at ./spec/models/spree/promotion/rules/product_spec.rb.#eligible?(order) with 'any' match policy when none of the products are eligible products example at ./spec/models/spree/promotion/rules/product_spec.rb:34.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:1\"}}","rspec.Spree::Promotion::Rules::Product at ./spec/models/spree/promotion/rules/product_spec.rb.#eligible?(order) with 'any' match policy when none of the products are eligible products sets an error message.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:2\"}}","rspec.Spree::Promotion::Rules::Product at ./spec/models/spree/promotion/rules/product_spec.rb.#eligible?(order) with 'none' match policy is eligible if none of the order's products are in eligible products.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1\"}}","rspec.Spree::Promotion::Rules::Product at ./spec/models/spree/promotion/rules/product_spec.rb.#eligible?(order) with 'none' match policy when any of the order's products are in eligible products example at ./spec/models/spree/promotion/rules/product_spec.rb:82.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:2:1\"}}","rspec.Spree::Promotion::Rules::Product at ./spec/models/spree/promotion/rules/product_spec.rb.#eligible?(order) with 'none' match policy when any of the order's products are in eligible products sets an error message.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:2:2\"}}","rspec.Spree::Promotion::Rules::Taxon at ./spec/models/spree/promotion/rules/taxon_spec.rb.#add_taxons adds the taxons to the rule.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.Spree::Promotion::Rules::Taxon at ./spec/models/spree/promotion/rules/taxon_spec.rb.#add_taxons does not remove the taxons when nil is passed.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3\"}}","rspec.Spree::Promotion::Rules::Taxon at ./spec/models/spree/promotion/rules/taxon_spec.rb.#add_taxons removes the taxons from the rule.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","rspec.Spree::Promotion::Rules::Taxon at ./spec/models/spree/promotion/rules/taxon_spec.rb.#eligible?(order) with all match policy is eligible order has all preferred taxons.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","rspec.Spree::Promotion::Rules::Taxon at ./spec/models/spree/promotion/rules/taxon_spec.rb.#eligible?(order) with all match policy when a product has a taxon child of a taxon rule example at ./spec/models/spree/promotion/rules/taxon_spec.rb:99.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:3:1\"}}","rspec.Spree::Promotion::Rules::Taxon at ./spec/models/spree/promotion/rules/taxon_spec.rb.#eligible?(order) with all match policy when order does not have all preferred taxons example at ./spec/models/spree/promotion/rules/taxon_spec.rb:80.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:1\"}}","rspec.Spree::Promotion::Rules::Taxon at ./spec/models/spree/promotion/rules/taxon_spec.rb.#eligible?(order) with all match policy when order does not have all preferred taxons sets an error message.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:2\"}}","rspec.Spree::Promotion::Rules::Taxon at ./spec/models/spree/promotion/rules/taxon_spec.rb.#eligible?(order) with any match policy is eligible if order does has any preferred taxon.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","rspec.Spree::Promotion::Rules::Taxon at ./spec/models/spree/promotion/rules/taxon_spec.rb.#eligible?(order) with any match policy when a product has a taxon child of a taxon rule example at ./spec/models/spree/promotion/rules/taxon_spec.rb:59.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:4:1\"}}","rspec.Spree::Promotion::Rules::Taxon at ./spec/models/spree/promotion/rules/taxon_spec.rb.#eligible?(order) with any match policy when order contains items from different taxons acts on a product within the eligible taxon.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","rspec.Spree::Promotion::Rules::Taxon at ./spec/models/spree/promotion/rules/taxon_spec.rb.#eligible?(order) with any match policy when order contains items from different taxons does not act on a product in another taxon.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:2\"}}","rspec.Spree::Promotion::Rules::Taxon at ./spec/models/spree/promotion/rules/taxon_spec.rb.#eligible?(order) with any match policy when order does not have any preferred taxon example at ./spec/models/spree/promotion/rules/taxon_spec.rb:44.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:1\"}}","rspec.Spree::Promotion::Rules::Taxon at ./spec/models/spree/promotion/rules/taxon_spec.rb.#eligible?(order) with any match policy when order does not have any preferred taxon sets an error message.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:2\"}}","rspec.Spree::Promotion::Rules::User at ./spec/models/spree/promotion/rules/user_spec.rb.#add_users adds users to the promotion rule.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.Spree::Promotion::Rules::User at ./spec/models/spree/promotion/rules/user_spec.rb.#add_users does not remove the users when nil is passed.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3\"}}","rspec.Spree::Promotion::Rules::User at ./spec/models/spree/promotion/rules/user_spec.rb.#add_users removes users from the promotion rule.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","rspec.Spree::Promotion::Rules::User at ./spec/models/spree/promotion/rules/user_spec.rb.#add_users touches the record to invalidate cache.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:4\"}}","rspec.Spree::Promotion::Rules::User at ./spec/models/spree/promotion/rules/user_spec.rb.#eligible? can assign to user_ids.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","rspec.Spree::Promotion::Rules::User at ./spec/models/spree/promotion/rules/user_spec.rb.#eligible? is not eligible if users are not provided.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::Promotion::Rules::User at ./spec/models/spree/promotion/rules/user_spec.rb.#eligible? when users does not include user placing the order is not eligible if user placing the order is not listed.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","rspec.Spree::Promotion::Rules::User at ./spec/models/spree/promotion/rules/user_spec.rb.#eligible? when users include user placing the order is eligible if users include user placing the order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","rspec.Spree::Promotion::Rules::UserLoggedIn at ./spec/models/spree/promotion/rules/user_logged_in_spec.rb.#eligible?(order) is eligible if order has an associated user.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::Promotion::Rules::UserLoggedIn at ./spec/models/spree/promotion/rules/user_logged_in_spec.rb.#eligible?(order) when user is not logged in example at ./spec/models/spree/promotion/rules/user_logged_in_spec.rb:19.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","rspec.Spree::Promotion::Rules::UserLoggedIn at ./spec/models/spree/promotion/rules/user_logged_in_spec.rb.#eligible?(order) when user is not logged in sets an error message.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2\"}}","rspec.Spree::PromotionAction at ./spec/models/spree/promotion_action_spec.rb.forces developer to implement 'perform' method.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","rspec.Spree::PromotionCategory at ./spec/models/spree/promotion_category_spec.rb.validation when all required attributes are specified example at ./spec/models/spree/promotion_category_spec.rb:10.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","rspec.Spree::PromotionCategory at ./spec/models/spree/promotion_category_spec.rb.validation when name is missing example at ./spec/models/spree/promotion_category_spec.rb:16.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","rspec.Spree::PromotionHandler::Cart at ./spec/models/spree/promotion_handler/cart_spec.rb.activates in LineItem level promotion has item total rule creates the adjustment.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","rspec.Spree::PromotionHandler::Cart at ./spec/models/spree/promotion_handler/cart_spec.rb.activates in LineItem level promotion includes item involved creates the adjustment.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","rspec.Spree::PromotionHandler::Cart at ./spec/models/spree/promotion_handler/cart_spec.rb.activates in LineItem level promotion with no rules creates the adjustment.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","rspec.Spree::PromotionHandler::Cart at ./spec/models/spree/promotion_handler/cart_spec.rb.activates in Order level promotion has item total rule creates the adjustment.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","rspec.Spree::PromotionHandler::Cart at ./spec/models/spree/promotion_handler/cart_spec.rb.activates in Order level promotion with no rules creates the adjustment.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","rspec.Spree::PromotionHandler::Cart at ./spec/models/spree/promotion_handler/cart_spec.rb.activates promotions associated with the order creates the adjustment.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","rspec.Spree::PromotionHandler::Coupon at ./spec/models/spree/promotion_handler/coupon_spec.rb.coupon code promotion doesnt exist doesnt fetch any promotion.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","rspec.Spree::PromotionHandler::Coupon at ./spec/models/spree/promotion_handler/coupon_spec.rb.coupon code promotion doesnt exist with no actions defined populates error message.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","rspec.Spree::PromotionHandler::Coupon at ./spec/models/spree/promotion_handler/coupon_spec.rb.existing coupon code promotion fetches with given code.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","rspec.Spree::PromotionHandler::Coupon at ./spec/models/spree/promotion_handler/coupon_spec.rb.existing coupon code promotion for an order with taxable line items and multiple quantity per line item successfully applies the promo.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:5:3:1\"}}","rspec.Spree::PromotionHandler::Coupon at ./spec/models/spree/promotion_handler/coupon_spec.rb.existing coupon code promotion for an order with taxable line items and the product price is greater than promo discount successfully applies the promo.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:5:2:1\"}}","rspec.Spree::PromotionHandler::Coupon at ./spec/models/spree/promotion_handler/coupon_spec.rb.existing coupon code promotion for an order with taxable line items and the product price is less than promo discount successfully applies the promo.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:5:1:1\"}}","rspec.Spree::PromotionHandler::Coupon at ./spec/models/spree/promotion_handler/coupon_spec.rb.existing coupon code promotion with a CreateLineItems action successfully activates promo.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:6:1\"}}","rspec.Spree::PromotionHandler::Coupon at ./spec/models/spree/promotion_handler/coupon_spec.rb.existing coupon code promotion with a free-shipping adjustment action right coupon code given coupon already applied to the order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3:1:2\"}}","rspec.Spree::PromotionHandler::Coupon at ./spec/models/spree/promotion_handler/coupon_spec.rb.existing coupon code promotion with a free-shipping adjustment action right coupon code given successfully activates promo.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3:1:1\"}}","rspec.Spree::PromotionHandler::Coupon at ./spec/models/spree/promotion_handler/coupon_spec.rb.existing coupon code promotion with a per-item adjustment action coexists with a non coupon code promo successfully activates promo.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:2:1\"}}","rspec.Spree::PromotionHandler::Coupon at ./spec/models/spree/promotion_handler/coupon_spec.rb.existing coupon code promotion with a per-item adjustment action right coupon given with correct coupon code casing calls update_with_updater!.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1:1:2\"}}","rspec.Spree::PromotionHandler::Coupon at ./spec/models/spree/promotion_handler/coupon_spec.rb.existing coupon code promotion with a per-item adjustment action right coupon given with correct coupon code casing coupon already applied to the order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1:1:3\"}}","rspec.Spree::PromotionHandler::Coupon at ./spec/models/spree/promotion_handler/coupon_spec.rb.existing coupon code promotion with a per-item adjustment action right coupon given with correct coupon code casing successfully activates promo.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1:1:1\"}}","rspec.Spree::PromotionHandler::Coupon at ./spec/models/spree/promotion_handler/coupon_spec.rb.existing coupon code promotion with a per-item adjustment action right coupon given with incorrect coupon code casing successfully activates promo.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1:2:1\"}}","rspec.Spree::PromotionHandler::Coupon at ./spec/models/spree/promotion_handler/coupon_spec.rb.existing coupon code promotion with a whole-order adjustment action right coupon given coupon already applied to the order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:4:1:2\"}}","rspec.Spree::PromotionHandler::Coupon at ./spec/models/spree/promotion_handler/coupon_spec.rb.existing coupon code promotion with a whole-order adjustment action right coupon given coupon code hit max usage.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:4:1:4\"}}","rspec.Spree::PromotionHandler::Coupon at ./spec/models/spree/promotion_handler/coupon_spec.rb.existing coupon code promotion with a whole-order adjustment action right coupon given coupon fails to activate.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:4:1:3\"}}","rspec.Spree::PromotionHandler::Coupon at ./spec/models/spree/promotion_handler/coupon_spec.rb.existing coupon code promotion with a whole-order adjustment action right coupon given successfully activates promo.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:4:1:1\"}}","rspec.Spree::PromotionHandler::Coupon at ./spec/models/spree/promotion_handler/coupon_spec.rb.existing coupon code promotion with a whole-order adjustment action right coupon given when the a new coupon is less good notifies of better deal.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:4:1:5:1\"}}","rspec.Spree::PromotionHandler::Coupon at ./spec/models/spree/promotion_handler/coupon_spec.rb.number of usages for one common promotion code hits max usage.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1:1\"}}","rspec.Spree::PromotionHandler::Coupon at ./spec/models/spree/promotion_handler/coupon_spec.rb.number of usages for one-time unique promotion codes behaves like allows to use coupon code one time only example at ./spec/models/spree/promotion_handler/coupon_spec.rb:442.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2:1:1\"}}","rspec.Spree::PromotionHandler::Coupon at ./spec/models/spree/promotion_handler/coupon_spec.rb.number of usages for one-time unique promotion codes behaves like allows to use coupon code one time only example at ./spec/models/spree/promotion_handler/coupon_spec.rb:442.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2:2:1\"}}","rspec.Spree::PromotionHandler::Coupon at ./spec/models/spree/promotion_handler/coupon_spec.rb.number of usages for one-time unique promotion codes promotion can be used as many times as it has coupon codes.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2:3\"}}","rspec.Spree::PromotionHandler::Coupon at ./spec/models/spree/promotion_handler/coupon_spec.rb.returns self in apply.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","rspec.Spree::PromotionHandler::Coupon at ./spec/models/spree/promotion_handler/coupon_spec.rb.status messages #set_error_code has error message.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:2\"}}","rspec.Spree::PromotionHandler::Coupon at ./spec/models/spree/promotion_handler/coupon_spec.rb.status messages #set_error_code has status_code.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","rspec.Spree::PromotionHandler::Coupon at ./spec/models/spree/promotion_handler/coupon_spec.rb.status messages #set_success_code has status_code.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","rspec.Spree::PromotionHandler::Coupon at ./spec/models/spree/promotion_handler/coupon_spec.rb.status messages #set_success_code has success message.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:2\"}}","rspec.Spree::PromotionHandler::Coupon at ./spec/models/spree/promotion_handler/coupon_spec.rb.with coupon codes valid coupon #remove removes the promotion.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:4:1\"}}","rspec.Spree::PromotionHandler::Coupon at ./spec/models/spree/promotion_handler/coupon_spec.rb.with coupon codes valid coupon #remove touches the promotion.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:4:2\"}}","rspec.Spree::PromotionHandler::Coupon at ./spec/models/spree/promotion_handler/coupon_spec.rb.with coupon codes valid coupon coupon already applied to the order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:2\"}}","rspec.Spree::PromotionHandler::Coupon at ./spec/models/spree/promotion_handler/coupon_spec.rb.with coupon codes valid coupon successfully activates promo.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:1\"}}","rspec.Spree::PromotionHandler::Coupon at ./spec/models/spree/promotion_handler/coupon_spec.rb.with coupon codes valid coupon with used coupon code does not activate promo.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:3:1\"}}","rspec.Spree::PromotionHandler::Coupon at ./spec/models/spree/promotion_handler/coupon_with_gift_card_spec.rb.#remove when gift card is applied removes gift card.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","rspec.Spree::PromotionHandler::Coupon at ./spec/models/spree/promotion_handler/coupon_with_gift_card_spec.rb.for a gift card apply when gift card is already redeemed returns error code.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:4:1\"}}","rspec.Spree::PromotionHandler::Coupon at ./spec/models/spree/promotion_handler/coupon_with_gift_card_spec.rb.for a gift card apply when gift card is expired returns error code.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:1\"}}","rspec.Spree::PromotionHandler::Coupon at ./spec/models/spree/promotion_handler/coupon_with_gift_card_spec.rb.for a gift card apply when gift card is not applied applies gift card.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","rspec.Spree::PromotionHandler::Coupon at ./spec/models/spree/promotion_handler/coupon_with_gift_card_spec.rb.for a gift card apply when the gift card is applied to another order doesn't apply the gift card to a new order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","rspec.Spree::PromotionHandler::FreeShipping at ./spec/models/spree/promotion_handler/free_shipping_spec.rb.activates in Shipment level creates the adjustment.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::PromotionHandler::FreeShipping at ./spec/models/spree/promotion_handler/free_shipping_spec.rb.if promo has a code does adjust the shipment when applied to order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.Spree::PromotionHandler::FreeShipping at ./spec/models/spree/promotion_handler/free_shipping_spec.rb.if promo has a code does not adjust the shipment when not applied to order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","rspec.Spree::PromotionHandler::FreeShipping at ./spec/models/spree/promotion_handler/free_shipping_spec.rb.if promo has a path does not adjust the shipment.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","rspec.Spree::PromotionHandler::FreeShipping at ./spec/models/spree/promotion_handler/free_shipping_spec.rb.if promo has multiple codes does adjust the shipment when applied to order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","rspec.Spree::PromotionHandler::FreeShipping at ./spec/models/spree/promotion_handler/free_shipping_spec.rb.if promo has multiple codes does not adjust the shipment when not applied to order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","rspec.Spree::PromotionHandler::Page at ./spec/models/spree/promotion_handler/page_spec.rb.activates at the right path.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","rspec.Spree::PromotionHandler::Page at ./spec/models/spree/promotion_handler/page_spec.rb.does not activate at the wrong path.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3\"}}","rspec.Spree::PromotionHandler::Page at ./spec/models/spree/promotion_handler/page_spec.rb.when promotion is expired is not activated.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.Spree::PromotionHandler::PromotionDuplicator at ./spec/models/spree/promotion_handler/promotion_duplicator_spec.rb.#duplicate model associations - action's calculator assigns a new calculator to promotion action.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:2\"}}","rspec.Spree::PromotionHandler::PromotionDuplicator at ./spec/models/spree/promotion_handler/promotion_duplicator_spec.rb.#duplicate model associations - action's calculator copies promotion action's calculator.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1\"}}","rspec.Spree::PromotionHandler::PromotionDuplicator at ./spec/models/spree/promotion_handler/promotion_duplicator_spec.rb.#duplicate model associations - actions assigns a new promotion action to new promotion.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:4\"}}","rspec.Spree::PromotionHandler::PromotionDuplicator at ./spec/models/spree/promotion_handler/promotion_duplicator_spec.rb.#duplicate model associations - actions copies all promotion actions.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","rspec.Spree::PromotionHandler::PromotionDuplicator at ./spec/models/spree/promotion_handler/promotion_duplicator_spec.rb.#duplicate model associations - actions copies promotion stores.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:2\"}}","rspec.Spree::PromotionHandler::PromotionDuplicator at ./spec/models/spree/promotion_handler/promotion_duplicator_spec.rb.#duplicate model associations - actions promotion action's fields (except promotion_id) are the same.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:3\"}}","rspec.Spree::PromotionHandler::PromotionDuplicator at ./spec/models/spree/promotion_handler/promotion_duplicator_spec.rb.#duplicate model associations - rules assigns a new promotion rule to new promotion.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:3\"}}","rspec.Spree::PromotionHandler::PromotionDuplicator at ./spec/models/spree/promotion_handler/promotion_duplicator_spec.rb.#duplicate model associations - rules copies all promotion rules.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","rspec.Spree::PromotionHandler::PromotionDuplicator at ./spec/models/spree/promotion_handler/promotion_duplicator_spec.rb.#duplicate model associations - rules promotion rule's fields (except promotion_id) are the same.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2\"}}","rspec.Spree::PromotionHandler::PromotionDuplicator at ./spec/models/spree/promotion_handler/promotion_duplicator_spec.rb.#duplicate model fields returns a duplicate of a promotion with all the fields (except the path, name and code fields) the same.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2\"}}","rspec.Spree::PromotionHandler::PromotionDuplicator at ./spec/models/spree/promotion_handler/promotion_duplicator_spec.rb.#duplicate model fields returns a duplicate of a promotion with the path, name and code fields changed.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","rspec.Spree::PromotionRule at ./spec/models/spree/promotion_rule_spec.rb.forces developer to implement eligible? method.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","rspec.Spree::PromotionRule at ./spec/models/spree/promotion_rule_spec.rb.validates unique rules for a promotion.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2\"}}","rspec.Spree::Property at ./spec/models/spree/property_spec.rb.#after_touch callback touches the product.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1\"}}","rspec.Spree::Property at ./spec/models/spree/property_spec.rb.#after_update callback with DEPENDENCY_UPDATE_FIELDS touches the product.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1:1\"}}","rspec.Spree::Property at ./spec/models/spree/property_spec.rb.#after_update callback without DEPENDENCY_UPDATE_FIELDS does not touch the product.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:2:1\"}}","rspec.Spree::Property at ./spec/models/spree/property_spec.rb.#ensure_product_properties_have_filter_params filterable property example at ./spec/models/spree/property_spec.rb:147.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1:1\"}}","rspec.Spree::Property at ./spec/models/spree/property_spec.rb.#ensure_product_properties_have_filter_params filterable property example at ./spec/models/spree/property_spec.rb:148.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1:2\"}}","rspec.Spree::Property at ./spec/models/spree/property_spec.rb.#ensure_product_properties_have_filter_params not-filterable property example at ./spec/models/spree/property_spec.rb:152.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2:1\"}}","rspec.Spree::Property at ./spec/models/spree/property_spec.rb.#kind_to_metafield_type returns the correct metafield type.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1\"}}","rspec.Spree::Property at ./spec/models/spree/property_spec.rb.#kind_to_metafield_type when the property kind is long_text returns the correct metafield type.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:2:1\"}}","rspec.Spree::Property at ./spec/models/spree/property_spec.rb.#kind_to_metafield_type when the property kind is number returns the correct metafield type.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:3:1\"}}","rspec.Spree::Property at ./spec/models/spree/property_spec.rb.#kind_to_metafield_type when the property kind is rich_text returns the correct metafield type.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:4:1\"}}","rspec.Spree::Property at ./spec/models/spree/property_spec.rb.#uniq_values example at ./spec/models/spree/property_spec.rb:78.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","rspec.Spree::Property at ./spec/models/spree/property_spec.rb.#uniq_values when caching correctly returns uniq values.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:3:1\"}}","rspec.Spree::Property at ./spec/models/spree/property_spec.rb.#uniq_values when narrowing the scope of product properties example at ./spec/models/spree/property_spec.rb:94.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2:1\"}}","rspec.Spree::Property at ./spec/models/spree/property_spec.rb.behaves like metadata can query records by metadata properties.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:10\"}}","rspec.Spree::Property at ./spec/models/spree/property_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:10.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","rspec.Spree::Property at ./spec/models/spree/property_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:11.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","rspec.Spree::Property at ./spec/models/spree/property_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:4.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::Property at ./spec/models/spree/property_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:5.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","rspec.Spree::Property at ./spec/models/spree/property_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:7.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","rspec.Spree::Property at ./spec/models/spree/property_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:8.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","rspec.Spree::Property at ./spec/models/spree/property_spec.rb.behaves like metadata reads data as not symbolized keys.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8\"}}","rspec.Spree::Property at ./spec/models/spree/property_spec.rb.behaves like metadata reads data as symbolized keys.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7\"}}","rspec.Spree::Property at ./spec/models/spree/property_spec.rb.callbacks #normalize_name should parameterize the name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1\"}}","rspec.Spree::Property at ./spec/models/spree/property_spec.rb.scopes .available example at ./spec/models/spree/property_spec.rb:35.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","rspec.Spree::Property at ./spec/models/spree/property_spec.rb.scopes .available_on_back_end example at ./spec/models/spree/property_spec.rb:47.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3:1\"}}","rspec.Spree::Property at ./spec/models/spree/property_spec.rb.scopes .available_on_front_end example at ./spec/models/spree/property_spec.rb:41.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","rspec.Spree::Property at ./spec/models/spree/property_spec.rb.setting filter param example at ./spec/models/spree/property_spec.rb:66.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","rspec.Spree::Property at ./spec/models/spree/property_spec.rb.translations translates property fields.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.Spree::Prototype at ./spec/models/spree/prototype_spec.rb.behaves like metadata can query records by metadata properties.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:10\"}}","rspec.Spree::Prototype at ./spec/models/spree/prototype_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:10.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","rspec.Spree::Prototype at ./spec/models/spree/prototype_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:11.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","rspec.Spree::Prototype at ./spec/models/spree/prototype_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:4.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::Prototype at ./spec/models/spree/prototype_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:5.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","rspec.Spree::Prototype at ./spec/models/spree/prototype_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:7.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","rspec.Spree::Prototype at ./spec/models/spree/prototype_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:8.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","rspec.Spree::Prototype at ./spec/models/spree/prototype_spec.rb.behaves like metadata reads data as not symbolized keys.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8\"}}","rspec.Spree::Prototype at ./spec/models/spree/prototype_spec.rb.behaves like metadata reads data as symbolized keys.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7\"}}","rspec.Spree::Publishable at ./spec/models/concerns/spree/publishable_spec.rb.#event_payload with a serializer defined returns the serialized payload.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","rspec.Spree::Publishable at ./spec/models/concerns/spree/publishable_spec.rb.#event_payload with anonymous class returns nil for event_serializer_class.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:1\"}}","rspec.Spree::Publishable at ./spec/models/concerns/spree/publishable_spec.rb.#event_payload without a serializer defined includes example code in the error message.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:2\"}}","rspec.Spree::Publishable at ./spec/models/concerns/spree/publishable_spec.rb.#event_payload without a serializer defined raises MissingSerializerError with helpful message.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","rspec.Spree::Publishable at ./spec/models/concerns/spree/publishable_spec.rb.#event_prefix returns the model name element.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","rspec.Spree::Publishable at ./spec/models/concerns/spree/publishable_spec.rb.#publish_event allows custom payload.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","rspec.Spree::Publishable at ./spec/models/concerns/spree/publishable_spec.rb.#publish_event does not publish when events are disabled.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","rspec.Spree::Publishable at ./spec/models/concerns/spree/publishable_spec.rb.#publish_event publishes an event with the model payload.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::Publishable at ./spec/models/concerns/spree/publishable_spec.rb..event_prefix can be customized.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2\"}}","rspec.Spree::Publishable at ./spec/models/concerns/spree/publishable_spec.rb..event_prefix derives from model name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","rspec.Spree::Publishable at ./spec/models/concerns/spree/publishable_spec.rb..publishes_lifecycle_events enables lifecycle events.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","rspec.Spree::Publishable at ./spec/models/concerns/spree/publishable_spec.rb..publishes_lifecycle_events with except option excludes specified callbacks.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:4:1\"}}","rspec.Spree::Publishable at ./spec/models/concerns/spree/publishable_spec.rb..publishes_lifecycle_events with only option only registers specified callbacks.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3:1\"}}","rspec.Spree::Publishable at ./spec/models/concerns/spree/publishable_spec.rb..publishes_lifecycle_events with skip_lifecycle_events disables event publishing for the model.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:5:1\"}}","rspec.Spree::RansackConfiguration at ./spec/lib/spree/core/ransack_configuration_spec.rb.#add_association adds an association to a model.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.Spree::RansackConfiguration at ./spec/lib/spree/core/ransack_configuration_spec.rb.#add_association adds to existing associations when called multiple times.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","rspec.Spree::RansackConfiguration at ./spec/lib/spree/core/ransack_configuration_spec.rb.#add_association does not duplicate associations.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3\"}}","rspec.Spree::RansackConfiguration at ./spec/lib/spree/core/ransack_configuration_spec.rb.#add_attribute adds an attribute to a model.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::RansackConfiguration at ./spec/lib/spree/core/ransack_configuration_spec.rb.#add_attribute adds to existing attributes when called multiple times.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","rspec.Spree::RansackConfiguration at ./spec/lib/spree/core/ransack_configuration_spec.rb.#add_attribute converts symbol to string.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","rspec.Spree::RansackConfiguration at ./spec/lib/spree/core/ransack_configuration_spec.rb.#add_attribute does not duplicate attributes.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","rspec.Spree::RansackConfiguration at ./spec/lib/spree/core/ransack_configuration_spec.rb.#add_scope adds a scope to a model.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","rspec.Spree::RansackConfiguration at ./spec/lib/spree/core/ransack_configuration_spec.rb.#add_scope adds to existing scopes when called multiple times.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","rspec.Spree::RansackConfiguration at ./spec/lib/spree/core/ransack_configuration_spec.rb.#add_scope does not duplicate scopes.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3\"}}","rspec.Spree::RansackConfiguration at ./spec/lib/spree/core/ransack_configuration_spec.rb.#custom_associations_for returns an empty array for models with no custom associations.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","rspec.Spree::RansackConfiguration at ./spec/lib/spree/core/ransack_configuration_spec.rb.#custom_attributes_for returns an empty array for models with no custom attributes.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","rspec.Spree::RansackConfiguration at ./spec/lib/spree/core/ransack_configuration_spec.rb.#custom_scopes_for returns an empty array for models with no custom scopes.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","rspec.Spree::RansackConfiguration at ./spec/lib/spree/core/ransack_configuration_spec.rb.#reset! clears all custom configurations.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","rspec.Spree::RansackConfiguration at ./spec/lib/spree/core/ransack_configuration_spec.rb.isolation between models keeps configurations separate per model.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1\"}}","rspec.Spree::RansackableAttributes at ./spec/models/spree/concerns/ransackable_attributes_spec.rb..ransackable_associations does not duplicate associations.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3\"}}","rspec.Spree::RansackableAttributes at ./spec/models/spree/concerns/ransackable_attributes_spec.rb..ransackable_associations merges custom associations from Spree.ransack.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","rspec.Spree::RansackableAttributes at ./spec/models/spree/concerns/ransackable_attributes_spec.rb..ransackable_associations returns whitelisted associations.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.Spree::RansackableAttributes at ./spec/models/spree/concerns/ransackable_attributes_spec.rb..ransackable_attributes does not duplicate attributes.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","rspec.Spree::RansackableAttributes at ./spec/models/spree/concerns/ransackable_attributes_spec.rb..ransackable_attributes merges custom attributes from Spree.ransack.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","rspec.Spree::RansackableAttributes at ./spec/models/spree/concerns/ransackable_attributes_spec.rb..ransackable_attributes returns default and whitelisted attributes.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::RansackableAttributes at ./spec/models/spree/concerns/ransackable_attributes_spec.rb..ransackable_scopes does not duplicate scopes.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3\"}}","rspec.Spree::RansackableAttributes at ./spec/models/spree/concerns/ransackable_attributes_spec.rb..ransackable_scopes merges custom scopes from Spree.ransack.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","rspec.Spree::RansackableAttributes at ./spec/models/spree/concerns/ransackable_attributes_spec.rb..ransackable_scopes returns whitelisted scopes.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","rspec.Spree::Refund at ./spec/models/spree/refund_spec.rb.create processing fails raises error and not create a refund.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:1\"}}","rspec.Spree::Refund at ./spec/models/spree/refund_spec.rb.create processing is successful attempts to process a transaction.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:6\"}}","rspec.Spree::Refund at ./spec/models/spree/refund_spec.rb.create processing is successful creates a log entry.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:5\"}}","rspec.Spree::Refund at ./spec/models/spree/refund_spec.rb.create processing is successful creates a refund.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","rspec.Spree::Refund at ./spec/models/spree/refund_spec.rb.create processing is successful return the newly created refund.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:2\"}}","rspec.Spree::Refund at ./spec/models/spree/refund_spec.rb.create processing is successful saves the passed amount as the refund amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:4\"}}","rspec.Spree::Refund at ./spec/models/spree/refund_spec.rb.create processing is successful saves the returned authorization value.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:3\"}}","rspec.Spree::Refund at ./spec/models/spree/refund_spec.rb.create processing is successful updates the payment total.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:7\"}}","rspec.Spree::Refund at ./spec/models/spree/refund_spec.rb.create transaction id exists on creation creates a log entry.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:4\"}}","rspec.Spree::Refund at ./spec/models/spree/refund_spec.rb.create transaction id exists on creation creates a refund record.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","rspec.Spree::Refund at ./spec/models/spree/refund_spec.rb.create transaction id exists on creation does not attempt to process a transaction.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:5\"}}","rspec.Spree::Refund at ./spec/models/spree/refund_spec.rb.create transaction id exists on creation maintains the transaction id.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:2\"}}","rspec.Spree::Refund at ./spec/models/spree/refund_spec.rb.create transaction id exists on creation saves the amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:3\"}}","rspec.Spree::Refund at ./spec/models/spree/refund_spec.rb.create with amount too large is invalid.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:7:1\"}}","rspec.Spree::Refund at ./spec/models/spree/refund_spec.rb.create with an activemerchant gateway connection error raises Spree::Core::GatewayError.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:6:1\"}}","rspec.Spree::Refund at ./spec/models/spree/refund_spec.rb.create with payment profiles supported supplies the payment source.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:5:1\"}}","rspec.Spree::Refund at ./spec/models/spree/refund_spec.rb.create without payment profiles supported does not supply the payment source.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:4:1\"}}","rspec.Spree::Refund at ./spec/models/spree/refund_spec.rb.shared examples behaves like lifecycle events lifecycle events refund.created publishes created event when record is created.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1:1:1\"}}","rspec.Spree::Refund at ./spec/models/spree/refund_spec.rb.shared examples behaves like lifecycle events lifecycle events refund.deleted publishes deleted event when record is deleted.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1:3:1\"}}","rspec.Spree::Refund at ./spec/models/spree/refund_spec.rb.shared examples behaves like lifecycle events lifecycle events refund.updated publishes updated event when record is updated.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1:2:1\"}}","rspec.Spree::Refund at ./spec/models/spree/refund_spec.rb.shared examples behaves like metadata can query records by metadata properties.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:10\"}}","rspec.Spree::Refund at ./spec/models/spree/refund_spec.rb.shared examples behaves like metadata example at ./lib/spree/testing_support/metadata.rb:10.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:5\"}}","rspec.Spree::Refund at ./spec/models/spree/refund_spec.rb.shared examples behaves like metadata example at ./lib/spree/testing_support/metadata.rb:11.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:6\"}}","rspec.Spree::Refund at ./spec/models/spree/refund_spec.rb.shared examples behaves like metadata example at ./lib/spree/testing_support/metadata.rb:4.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","rspec.Spree::Refund at ./spec/models/spree/refund_spec.rb.shared examples behaves like metadata example at ./lib/spree/testing_support/metadata.rb:5.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2\"}}","rspec.Spree::Refund at ./spec/models/spree/refund_spec.rb.shared examples behaves like metadata example at ./lib/spree/testing_support/metadata.rb:7.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3\"}}","rspec.Spree::Refund at ./spec/models/spree/refund_spec.rb.shared examples behaves like metadata example at ./lib/spree/testing_support/metadata.rb:8.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:4\"}}","rspec.Spree::Refund at ./spec/models/spree/refund_spec.rb.shared examples behaves like metadata reads data as not symbolized keys.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:8\"}}","rspec.Spree::Refund at ./spec/models/spree/refund_spec.rb.shared examples behaves like metadata reads data as symbolized keys.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:7\"}}","rspec.Spree::Refund at ./spec/models/spree/refund_spec.rb.total_amount_reimbursed_for with reimbursements performed returns the total amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","rspec.Spree::Refund at ./spec/models/spree/refund_spec.rb.total_amount_reimbursed_for without reimbursements performed returns zero.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","rspec.Spree::RefundReason at ./spec/models/spree/refund_reason_spec.rb.Class Methods .order_canceled_reason order canceled reason not present creates a new refund reason on the fly.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:1\"}}","rspec.Spree::RefundReason at ./spec/models/spree/refund_reason_spec.rb.Class Methods .order_canceled_reason order canceled reason present example at ./spec/models/spree/refund_reason_spec.rb:24.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1:1\"}}","rspec.Spree::RefundReason at ./spec/models/spree/refund_reason_spec.rb.Class Methods .return_processing_reason default refund reason not present creates a new refund reason on the fly.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","rspec.Spree::RefundReason at ./spec/models/spree/refund_reason_spec.rb.Class Methods .return_processing_reason default refund reason present example at ./spec/models/spree/refund_reason_spec.rb:9.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","rspec.Spree::RefundReason at ./spec/models/spree/refund_reason_spec.rb.Class Methods .shipment_canceled_reason shipment canceled reason not present creates a new refund reason on the fly.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:2:1\"}}","rspec.Spree::RefundReason at ./spec/models/spree/refund_reason_spec.rb.Class Methods .shipment_canceled_reason shipment canceled reason present example at ./spec/models/spree/refund_reason_spec.rb:39.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1:1\"}}","rspec.Spree::Reimbursement at ./spec/models/spree/reimbursement_spec.rb.#calculated_total with a return item amount that should round up rounds up.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1\"}}","rspec.Spree::Reimbursement at ./spec/models/spree/reimbursement_spec.rb.#calculated_total with return item amounts that would round up if added rounds down.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:1\"}}","rspec.Spree::Reimbursement at ./spec/models/spree/reimbursement_spec.rb.#display_total returns the value as a Spree::Money instance.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::Reimbursement at ./spec/models/spree/reimbursement_spec.rb.#display_total uses the order's currency.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","rspec.Spree::Reimbursement at ./spec/models/spree/reimbursement_spec.rb.#perform! creates a refund.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","rspec.Spree::Reimbursement at ./spec/models/spree/reimbursement_spec.rb.#perform! refunds the total amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","rspec.Spree::Reimbursement at ./spec/models/spree/reimbursement_spec.rb.#perform! when exchange is required generates an exchange shipment for the order for the exchange items.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:8:1\"}}","rspec.Spree::Reimbursement at ./spec/models/spree/reimbursement_spec.rb.#perform! when performer is provided creates a refund.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4:3\"}}","rspec.Spree::Reimbursement at ./spec/models/spree/reimbursement_spec.rb.#perform! when performer is provided refunds the total amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4:2\"}}","rspec.Spree::Reimbursement at ./spec/models/spree/reimbursement_spec.rb.#perform! when performer is provided sets the performer.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4:1\"}}","rspec.Spree::Reimbursement at ./spec/models/spree/reimbursement_spec.rb.#perform! when reimbursement cannot be fully performed raises IncompleteReimbursement error.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:6:1\"}}","rspec.Spree::Reimbursement at ./spec/models/spree/reimbursement_spec.rb.#perform! when reimbursement is performed using store credits succeeds.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:7:1\"}}","rspec.Spree::Reimbursement at ./spec/models/spree/reimbursement_spec.rb.#perform! with additional tax saves the additional tax and refunds the total.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3:1\"}}","rspec.Spree::Reimbursement at ./spec/models/spree/reimbursement_spec.rb.#perform! with included tax saves the included tax and refunds the total.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:5:1\"}}","rspec.Spree::Reimbursement at ./spec/models/spree/reimbursement_spec.rb.#return_items_requiring_exchange returns only the return items that require an exchange.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","rspec.Spree::Reimbursement at ./spec/models/spree/reimbursement_spec.rb.#store returns order store.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.Spree::Reimbursement at ./spec/models/spree/reimbursement_spec.rb..build_from_customer_return connects data.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","rspec.Spree::Reimbursement at ./spec/models/spree/reimbursement_spec.rb.custom events reimbursement.reimbursed publishes reimbursement.reimbursed event when performed.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1:1\"}}","rspec.Spree::Reimbursement::Credit at ./spec/models/spree/reimbursement/credit_spec.rb.#description is the creditable's class name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.Spree::Reimbursement::Credit at ./spec/models/spree/reimbursement/credit_spec.rb.#display_amount is a money object.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","rspec.Spree::Reimbursement::Credit at ./spec/models/spree/reimbursement/credit_spec.rb.class methods .total_amount_reimbursed_for sums the amounts of all of the reimbursements credits.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","rspec.Spree::Reimbursement::ReimbursementTypeEngine at ./spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb.#calculate_reimbursement_types the return item does not require exchange the return item does not have an override reimbursement type the return item does not have a preferred reimbursement type the return item is past the time constraint behaves like reimbursement type hash contain all keys that respond to reimburse.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:2:1:3:1\"}}","rspec.Spree::Reimbursement::ReimbursementTypeEngine at ./spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb.#calculate_reimbursement_types the return item does not require exchange the return item does not have an override reimbursement type the return item does not have a preferred reimbursement type the return item is past the time constraint returns a hash with the expired reimbursement type associated to the return items.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:2:1:1\"}}","rspec.Spree::Reimbursement::ReimbursementTypeEngine at ./spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb.#calculate_reimbursement_types the return item does not require exchange the return item does not have an override reimbursement type the return item does not have a preferred reimbursement type the return item is past the time constraint the return items are not included in any of the other reimbursement types.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:2:1:2\"}}","rspec.Spree::Reimbursement::ReimbursementTypeEngine at ./spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb.#calculate_reimbursement_types the return item does not require exchange the return item does not have an override reimbursement type the return item does not have a preferred reimbursement type the return item is within the time constraint behaves like reimbursement type hash contain all keys that respond to reimburse.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:2:2:3:1\"}}","rspec.Spree::Reimbursement::ReimbursementTypeEngine at ./spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb.#calculate_reimbursement_types the return item does not require exchange the return item does not have an override reimbursement type the return item does not have a preferred reimbursement type the return item is within the time constraint returns a hash with the default reimbursement type associated to the return items.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:2:2:1\"}}","rspec.Spree::Reimbursement::ReimbursementTypeEngine at ./spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb.#calculate_reimbursement_types the return item does not require exchange the return item does not have an override reimbursement type the return item does not have a preferred reimbursement type the return item is within the time constraint the return items are not included in any of the other reimbursement types.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:2:2:2\"}}","rspec.Spree::Reimbursement::ReimbursementTypeEngine at ./spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb.#calculate_reimbursement_types the return item does not require exchange the return item does not have an override reimbursement type the return item has a preferred reimbursement type the reimbursement type is not valid for the return item behaves like reimbursement type hash contain all keys that respond to reimburse.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:1:1:3:1\"}}","rspec.Spree::Reimbursement::ReimbursementTypeEngine at ./spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb.#calculate_reimbursement_types the return item does not require exchange the return item does not have an override reimbursement type the return item has a preferred reimbursement type the reimbursement type is not valid for the return item returns a hash with no return items associated to the preferred reimbursement type.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:1:1:1\"}}","rspec.Spree::Reimbursement::ReimbursementTypeEngine at ./spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb.#calculate_reimbursement_types the return item does not require exchange the return item does not have an override reimbursement type the return item has a preferred reimbursement type the reimbursement type is not valid for the return item the return items are not included in any of the other reimbursement types.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:1:1:2\"}}","rspec.Spree::Reimbursement::ReimbursementTypeEngine at ./spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb.#calculate_reimbursement_types the return item does not require exchange the return item does not have an override reimbursement type the return item has a preferred reimbursement type the reimbursement type is valid for the return item behaves like reimbursement type hash contain all keys that respond to reimburse.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:1:2:3:1\"}}","rspec.Spree::Reimbursement::ReimbursementTypeEngine at ./spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb.#calculate_reimbursement_types the return item does not require exchange the return item does not have an override reimbursement type the return item has a preferred reimbursement type the reimbursement type is valid for the return item returns a hash with the expired reimbursement type associated to the return items.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:1:2:1\"}}","rspec.Spree::Reimbursement::ReimbursementTypeEngine at ./spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb.#calculate_reimbursement_types the return item does not require exchange the return item does not have an override reimbursement type the return item has a preferred reimbursement type the reimbursement type is valid for the return item the return items are not included in any of the other reimbursement types.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:1:2:2\"}}","rspec.Spree::Reimbursement::ReimbursementTypeEngine at ./spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb.#calculate_reimbursement_types the return item does not require exchange the return item has an override reimbursement type behaves like reimbursement type hash contain all keys that respond to reimburse.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1:3:1\"}}","rspec.Spree::Reimbursement::ReimbursementTypeEngine at ./spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb.#calculate_reimbursement_types the return item does not require exchange the return item has an override reimbursement type returns a hash with the override reimbursement type associated to the return items.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1:1\"}}","rspec.Spree::Reimbursement::ReimbursementTypeEngine at ./spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb.#calculate_reimbursement_types the return item does not require exchange the return item has an override reimbursement type the return items are not included in any of the other reimbursement types.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1:2\"}}","rspec.Spree::Reimbursement::ReimbursementTypeEngine at ./spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb.#calculate_reimbursement_types the return item requires exchange behaves like reimbursement type hash contain all keys that respond to reimburse.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:1\"}}","rspec.Spree::Reimbursement::ReimbursementTypeEngine at ./spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb.#calculate_reimbursement_types the return item requires exchange returns a hash with the exchange reimbursement type associated to the return items.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","rspec.Spree::Reimbursement::ReimbursementTypeEngine at ./spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb.#calculate_reimbursement_types the return item requires exchange the return items are not included in any of the other reimbursement types.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2\"}}","rspec.Spree::Reimbursement::ReimbursementTypeValidator at ./spec/models/spree/reimbursement/reimbursement_type_validator_spec.rb.#past_reimbursable_time_period? it has not shipped is not past the reimbursable time period.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","rspec.Spree::Reimbursement::ReimbursementTypeValidator at ./spec/models/spree/reimbursement/reimbursement_type_validator_spec.rb.#past_reimbursable_time_period? it has shipped and it is further in the past than the time constraint is past the reimbursable time period.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:1\"}}","rspec.Spree::Reimbursement::ReimbursementTypeValidator at ./spec/models/spree/reimbursement/reimbursement_type_validator_spec.rb.#past_reimbursable_time_period? it has shipped and it is more recent than the time constraint is not past the reimbursable time period.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","rspec.Spree::Reimbursement::ReimbursementTypeValidator at ./spec/models/spree/reimbursement/reimbursement_type_validator_spec.rb.#valid_preferred_reimbursement_type? is invalid if the return item is past the eligible time period and the preferred method of reimbursement is not the expired method of reimbursement.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","rspec.Spree::Reimbursement::ReimbursementTypeValidator at ./spec/models/spree/reimbursement/reimbursement_type_validator_spec.rb.#valid_preferred_reimbursement_type? is valid if it is not past the reimbursable time period.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","rspec.Spree::Reimbursement::ReimbursementTypeValidator at ./spec/models/spree/reimbursement/reimbursement_type_validator_spec.rb.#valid_preferred_reimbursement_type? is valid if the return items preferred method of reimbursement is the expired method of reimbursement.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2\"}}","rspec.Spree::ReimbursementPerformer at ./spec/models/spree/reimbursement_performer_spec.rb..perform reimburses each calculated reimbursement types with the correct return items as a performance.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.Spree::ReimbursementPerformer at ./spec/models/spree/reimbursement_performer_spec.rb..simulate reimburses each calculated reimbursement types with the correct return items as a simulation.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::ReimbursementTaxCalculator at ./spec/models/spree/reimbursement_tax_calculator_spec.rb.with additional tax sets additional_tax_total on the return items.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.Spree::ReimbursementTaxCalculator at ./spec/models/spree/reimbursement_tax_calculator_spec.rb.with included tax sets included_tax_total on the return items.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","rspec.Spree::ReimbursementTaxCalculator at ./spec/models/spree/reimbursement_tax_calculator_spec.rb.without taxes leaves the return items additional_tax_total and included_tax_total at zero.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::ReimbursementType::Credit at ./spec/models/spree/reimbursement_type/credit_spec.rb..reimburse simulate is false creates one lump credit for all outstanding balance payable to the customer.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","rspec.Spree::ReimbursementType::Credit at ./spec/models/spree/reimbursement_type/credit_spec.rb..reimburse simulate is true creates one readonly lump credit for all outstanding balance payable to the customer.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","rspec.Spree::ReimbursementType::Credit at ./spec/models/spree/reimbursement_type/credit_spec.rb..reimburse simulate is true does not save to the database.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2\"}}","rspec.Spree::ReimbursementType::Exchange at ./spec/models/spree/reimbursement_type/exchange_spec.rb..reimburse no return items are supplied does not perform an exchange and returns an empty array.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","rspec.Spree::ReimbursementType::Exchange at ./spec/models/spree/reimbursement_type/exchange_spec.rb..reimburse return items are supplied simulate is false performs an exchange and returns the exchange object.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","rspec.Spree::ReimbursementType::Exchange at ./spec/models/spree/reimbursement_type/exchange_spec.rb..reimburse return items are supplied simulate is true does not perform an exchange and returns the exchange object.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","rspec.Spree::ReimbursementType::OriginalPayment at ./spec/models/spree/reimbursement_type/original_payment_spec.rb..reimburse simulate is false performs the refund.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","rspec.Spree::ReimbursementType::OriginalPayment at ./spec/models/spree/reimbursement_type/original_payment_spec.rb..reimburse simulate is true returns an array of readonly refunds.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","rspec.Spree::ReimbursementType::OriginalPayment at ./spec/models/spree/reimbursement_type/original_payment_spec.rb..reimburse when a payment is negative returns an empty array.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1\"}}","rspec.Spree::ReimbursementType::OriginalPayment at ./spec/models/spree/reimbursement_type/original_payment_spec.rb..reimburse when no credit is allowed on the payment returns an empty array.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","rspec.Spree::ReimbursementType::StoreCredit at ./spec/models/spree/reimbursement_type/store_credit_spec.rb..reimburse simulate is false for return items that were not paid for with store credit creates a store credit with the same currency as the reimbursement's order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:2\"}}","rspec.Spree::ReimbursementType::StoreCredit at ./spec/models/spree/reimbursement_type/store_credit_spec.rb..reimburse simulate is false for return items that were not paid for with store credit creates one lump credit for all outstanding balance payable to the customer.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:1\"}}","rspec.Spree::ReimbursementType::StoreCredit at ./spec/models/spree/reimbursement_type/store_credit_spec.rb..reimburse simulate is false for store credits that the customer used performs refunds for all store credit payments.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1:1\"}}","rspec.Spree::ReimbursementType::StoreCredit at ./spec/models/spree/reimbursement_type/store_credit_spec.rb..reimburse simulate is true for return items that were not paid for with store credit creates one readonly lump credit for all outstanding balance payable to the customer creates a credit that is read only.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1:1\"}}","rspec.Spree::ReimbursementType::StoreCredit at ./spec/models/spree/reimbursement_type/store_credit_spec.rb..reimburse simulate is true for return items that were not paid for with store credit creates one readonly lump credit for all outstanding balance payable to the customer creates a credit which amounts to the sum of the return items rounded down.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1:2\"}}","rspec.Spree::ReimbursementType::StoreCredit at ./spec/models/spree/reimbursement_type/store_credit_spec.rb..reimburse simulate is true for return items that were not paid for with store credit does not save to the database.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:2\"}}","rspec.Spree::ReimbursementType::StoreCredit at ./spec/models/spree/reimbursement_type/store_credit_spec.rb..reimburse simulate is true for store credits that the customer used creates readonly refunds for all store credit payments.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","rspec.Spree::ReimbursementType::StoreCredit at ./spec/models/spree/reimbursement_type/store_credit_spec.rb..reimburse simulate is true for store credits that the customer used does not save to the database.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:2\"}}","rspec.Spree::Report at ./spec/models/spree/report_spec.rb.#attachment_file_name returns the correct file name format.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","rspec.Spree::Report at ./spec/models/spree/report_spec.rb.#event_serializer_class returns the correct serializer class.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","rspec.Spree::Report at ./spec/models/spree/report_spec.rb.#generate generates CSV file and attaches it.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","rspec.Spree::Report at ./spec/models/spree/report_spec.rb.#generate sends report done email when user is present.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2\"}}","rspec.Spree::Report at ./spec/models/spree/report_spec.rb.#generate when user is not present does not send report done email.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3:1\"}}","rspec.Spree::Report at ./spec/models/spree/report_spec.rb.#human_name returns formatted name with store, dates and report type.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.Spree::Report at ./spec/models/spree/report_spec.rb.behaves like lifecycle events lifecycle events report.created publishes created event when record is created.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","rspec.Spree::Report at ./spec/models/spree/report_spec.rb.behaves like lifecycle events lifecycle events report.deleted publishes deleted event when record is deleted.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:1\"}}","rspec.Spree::Report at ./spec/models/spree/report_spec.rb.behaves like lifecycle events lifecycle events report.updated publishes updated event when record is updated.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","rspec.Spree::Report at ./spec/models/spree/report_spec.rb.callbacks after_initialize sets default currency from store.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1:1\"}}","rspec.Spree::Report at ./spec/models/spree/report_spec.rb.callbacks after_initialize sets default date range.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1:2\"}}","rspec.Spree::ReportLineItem at ./spec/models/spree/report_line_item_spec.rb.#to_csv returns array of attribute values.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","rspec.Spree::ReportLineItem at ./spec/models/spree/report_line_item_spec.rb..csv_headers returns array of attribute keys.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.Spree::ReportLineItem at ./spec/models/spree/report_line_item_spec.rb..headers returns array of hashes with name and label.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::ReportLineItems::ProductsPerformance at ./spec/models/spree/report_line_items/products_performance_spec.rb.#brand returns brand name from record.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.Spree::ReportLineItems::ProductsPerformance at ./spec/models/spree/report_line_items/products_performance_spec.rb.#category_levels when product has no taxons returns nil for all category levels.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","rspec.Spree::ReportLineItems::ProductsPerformance at ./spec/models/spree/report_line_items/products_performance_spec.rb.#category_levels when product has taxons returns mapped category levels.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","rspec.Spree::ReportLineItems::ProductsPerformance at ./spec/models/spree/report_line_items/products_performance_spec.rb.#price returns formatted price in report currency.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","rspec.Spree::ReportLineItems::ProductsPerformance at ./spec/models/spree/report_line_items/products_performance_spec.rb.#quantity returns line item quantity.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","rspec.Spree::ReportLineItems::ProductsPerformance at ./spec/models/spree/report_line_items/products_performance_spec.rb.#vendor returns vendor name from record.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::ReportLineItems::ProductsPerformance at ./spec/models/spree/report_line_items/products_performance_spec.rb.#weeks_online with available on returns number of weeks since product activation.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:1\"}}","rspec.Spree::ReportLineItems::ProductsPerformance at ./spec/models/spree/report_line_items/products_performance_spec.rb.#weeks_online without available on returns number of weeks since product creation.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1\"}}","rspec.Spree::ReportLineItems::ProductsPerformance at ./spec/models/spree/report_line_items/products_performance_spec.rb.money amounts returns formatted money amounts.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","rspec.Spree::ReportLineItems::SalesTotal at ./spec/models/spree/report_line_items/sales_total_spec.rb.#date returns formatted completed_at date.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::ReportLineItems::SalesTotal at ./spec/models/spree/report_line_items/sales_total_spec.rb.#order returns order number.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.Spree::ReportLineItems::SalesTotal at ./spec/models/spree/report_line_items/sales_total_spec.rb.#pre_tax_amount returns display pre tax amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","rspec.Spree::ReportLineItems::SalesTotal at ./spec/models/spree/report_line_items/sales_total_spec.rb.#product returns variant descriptive name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","rspec.Spree::ReportLineItems::SalesTotal at ./spec/models/spree/report_line_items/sales_total_spec.rb.#promo_total returns display promo total.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","rspec.Spree::ReportLineItems::SalesTotal at ./spec/models/spree/report_line_items/sales_total_spec.rb.#quantity returns quantity.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","rspec.Spree::ReportLineItems::SalesTotal at ./spec/models/spree/report_line_items/sales_total_spec.rb.#shipment_total returns display shipping cost.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1\"}}","rspec.Spree::ReportLineItems::SalesTotal at ./spec/models/spree/report_line_items/sales_total_spec.rb.#tax_total returns display tax total.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1\"}}","rspec.Spree::ReportLineItems::SalesTotal at ./spec/models/spree/report_line_items/sales_total_spec.rb.#total returns money object with final amount plus shipping.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","rspec.Spree::ReportMailer at ./spec/mailers/spree/report_mailer_spec.rb.#report_done includes download link in the body.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","rspec.Spree::ReportMailer at ./spec/mailers/spree/report_mailer_spec.rb.#report_done renders the subject.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::ReportMailer at ./spec/mailers/spree/report_mailer_spec.rb.#report_done sends from the store mail from address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","rspec.Spree::ReportMailer at ./spec/mailers/spree/report_mailer_spec.rb.#report_done sends to the correct recipient.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","rspec.Spree::ReportMailer at ./spec/mailers/spree/report_mailer_spec.rb.#report_done sets reply-to as the store mail from address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","rspec.Spree::ReportSubscriber at ./spec/subscribers/spree/report_subscriber_spec.rb.#generate_report_async does not call job if report_id is missing.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","rspec.Spree::ReportSubscriber at ./spec/subscribers/spree/report_subscriber_spec.rb.#generate_report_async extracts report_id from event payload.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","rspec.Spree::ReportSubscriber at ./spec/subscribers/spree/report_subscriber_spec.rb..event_handlers routes report.created to generate_report_async.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.Spree::ReportSubscriber at ./spec/subscribers/spree/report_subscriber_spec.rb..subscription_patterns subscribes to report.created event.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::Reports::ProductsPerformance at ./spec/models/spree/reports/products_performance_spec.rb.#line_items_scope date range boundary conditions when order completed 1 minute after date_to excludes products.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:4:1\"}}","rspec.Spree::Reports::ProductsPerformance at ./spec/models/spree/reports/products_performance_spec.rb.#line_items_scope date range boundary conditions when order completed 1 minute before date_from excludes products.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:3:1\"}}","rspec.Spree::Reports::ProductsPerformance at ./spec/models/spree/reports/products_performance_spec.rb.#line_items_scope date range boundary conditions when order completed exactly at date_from includes products.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1:1\"}}","rspec.Spree::Reports::ProductsPerformance at ./spec/models/spree/reports/products_performance_spec.rb.#line_items_scope date range boundary conditions when order completed exactly at date_to includes products.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:2:1\"}}","rspec.Spree::Reports::ProductsPerformance at ./spec/models/spree/reports/products_performance_spec.rb.#line_items_scope when order has different currency excludes products with different currency.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1\"}}","rspec.Spree::Reports::ProductsPerformance at ./spec/models/spree/reports/products_performance_spec.rb.#line_items_scope when order is outside date range excludes products from orders outside date range.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","rspec.Spree::Reports::ProductsPerformance at ./spec/models/spree/reports/products_performance_spec.rb.#line_items_scope when order is within date range includes products with sales data.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","rspec.Spree::Reports::SalesTotal at ./spec/models/spree/reports/sales_total_spec.rb.#line_items_scope date range boundary conditions when order completed 1 minute after date_to excludes line items.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:4:1\"}}","rspec.Spree::Reports::SalesTotal at ./spec/models/spree/reports/sales_total_spec.rb.#line_items_scope date range boundary conditions when order completed 1 minute before date_from excludes line items.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:3:1\"}}","rspec.Spree::Reports::SalesTotal at ./spec/models/spree/reports/sales_total_spec.rb.#line_items_scope date range boundary conditions when order completed exactly at date_from includes line items.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1:1\"}}","rspec.Spree::Reports::SalesTotal at ./spec/models/spree/reports/sales_total_spec.rb.#line_items_scope date range boundary conditions when order completed exactly at date_to includes line items.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:2:1\"}}","rspec.Spree::Reports::SalesTotal at ./spec/models/spree/reports/sales_total_spec.rb.#line_items_scope when order has different currency excludes line items with different currency.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1\"}}","rspec.Spree::Reports::SalesTotal at ./spec/models/spree/reports/sales_total_spec.rb.#line_items_scope when order is incomplete excludes line items from incomplete orders.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5:1\"}}","rspec.Spree::Reports::SalesTotal at ./spec/models/spree/reports/sales_total_spec.rb.#line_items_scope when order is outside date range excludes line items from orders outside date range.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","rspec.Spree::Reports::SalesTotal at ./spec/models/spree/reports/sales_total_spec.rb.#line_items_scope when order is within date range includes line items from completed orders within date range.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","rspec.Spree::Reports::SalesTotal at ./spec/models/spree/reports/sales_total_spec.rb.#return_line_items returns line items.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.Spree::ReturnAuthorization at ./spec/models/spree/return_authorization_spec.rb.#can_cancel? all items can be cancelled returns true.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1:1\"}}","rspec.Spree::ReturnAuthorization at ./spec/models/spree/return_authorization_spec.rb.#can_cancel? at least one return item can be cancelled example at ./spec/models/spree/return_authorization_spec.rb:255.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2:1\"}}","rspec.Spree::ReturnAuthorization at ./spec/models/spree/return_authorization_spec.rb.#can_cancel? no items can be cancelled example at ./spec/models/spree/return_authorization_spec.rb:262.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:3:1\"}}","rspec.Spree::ReturnAuthorization at ./spec/models/spree/return_authorization_spec.rb.#can_cancel? when return_authorization has no return_items example at ./spec/models/spree/return_authorization_spec.rb:268.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:4:1\"}}","rspec.Spree::ReturnAuthorization at ./spec/models/spree/return_authorization_spec.rb.#currency returns the order currency.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","rspec.Spree::ReturnAuthorization at ./spec/models/spree/return_authorization_spec.rb.#customer_returned_items? does not have associated customer returns returns false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:2:1\"}}","rspec.Spree::ReturnAuthorization at ./spec/models/spree/return_authorization_spec.rb.#customer_returned_items? has associated customer returns returns true.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1:1\"}}","rspec.Spree::ReturnAuthorization at ./spec/models/spree/return_authorization_spec.rb.#display_pre_tax_total returns a Spree::Money.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","rspec.Spree::ReturnAuthorization at ./spec/models/spree/return_authorization_spec.rb.#pre_tax_total sums it's associated return_item's pre-tax amounts.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","rspec.Spree::ReturnAuthorization at ./spec/models/spree/return_authorization_spec.rb.#refundable_amount no promotions returns the pre-tax line item total.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1:1\"}}","rspec.Spree::ReturnAuthorization at ./spec/models/spree/return_authorization_spec.rb.#refundable_amount promotions returns the pre-tax line item total minus the order level promotion value.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2:1\"}}","rspec.Spree::ReturnAuthorization at ./spec/models/spree/return_authorization_spec.rb.cancel_return_items cancels the associated return items.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1\"}}","rspec.Spree::ReturnAuthorization at ./spec/models/spree/return_authorization_spec.rb.cancel_return_items some return items cannot be cancelled cancels those that can be cancelled.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:2:1\"}}","rspec.Spree::ReturnAuthorization at ./spec/models/spree/return_authorization_spec.rb.custom events return_authorization.canceled publishes return_authorization.canceled event when canceled.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:1:1\"}}","rspec.Spree::ReturnAuthorization at ./spec/models/spree/return_authorization_spec.rb.lifecycle events return_authorization.created publishes created event when record is created.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","rspec.Spree::ReturnAuthorization at ./spec/models/spree/return_authorization_spec.rb.lifecycle events return_authorization.deleted publishes deleted event when record is destroyed.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","rspec.Spree::ReturnAuthorization at ./spec/models/spree/return_authorization_spec.rb.lifecycle events return_authorization.updated publishes updated event when record is updated.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","rspec.Spree::ReturnAuthorization at ./spec/models/spree/return_authorization_spec.rb.save expedited exchanges are configured items to exchange attempts to accept all return items requiring exchange.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:2:2\"}}","rspec.Spree::ReturnAuthorization at ./spec/models/spree/return_authorization_spec.rb.save expedited exchanges are configured items to exchange calls pre_expedited_exchange hooks with the return items to exchange.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:2:1\"}}","rspec.Spree::ReturnAuthorization at ./spec/models/spree/return_authorization_spec.rb.save expedited exchanges are configured items to exchange performs an exchange reimbursement for the exchange return items.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:2:3\"}}","rspec.Spree::ReturnAuthorization at ./spec/models/spree/return_authorization_spec.rb.save expedited exchanges are configured items to exchange the reimbursement fails puts errors on the return authorization.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:2:4:1\"}}","rspec.Spree::ReturnAuthorization at ./spec/models/spree/return_authorization_spec.rb.save expedited exchanges are configured no items to exchange does not create a reimbursement.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1:1\"}}","rspec.Spree::ReturnAuthorization at ./spec/models/spree/return_authorization_spec.rb.save is invalid when order has no inventory units.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.Spree::ReturnAuthorization at ./spec/models/spree/return_authorization_spec.rb.whitelisted_ransackable_associations example at ./spec/models/spree/return_authorization_spec.rb:125.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","rspec.Spree::ReturnAuthorization at ./spec/models/spree/return_authorization_spec.rb.whitelisted_ransackable_attributes example at ./spec/models/spree/return_authorization_spec.rb:121.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","rspec.Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.#accept pending status has no acceptance status errors.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:1:2\"}}","rspec.Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.#accept pending status transitions successfully.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:1:1\"}}","rspec.Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.#accept return_item has an acceptance status of rejected behaves like an invalid state transition cannot transition to accepted.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:2:1:1\"}}","rspec.Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.#attempt_accept not eligible for return manual intervention not required sets the acceptance status errors.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:4:2:2\"}}","rspec.Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.#attempt_accept not eligible for return manual intervention not required transitions to rejected.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:4:2:1\"}}","rspec.Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.#attempt_accept not eligible for return manual intervention required sets the acceptance status errors.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:4:1:2\"}}","rspec.Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.#attempt_accept not eligible for return manual intervention required transitions to manual intervention required.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:4:1:1\"}}","rspec.Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.#attempt_accept pending status has no acceptance status errors.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:1:2\"}}","rspec.Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.#attempt_accept pending status transitions successfully.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:1:1\"}}","rspec.Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.#attempt_accept return_item has an acceptance status of manual_intervention_required behaves like an invalid state transition cannot transition to accepted.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:2:1:1\"}}","rspec.Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.#attempt_accept return_item has an acceptance status of rejected behaves like an invalid state transition cannot transition to accepted.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:3:1:1\"}}","rspec.Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.#build_default_exchange_inventory_unit the return item is intended to be exchanged an exchange inventory unit already exists example at ./spec/models/spree/return_item_spec.rb:527.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:23:1:1:1\"}}","rspec.Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.#build_default_exchange_inventory_unit the return item is intended to be exchanged no exchange inventory unit exists builds a pending inventory unit with references to the return item, variant, and previous inventory unit.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:23:1:2:1\"}}","rspec.Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.#build_default_exchange_inventory_unit the return item is not intended to be exchanged example at ./spec/models/spree/return_item_spec.rb:543.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:23:2:1\"}}","rspec.Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.#cancel awaiting status transitions successfully.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1:1\"}}","rspec.Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.#cancel return_item has a reception status of cancelled behaves like an invalid state transition cannot transition to cancelled.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:3:1:1\"}}","rspec.Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.#cancel return_item has a reception status of given_to_customer behaves like an invalid state transition cannot transition to cancelled.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:4:1:1\"}}","rspec.Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.#cancel return_item has a reception status of received behaves like an invalid state transition cannot transition to cancelled.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:2:1:1\"}}","rspec.Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.#display_pre_tax_amount returns a Spree::Money.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.#eligible_exchange_variants uses the exchange variant calculator to compute possible variants to exchange for.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:20:1\"}}","rspec.Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.#exchange_processed? exchange inventory unit does not exist example at ./spec/models/spree/return_item_spec.rb:445.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:2:1\"}}","rspec.Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.#exchange_processed? exchange inventory unit exists example at ./spec/models/spree/return_item_spec.rb:439.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:1:1\"}}","rspec.Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.#exchange_requested? exchange variant does not exist example at ./spec/models/spree/return_item_spec.rb:431.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:17:2:1\"}}","rspec.Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.#exchange_requested? exchange variant exists example at ./spec/models/spree/return_item_spec.rb:425.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:17:1:1\"}}","rspec.Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.#exchange_required? exchange has been requested and not yet processed example at ./spec/models/spree/return_item_spec.rb:456.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:1:1\"}}","rspec.Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.#exchange_required? exchange has been requested and processed example at ./spec/models/spree/return_item_spec.rb:471.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:3:1\"}}","rspec.Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.#exchange_required? exchange has not been requested example at ./spec/models/spree/return_item_spec.rb:462.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:2:1\"}}","rspec.Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.#exchange_shipments returns the exchange inventory unit's shipment.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:24:1\"}}","rspec.Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.#give awaiting status transitions successfully.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1:1\"}}","rspec.Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.#give return_item has a reception status of cancelled behaves like an invalid state transition cannot transition to give_to_customer.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:3:1:1\"}}","rspec.Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.#give return_item has a reception status of given_to_customer behaves like an invalid state transition cannot transition to give_to_customer.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:4:1:1\"}}","rspec.Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.#give return_item has a reception status of received behaves like an invalid state transition cannot transition to give_to_customer.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2:1:1\"}}","rspec.Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.#pre_tax_amount= is expected to equal to localized number.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","rspec.Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.#process_inventory_unit! #currency responds to currency method.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:4:1\"}}","rspec.Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.#process_inventory_unit! example at ./spec/models/spree/return_item_spec.rb:719.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:1\"}}","rspec.Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.#process_inventory_unit! stock should not restock return_item is not resellable example at ./spec/models/spree/return_item_spec.rb:737.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:3:1:1\"}}","rspec.Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.#process_inventory_unit! stock should not restock return_item is not resellable example at ./spec/models/spree/return_item_spec.rb:738.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:3:1:2\"}}","rspec.Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.#process_inventory_unit! stock should not restock stock_item not present example at ./spec/models/spree/return_item_spec.rb:751.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:3:3:1\"}}","rspec.Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.#process_inventory_unit! stock should not restock stock_item not present example at ./spec/models/spree/return_item_spec.rb:752.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:3:3:2\"}}","rspec.Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.#process_inventory_unit! stock should not restock variant should not track inventory example at ./spec/models/spree/return_item_spec.rb:744.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:3:2:1\"}}","rspec.Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.#process_inventory_unit! stock should not restock variant should not track inventory example at ./spec/models/spree/return_item_spec.rb:745.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:3:2:2\"}}","rspec.Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.#process_inventory_unit! stock should not restock when restock inventory preference false example at ./spec/models/spree/return_item_spec.rb:758.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:3:4:1\"}}","rspec.Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.#process_inventory_unit! stock should not restock when restock inventory preference false example at ./spec/models/spree/return_item_spec.rb:759.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:3:4:2\"}}","rspec.Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.#process_inventory_unit! stock should restock example at ./spec/models/spree/return_item_spec.rb:730.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:2:1\"}}","rspec.Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.#receive awaiting status transitions successfully.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1:1\"}}","rspec.Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.#receive return_item has a reception status of cancelled behaves like an invalid state transition cannot transition to received.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:3:1:1\"}}","rspec.Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.#receive return_item has a reception status of given_to_customer behaves like an invalid state transition cannot transition to received.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:4:1:1\"}}","rspec.Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.#receive return_item has a reception status of received behaves like an invalid state transition cannot transition to received.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:2:1:1\"}}","rspec.Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.#receive! attempts to accept the return item.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","rspec.Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.#receive! returns the inventory unit.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.#receive! with a stock location increases the count on hand.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","rspec.Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.#receive! with a stock location when the restock_inventory preference is false does not increase the count on hand.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:4:1\"}}","rspec.Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.#receive! with a stock location when the variant is not resellable example at ./spec/models/spree/return_item_spec.rb:58.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:2:1\"}}","rspec.Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.#receive! with a stock location when variant does not track inventory does not increase the count on hand.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:3:1\"}}","rspec.Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.#reject pending status has no acceptance status errors.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:1:2\"}}","rspec.Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.#reject pending status transitions successfully.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:1:1\"}}","rspec.Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.#reject return_item has an acceptance status of rejected behaves like an invalid state transition cannot transition to rejected.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:2:1:1\"}}","rspec.Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.#require_manual_intervention pending status has no acceptance status errors.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:1:2\"}}","rspec.Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.#require_manual_intervention pending status transitions successfully.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:1:1\"}}","rspec.Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.#require_manual_intervention return_item has an acceptance status of rejected behaves like an invalid state transition cannot transition to manual_intervention_required.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:2:1:1\"}}","rspec.Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.#shipment returns the inventory unit's shipment.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:25:1\"}}","rspec.Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb..default_refund_amount_calculator defaults to the default refund amount calculator.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","rspec.Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb..exchange_variant_engine defaults to the same product calculator.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:21:1\"}}","rspec.Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb..from_inventory_unit with a cancelled return item example at ./spec/models/spree/return_item_spec.rb:147.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1:1\"}}","rspec.Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb..from_inventory_unit with a non-cancelled return item example at ./spec/models/spree/return_item_spec.rb:153.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2:1\"}}","rspec.Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.acceptance_status state_machine starts off in the pending state.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1\"}}","rspec.Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.custom events return_item.canceled publishes return_item.canceled event when canceled.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:30:2:1\"}}","rspec.Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.custom events return_item.given publishes return_item.given event when given to customer.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:30:3:1\"}}","rspec.Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.custom events return_item.received publishes return_item.received event when received.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:30:1:1\"}}","rspec.Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.exchange pre_tax_amount the return item is intended to be exchanged example at ./spec/models/spree/return_item_spec.rb:498.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:22:1:1\"}}","rspec.Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.exchange pre_tax_amount the return item is not intended to be exchanged example at ./spec/models/spree/return_item_spec.rb:506.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:22:2:1\"}}","rspec.Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.included tax in total includes included tax total.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:28:1\"}}","rspec.Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.inventory_unit uniqueness with other awaiting return items exist for the same inventory unit cancels the others.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:26:1:1\"}}","rspec.Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.inventory_unit uniqueness with other awaiting return items exist for the same inventory unit does not cancel itself.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:26:1:2\"}}","rspec.Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.inventory_unit uniqueness with other cancelled return items exist for the same inventory unit succeeds.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:26:2:1\"}}","rspec.Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.inventory_unit uniqueness with other given_to_customer return items exist for the same inventory unit is invalid.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:26:4:1\"}}","rspec.Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.inventory_unit uniqueness with other received return items exist for the same inventory unit is invalid.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:26:3:1\"}}","rspec.Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.pre_tax_amount calculations on create pre tax amount is not specified an exchange example at ./spec/models/spree/return_item_spec.rb:128.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:2:1\"}}","rspec.Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.pre_tax_amount calculations on create pre tax amount is not specified not an exchange example at ./spec/models/spree/return_item_spec.rb:122.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:1:1\"}}","rspec.Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.pre_tax_amount calculations on create pre tax amount is specified example at ./spec/models/spree/return_item_spec.rb:135.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1\"}}","rspec.Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.reception_status state_machine starts off in the awaiting state.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","rspec.Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.valid exchange variant return item doesn't have an exchange variant is valid.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:27:1:1\"}}","rspec.Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.valid exchange variant return item has an exchange variant the exchange variant is eligible is valid.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:27:2:1:1\"}}","rspec.Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.valid exchange variant return item has an exchange variant the exchange variant is not eligible new return item adds an error message about the invalid exchange variant.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:27:2:2:1:2\"}}","rspec.Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.valid exchange variant return item has an exchange variant the exchange variant is not eligible new return item is invalid.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:27:2:2:1:1\"}}","rspec.Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.valid exchange variant return item has an exchange variant the exchange variant is not eligible the exchange variant has been updated adds an error message about the invalid exchange variant.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:27:2:2:2:2\"}}","rspec.Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.valid exchange variant return item has an exchange variant the exchange variant is not eligible the exchange variant has been updated is invalid.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:27:2:2:2:1\"}}","rspec.Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.valid exchange variant return item has an exchange variant the exchange variant is not eligible the exchange variant has not been updated is valid.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:27:2:2:3:1\"}}","rspec.Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.validity for reimbursements when acceptance_status is accepted is valid.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:1:1\"}}","rspec.Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb.validity for reimbursements when acceptance_status is accepted is valid.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:2:1\"}}","rspec.Spree::ReturnItem::EligibilityValidator::Default at ./spec/models/spree/return_item/eligibility_validator/default_spec.rb.#eligible_for_return? checks that all permitted eligibility validators are eligible for return.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::ReturnItem::EligibilityValidator::Default at ./spec/models/spree/return_item/eligibility_validator/default_spec.rb.#errors the validator errors are empty returns an empty hash.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","rspec.Spree::ReturnItem::EligibilityValidator::Default at ./spec/models/spree/return_item/eligibility_validator/default_spec.rb.#errors the validators have errors gathers all errors from permitted eligibility validators into a single errors hash.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","rspec.Spree::ReturnItem::EligibilityValidator::Default at ./spec/models/spree/return_item/eligibility_validator/default_spec.rb.#requires_manual_intervention? any of the permitted eligibility validators require manual intervention returns true.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","rspec.Spree::ReturnItem::EligibilityValidator::Default at ./spec/models/spree/return_item/eligibility_validator/default_spec.rb.#requires_manual_intervention? no permitted eligibility validators require manual intervention returns false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","rspec.Spree::ReturnItem::EligibilityValidator::InventoryShipped at ./spec/models/spree/return_item/eligibility_validator/inventory_shipped_spec.rb.#eligible_for_return? the associated inventory unit is not shipped returns false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","rspec.Spree::ReturnItem::EligibilityValidator::InventoryShipped at ./spec/models/spree/return_item/eligibility_validator/inventory_shipped_spec.rb.#eligible_for_return? the associated inventory unit is not shipped sets an error.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2\"}}","rspec.Spree::ReturnItem::EligibilityValidator::InventoryShipped at ./spec/models/spree/return_item/eligibility_validator/inventory_shipped_spec.rb.#eligible_for_return? the associated inventory unit is shipped returns true.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","rspec.Spree::ReturnItem::EligibilityValidator::InventoryShipped at ./spec/models/spree/return_item/eligibility_validator/inventory_shipped_spec.rb.#requires_manual_intervention? eligible for return returns false if no errors were added.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","rspec.Spree::ReturnItem::EligibilityValidator::InventoryShipped at ./spec/models/spree/return_item/eligibility_validator/inventory_shipped_spec.rb.#requires_manual_intervention? not eligible for return returns true if errors were added.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","rspec.Spree::ReturnItem::EligibilityValidator::NoReimbursements at ./spec/models/spree/return_item/eligibility_validator/no_reimbursements_spec.rb.#eligible_for_return? inventory unit has already been reimbursed returns false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","rspec.Spree::ReturnItem::EligibilityValidator::NoReimbursements at ./spec/models/spree/return_item/eligibility_validator/no_reimbursements_spec.rb.#eligible_for_return? inventory unit has already been reimbursed sets an error.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2\"}}","rspec.Spree::ReturnItem::EligibilityValidator::NoReimbursements at ./spec/models/spree/return_item/eligibility_validator/no_reimbursements_spec.rb.#eligible_for_return? inventory unit has not been reimbursed returns true.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","rspec.Spree::ReturnItem::EligibilityValidator::NoReimbursements at ./spec/models/spree/return_item/eligibility_validator/no_reimbursements_spec.rb.#requires_manual_intervention? eligible for return returns false if no errors were added.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","rspec.Spree::ReturnItem::EligibilityValidator::NoReimbursements at ./spec/models/spree/return_item/eligibility_validator/no_reimbursements_spec.rb.#requires_manual_intervention? not eligible for return returns true if errors were added.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","rspec.Spree::ReturnItem::EligibilityValidator::OrderCompleted at ./spec/models/spree/return_item/eligibility_validator/order_completed_spec.rb.#eligible_for_return? the order is not completed returns false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","rspec.Spree::ReturnItem::EligibilityValidator::OrderCompleted at ./spec/models/spree/return_item/eligibility_validator/order_completed_spec.rb.#eligible_for_return? the order is not completed sets an error.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2\"}}","rspec.Spree::ReturnItem::EligibilityValidator::OrderCompleted at ./spec/models/spree/return_item/eligibility_validator/order_completed_spec.rb.#eligible_for_return? the order was completed returns true.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","rspec.Spree::ReturnItem::EligibilityValidator::RMARequired at ./spec/models/spree/return_item/eligibility_validator/rma_required_spec.rb.#eligible_for_return? there is an rma on the return item returns true.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","rspec.Spree::ReturnItem::EligibilityValidator::RMARequired at ./spec/models/spree/return_item/eligibility_validator/rma_required_spec.rb.#eligible_for_return? there is no rma on the return item returns false abd error.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","rspec.Spree::ReturnItem::EligibilityValidator::TimeSincePurchase at ./spec/models/spree/return_item/eligibility_validator/time_since_purchase_spec.rb.#eligible_for_return? it is past the return timeframe returns false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","rspec.Spree::ReturnItem::EligibilityValidator::TimeSincePurchase at ./spec/models/spree/return_item/eligibility_validator/time_since_purchase_spec.rb.#eligible_for_return? it is past the return timeframe sets an error.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2\"}}","rspec.Spree::ReturnItem::EligibilityValidator::TimeSincePurchase at ./spec/models/spree/return_item/eligibility_validator/time_since_purchase_spec.rb.#eligible_for_return? it is within the return timeframe returns true.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","rspec.Spree::ReturnItem::ExchangeVariantEligibility::SameOptionValue at ./spec/models/spree/return_item/exchange_variant_eligibility/same_option_value_spec.rb..eligible_variants does not return variants for another product.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","rspec.Spree::ReturnItem::ExchangeVariantEligibility::SameOptionValue at ./spec/models/spree/return_item/exchange_variant_eligibility/same_option_value_spec.rb..eligible_variants no option value restrictions are specified returns all variants for the product.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","rspec.Spree::ReturnItem::ExchangeVariantEligibility::SameOptionValue at ./spec/models/spree/return_item/exchange_variant_eligibility/same_option_value_spec.rb..eligible_variants returns all other variants for the same product with the same option value for the specified option type.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::ReturnItem::ExchangeVariantEligibility::SameProduct at ./spec/models/spree/return_item/exchange_variant_eligibility/same_product_spec.rb..eligible_variants does not return variants for another product.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","rspec.Spree::ReturnItem::ExchangeVariantEligibility::SameProduct at ./spec/models/spree/return_item/exchange_variant_eligibility/same_product_spec.rb..eligible_variants only returns variants that are on hand or backorderable.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","rspec.Spree::ReturnItem::ExchangeVariantEligibility::SameProduct at ./spec/models/spree/return_item/exchange_variant_eligibility/same_product_spec.rb..eligible_variants product has no variants returns the master variant for the same product.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","rspec.Spree::ReturnItem::ExchangeVariantEligibility::SameProduct at ./spec/models/spree/return_item/exchange_variant_eligibility/same_product_spec.rb..eligible_variants product has variants returns all variants for the same product.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","rspec.Spree::ReturnsCalculator at ./spec/models/spree/returns_calculator_spec.rb.compute_shipment must be overridden.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","rspec.Spree::Role at ./spec/models/spree/role_spec.rb..default_admin_role returns the default admin role.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.Spree::Role at ./spec/models/spree/role_spec.rb.with users can access users through the polymorphic association.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::RoleUser at ./spec/models/spree/role_user_spec.rb.#name returns the name of the user.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","rspec.Spree::RoleUser at ./spec/models/spree/role_user_spec.rb.Callbacks before_validation :set_default_resource sets the resource to the current store if it is not set.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","rspec.Spree::RoleUser at ./spec/models/spree/role_user_spec.rb.with different user types can associate with different user types.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::Seeds::All at ./spec/services/spree/seeds/all_spec.rb.runs without raising errors.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","rspec.Spree::Seeds::DigitalDelivery at ./spec/services/spree/seeds/digital_delivery_spec.rb.ShippingMethod creates a Digital Delivery shipping method.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::Seeds::DigitalDelivery at ./spec/services/spree/seeds/digital_delivery_spec.rb.ShippingMethod when Digital Delivery shipping method already exists doesn't create a new shipping method.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","rspec.Spree::Seeds::PaymentMethods at ./spec/services/spree/seeds/payment_methods_spec.rb.creates a Store Credit payment method.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","rspec.Spree::Seeds::PaymentMethods at ./spec/services/spree/seeds/payment_methods_spec.rb.when the Store Credit payment method already exists doesn't create a new payment method.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.Spree::Seeds::ReturnsEnvironment at ./spec/services/spree/seeds/returns_environment_spec.rb.RefundReason creates a Return processing RefundReason.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::Seeds::ReturnsEnvironment at ./spec/services/spree/seeds/returns_environment_spec.rb.RefundReason when the RefundReason already exists doesn't create a new RefundReason.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","rspec.Spree::Seeds::ReturnsEnvironment at ./spec/services/spree/seeds/returns_environment_spec.rb.ReimbursementType creates all ReimbursementTypes.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","rspec.Spree::Seeds::ReturnsEnvironment at ./spec/services/spree/seeds/returns_environment_spec.rb.ReimbursementType when ReimbursementTypes already exist doesn't create new ReimbursementTypes.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","rspec.Spree::Seeds::ReturnsEnvironment at ./spec/services/spree/seeds/returns_environment_spec.rb.ReturnAuthorizationReason creates all ReturnAuthorizationReasons.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.Spree::Seeds::ReturnsEnvironment at ./spec/services/spree/seeds/returns_environment_spec.rb.ReturnAuthorizationReason when ReturnAuthorizationReasons already exist doesn't create new ReturnAuthorizationReasons.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","rspec.Spree::Seeds::TaxCategories at ./spec/services/spree/seeds/tax_categories_spec.rb.TaxCategory creates all TaxCategories.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::Seeds::TaxCategories at ./spec/services/spree/seeds/tax_categories_spec.rb.TaxCategory when TaxCategories already exist doesn't create new TaxCategories.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","rspec.Spree::ServiceModule at ./spec/lib/spree/service_module_spec.rb.first method failed doesn't call second method.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:5\"}}","rspec.Spree::ServiceModule at ./spec/lib/spree/service_module_spec.rb.first method failed returns result which is instance of Result.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:4\"}}","rspec.Spree::ServiceModule at ./spec/lib/spree/service_module_spec.rb.first method failed returns result with failure? true.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2\"}}","rspec.Spree::ServiceModule at ./spec/lib/spree/service_module_spec.rb.first method failed returns result with success? false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","rspec.Spree::ServiceModule at ./spec/lib/spree/service_module_spec.rb.first method failed returns value from first failed method.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3\"}}","rspec.Spree::ServiceModule at ./spec/lib/spree/service_module_spec.rb.non wrapped value in last method raises WrongDataPassed.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","rspec.Spree::ServiceModule at ./spec/lib/spree/service_module_spec.rb.non wrapped value raises WrongDataPassed.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","rspec.Spree::ServiceModule at ./spec/lib/spree/service_module_spec.rb.non wrapped value returns message in exception.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","rspec.Spree::ServiceModule at ./spec/lib/spree/service_module_spec.rb.noncallable thing passed to run raises NonCallablePassedToRun.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::ServiceModule at ./spec/lib/spree/service_module_spec.rb.not compatible params passed as result raises exception.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","rspec.Spree::ServiceModule at ./spec/lib/spree/service_module_spec.rb.success calls second method.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:4\"}}","rspec.Spree::ServiceModule at ./spec/lib/spree/service_module_spec.rb.success passes empty hash if input was not provided.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:6\"}}","rspec.Spree::ServiceModule at ./spec/lib/spree/service_module_spec.rb.success passes input from call to first run method.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:5\"}}","rspec.Spree::ServiceModule at ./spec/lib/spree/service_module_spec.rb.success returns result with failure? false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2\"}}","rspec.Spree::ServiceModule at ./spec/lib/spree/service_module_spec.rb.success returns result with success? true.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","rspec.Spree::ServiceModule at ./spec/lib/spree/service_module_spec.rb.success returns value from last method.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:3\"}}","rspec.Spree::ServiceModule at ./spec/lib/spree/service_module_spec.rb.unimplemented method raises MethodNotImplemented.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.Spree::ServiceModule at ./spec/lib/spree/service_module_spec.rb.unimplemented method returns message in exception.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","rspec.Spree::Shipment at ./spec/models/spree/shipment_spec.rb.#can_get_rates? returns false if order is not digital and it does not have a ship address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:27:2\"}}","rspec.Spree::Shipment at ./spec/models/spree/shipment_spec.rb.#can_get_rates? returns false when order's ship address is not valid.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:27:3\"}}","rspec.Spree::Shipment at ./spec/models/spree/shipment_spec.rb.#can_get_rates? returns true if order is digital and it does not have a ship address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:27:1\"}}","rspec.Spree::Shipment at ./spec/models/spree/shipment_spec.rb.#can_get_rates? returns true when order's ship address is valid.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:27:4\"}}","rspec.Spree::Shipment at ./spec/models/spree/shipment_spec.rb.#cancel cancels the shipment.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:31:1\"}}","rspec.Spree::Shipment at ./spec/models/spree/shipment_spec.rb.#cancel restocks the items.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:31:2\"}}","rspec.Spree::Shipment at ./spec/models/spree/shipment_spec.rb.#cancel with backordered inventory units doesn't fill backorders when restocking inventory units.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:31:3:1\"}}","rspec.Spree::Shipment at ./spec/models/spree/shipment_spec.rb.#currency return order currency.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:25:1\"}}","rspec.Spree::Shipment at ./spec/models/spree/shipment_spec.rb.#destroy destroys linked shipping_rates.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:43:1\"}}","rspec.Spree::Shipment at ./spec/models/spree/shipment_spec.rb.#determine_state returns canceled if order is canceled?.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1\"}}","rspec.Spree::Shipment at ./spec/models/spree/shipment_spec.rb.#determine_state returns canceled when shipment is canceled.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:2\"}}","rspec.Spree::Shipment at ./spec/models/spree/shipment_spec.rb.#determine_state returns pending if backordered.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:4\"}}","rspec.Spree::Shipment at ./spec/models/spree/shipment_spec.rb.#determine_state returns pending unless order.can_ship?.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:3\"}}","rspec.Spree::Shipment at ./spec/models/spree/shipment_spec.rb.#determine_state returns pending when unpaid.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:6\"}}","rspec.Spree::Shipment at ./spec/models/spree/shipment_spec.rb.#determine_state returns ready when Config.auto_capture_on_dispatch.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:8\"}}","rspec.Spree::Shipment at ./spec/models/spree/shipment_spec.rb.#determine_state returns ready when paid.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:7\"}}","rspec.Spree::Shipment at ./spec/models/spree/shipment_spec.rb.#determine_state returns shipped when already shipped.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:5\"}}","rspec.Spree::Shipment at ./spec/models/spree/shipment_spec.rb.#digital? returns false if shipping method does not have a digital calculator.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2\"}}","rspec.Spree::Shipment at ./spec/models/spree/shipment_spec.rb.#digital? returns true if shipping method has a digital calculator.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","rspec.Spree::Shipment at ./spec/models/spree/shipment_spec.rb.#digital? when shipping method is nil returns false if shipping method is nil.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3:1\"}}","rspec.Spree::Shipment at ./spec/models/spree/shipment_spec.rb.#discounted_cost.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18\"}}","rspec.Spree::Shipment at ./spec/models/spree/shipment_spec.rb.#final_price.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:21\"}}","rspec.Spree::Shipment at ./spec/models/spree/shipment_spec.rb.#free? returns true if final_price is equal to 0.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:22:1\"}}","rspec.Spree::Shipment at ./spec/models/spree/shipment_spec.rb.#free? returns when Free Shipping promotion is applied.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:22:2\"}}","rspec.Spree::Shipment at ./spec/models/spree/shipment_spec.rb.#item_cost equals line items final amount with tax.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:2\"}}","rspec.Spree::Shipment at ./spec/models/spree/shipment_spec.rb.#item_cost equals shipment line items amount with tax.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:1\"}}","rspec.Spree::Shipment at ./spec/models/spree/shipment_spec.rb.#item_quantity returns 0 if there are no items in the shipment.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:4\"}}","rspec.Spree::Shipment at ./spec/models/spree/shipment_spec.rb.#item_quantity returns only the sum of items in the specific shipment, not in other shipments.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:3\"}}","rspec.Spree::Shipment at ./spec/models/spree/shipment_spec.rb.#item_quantity returns the sum of all manifest quantities with multiple quantities per line_item.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:1\"}}","rspec.Spree::Shipment at ./spec/models/spree/shipment_spec.rb.#item_quantity returns the sum of all manifest quantities with single quantity per line_item.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:2\"}}","rspec.Spree::Shipment at ./spec/models/spree/shipment_spec.rb.#item_weight equals line items weight.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:1\"}}","rspec.Spree::Shipment at ./spec/models/spree/shipment_spec.rb.#name returns the shipment number and shipping method name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","rspec.Spree::Shipment at ./spec/models/spree/shipment_spec.rb.#partial? when all products are included in the shipment example at ./spec/models/spree/shipment_spec.rb:85.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1:1\"}}","rspec.Spree::Shipment at ./spec/models/spree/shipment_spec.rb.#partial? when not all products are included in the shipment example at ./spec/models/spree/shipment_spec.rb:93.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2:1\"}}","rspec.Spree::Shipment at ./spec/models/spree/shipment_spec.rb.#ready with Config.auto_capture_on_dispatch == false cannot ready a shipment for an order if the order is unpaid.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:34:1:1\"}}","rspec.Spree::Shipment at ./spec/models/spree/shipment_spec.rb.#ready with Config.auto_capture_on_dispatch == true order has pending payments can fully capture an authorized payment.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:34:2:3:1\"}}","rspec.Spree::Shipment at ./spec/models/spree/shipment_spec.rb.#ready with Config.auto_capture_on_dispatch == true order has pending payments can partially capture an authorized payment.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:34:2:3:2\"}}","rspec.Spree::Shipment at ./spec/models/spree/shipment_spec.rb.#ready with Config.auto_capture_on_dispatch == true shipments ready for an order if the order is unpaid.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:34:2:1\"}}","rspec.Spree::Shipment at ./spec/models/spree/shipment_spec.rb.#ready with Config.auto_capture_on_dispatch == true tells the order to process payment in #after_ship.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:34:2:2\"}}","rspec.Spree::Shipment at ./spec/models/spree/shipment_spec.rb.#resume for a shipment item that does not track inventory skips unstocking the shipment item.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:32:4:1\"}}","rspec.Spree::Shipment at ./spec/models/spree/shipment_spec.rb.#resume transitions state to pending if the order is not ready.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:32:2\"}}","rspec.Spree::Shipment at ./spec/models/spree/shipment_spec.rb.#resume transitions state to ready if the order is ready.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:32:1\"}}","rspec.Spree::Shipment at ./spec/models/spree/shipment_spec.rb.#resume unstocks them items.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:32:3\"}}","rspec.Spree::Shipment at ./spec/models/spree/shipment_spec.rb.#ship from canceled finalizes adjustments.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:33:3:2\"}}","rspec.Spree::Shipment at ./spec/models/spree/shipment_spec.rb.#ship from canceled updates shipped_at timestamp.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:33:3:1\"}}","rspec.Spree::Shipment at ./spec/models/spree/shipment_spec.rb.#ship from ready finalizes adjustments.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:33:2:2\"}}","rspec.Spree::Shipment at ./spec/models/spree/shipment_spec.rb.#ship from ready updates shipped_at timestamp.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:33:2:1\"}}","rspec.Spree::Shipment at ./spec/models/spree/shipment_spec.rb.#ship when the shipment is canceled unstocks them items.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:33:1:1\"}}","rspec.Spree::Shipment at ./spec/models/spree/shipment_spec.rb.#store return order store.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:24:1\"}}","rspec.Spree::Shipment at ./spec/models/spree/shipment_spec.rb.#tax_total with additional taxes.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:20\"}}","rspec.Spree::Shipment at ./spec/models/spree/shipment_spec.rb.#tax_total with included taxes.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19\"}}","rspec.Spree::Shipment at ./spec/models/spree/shipment_spec.rb.#tracked? returns true if the shipment is tracked.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","rspec.Spree::Shipment at ./spec/models/spree/shipment_spec.rb.#tracked? when the shipment is not tracked returns false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2:1\"}}","rspec.Spree::Shipment at ./spec/models/spree/shipment_spec.rb.#tracking_url uses shipping method to determine url.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:40:1\"}}","rspec.Spree::Shipment at ./spec/models/spree/shipment_spec.rb.#transfer_to_location creates new shipment for same order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:41:1\"}}","rspec.Spree::Shipment at ./spec/models/spree/shipment_spec.rb.#transfer_to_location sets proper costs for new shipment.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:41:3\"}}","rspec.Spree::Shipment at ./spec/models/spree/shipment_spec.rb.#transfer_to_location sets the given stock location for new shipment.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:41:2\"}}","rspec.Spree::Shipment at ./spec/models/spree/shipment_spec.rb.#transfer_to_location updates `order.shipment_total` to the sum of shipments cost.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:41:4\"}}","rspec.Spree::Shipment at ./spec/models/spree/shipment_spec.rb.#update! when order cannot ship results in a 'pending' state.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:1:1\"}}","rspec.Spree::Shipment at ./spec/models/spree/shipment_spec.rb.#update! when order has a credit owed behaves like immutable once shipped remains in shipped state once shipped.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:4:2:1\"}}","rspec.Spree::Shipment at ./spec/models/spree/shipment_spec.rb.#update! when order has a credit owed behaves like pending if backordered has a state of pending if backordered.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:4:3:1\"}}","rspec.Spree::Shipment at ./spec/models/spree/shipment_spec.rb.#update! when order has a credit owed results in a 'ready' state.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:4:1\"}}","rspec.Spree::Shipment at ./spec/models/spree/shipment_spec.rb.#update! when order has balance due behaves like immutable once shipped remains in shipped state once shipped.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:3:2:1\"}}","rspec.Spree::Shipment at ./spec/models/spree/shipment_spec.rb.#update! when order has balance due behaves like pending if backordered has a state of pending if backordered.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:3:3:1\"}}","rspec.Spree::Shipment at ./spec/models/spree/shipment_spec.rb.#update! when order has balance due results in a 'pending' state.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:3:1\"}}","rspec.Spree::Shipment at ./spec/models/spree/shipment_spec.rb.#update! when order is paid behaves like immutable once shipped remains in shipped state once shipped.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:2:2:1\"}}","rspec.Spree::Shipment at ./spec/models/spree/shipment_spec.rb.#update! when order is paid behaves like pending if backordered has a state of pending if backordered.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:2:3:1\"}}","rspec.Spree::Shipment at ./spec/models/spree/shipment_spec.rb.#update! when order is paid results in a 'ready' state.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:2:1\"}}","rspec.Spree::Shipment at ./spec/models/spree/shipment_spec.rb.#update! when shipment state changes to shipped calls after_ship.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:5:1\"}}","rspec.Spree::Shipment at ./spec/models/spree/shipment_spec.rb.#update! when shipment state changes to shipped when using a custom shipment handler calls the custom handler's 'perform' method.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:5:3:1\"}}","rspec.Spree::Shipment at ./spec/models/spree/shipment_spec.rb.#update! when shipment state changes to shipped when using the default shipment handler calls the 'perform' method.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:5:2:1\"}}","rspec.Spree::Shipment at ./spec/models/spree/shipment_spec.rb.#update! when shipment state changes to shipped with adjustments transitions to shipped.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:5:4:1\"}}","rspec.Spree::Shipment at ./spec/models/spree/shipment_spec.rb.#weight_unit equals line items weight unit.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:17:1\"}}","rspec.Spree::Shipment at ./spec/models/spree/shipment_spec.rb.#with_free_shipping_promotion? returns false otherwise.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:23:2\"}}","rspec.Spree::Shipment at ./spec/models/spree/shipment_spec.rb.#with_free_shipping_promotion? returns true when Free Shipping promotion is applied.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:23:1\"}}","rspec.Spree::Shipment at ./spec/models/spree/shipment_spec.rb..ready_or_pending returns shipments with state ready or pending.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:45:1\"}}","rspec.Spree::Shipment at ./spec/models/spree/shipment_spec.rb.after_save line item changes does not trigger adjustment recalculation if shipment has shipped.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:37:1:2\"}}","rspec.Spree::Shipment at ./spec/models/spree/shipment_spec.rb.after_save line item changes triggers adjustment total recalculation.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:37:1:1\"}}","rspec.Spree::Shipment at ./spec/models/spree/shipment_spec.rb.after_save line item does not change does not trigger adjustment total recalculation.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:37:2:1\"}}","rspec.Spree::Shipment at ./spec/models/spree/shipment_spec.rb.behaves like lifecycle events lifecycle events shipment.created publishes created event when record is created.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","rspec.Spree::Shipment at ./spec/models/spree/shipment_spec.rb.behaves like lifecycle events lifecycle events shipment.deleted publishes deleted event when record is deleted.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:1\"}}","rspec.Spree::Shipment at ./spec/models/spree/shipment_spec.rb.behaves like lifecycle events lifecycle events shipment.updated publishes updated event when record is updated.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","rspec.Spree::Shipment at ./spec/models/spree/shipment_spec.rb.behaves like metadata can query records by metadata properties.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:10\"}}","rspec.Spree::Shipment at ./spec/models/spree/shipment_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:10.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:5\"}}","rspec.Spree::Shipment at ./spec/models/spree/shipment_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:11.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:6\"}}","rspec.Spree::Shipment at ./spec/models/spree/shipment_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:4.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.Spree::Shipment at ./spec/models/spree/shipment_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:5.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","rspec.Spree::Shipment at ./spec/models/spree/shipment_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:7.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3\"}}","rspec.Spree::Shipment at ./spec/models/spree/shipment_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:8.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:4\"}}","rspec.Spree::Shipment at ./spec/models/spree/shipment_spec.rb.behaves like metadata reads data as not symbolized keys.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:8\"}}","rspec.Spree::Shipment at ./spec/models/spree/shipment_spec.rb.behaves like metadata reads data as symbolized keys.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:7\"}}","rspec.Spree::Shipment at ./spec/models/spree/shipment_spec.rb.changes shipping rate via general update updates everything around order shipment total and state.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:36:1\"}}","rspec.Spree::Shipment at ./spec/models/spree/shipment_spec.rb.currency returns the order currency.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:38:1\"}}","rspec.Spree::Shipment at ./spec/models/spree/shipment_spec.rb.display_amount retuns a Spree::Money.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1\"}}","rspec.Spree::Shipment at ./spec/models/spree/shipment_spec.rb.display_final_price retuns a Spree::Money.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:1\"}}","rspec.Spree::Shipment at ./spec/models/spree/shipment_spec.rb.display_item_cost retuns a Spree::Money.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:1\"}}","rspec.Spree::Shipment at ./spec/models/spree/shipment_spec.rb.events canceled state transition publishes shipment.canceled event.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:46:2:1\"}}","rspec.Spree::Shipment at ./spec/models/spree/shipment_spec.rb.events resumed state transition publishes shipment.resumed event.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:46:3:1\"}}","rspec.Spree::Shipment at ./spec/models/spree/shipment_spec.rb.events shipped state transition publishes shipment.shipped event.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:46:1:1\"}}","rspec.Spree::Shipment at ./spec/models/spree/shipment_spec.rb.is backordered if one if its inventory_units is backordered.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9\"}}","rspec.Spree::Shipment at ./spec/models/spree/shipment_spec.rb.manifest returns variant expected.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:26:1\"}}","rspec.Spree::Shipment at ./spec/models/spree/shipment_spec.rb.manifest variant was removed still returns variant expected.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:26:2:1\"}}","rspec.Spree::Shipment at ./spec/models/spree/shipment_spec.rb.nil costs sets cost to 0.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:39:1\"}}","rspec.Spree::Shipment at ./spec/models/spree/shipment_spec.rb.number generation generates a number containing a letter + 11 numbers.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1\"}}","rspec.Spree::Shipment at ./spec/models/spree/shipment_spec.rb.precision of pre_tax_amount keeps four digits of precision even when reloading.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","rspec.Spree::Shipment at ./spec/models/spree/shipment_spec.rb.set up new inventory units associates variant and order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:42:1\"}}","rspec.Spree::Shipment at ./spec/models/spree/shipment_spec.rb.shipping_rates refresh_rates can't get rates without a shipping address.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:28:2:4\"}}","rspec.Spree::Shipment at ./spec/models/spree/shipment_spec.rb.shipping_rates refresh_rates does not refresh if shipment is shipped.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:28:2:3\"}}","rspec.Spree::Shipment at ./spec/models/spree/shipment_spec.rb.shipping_rates refresh_rates handles no shipping_method selection.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:28:2:2\"}}","rspec.Spree::Shipment at ./spec/models/spree/shipment_spec.rb.shipping_rates refresh_rates requests new rates, and maintain shipping_method selection.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:28:2:1\"}}","rspec.Spree::Shipment at ./spec/models/spree/shipment_spec.rb.shipping_rates refresh_rates to_package uses symbols for states when adding contents to package.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:28:2:5:1\"}}","rspec.Spree::Shipment at ./spec/models/spree/shipment_spec.rb.shipping_rates returns shipping_method from selected shipping_rate.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:28:1\"}}","rspec.Spree::Shipment at ./spec/models/spree/shipment_spec.rb.state changes are logged to the database.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:44:1\"}}","rspec.Spree::Shipment at ./spec/models/spree/shipment_spec.rb.updates cost when selected shipping rate is present does not factor in included adjustments to adjustment total.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:35:3\"}}","rspec.Spree::Shipment at ./spec/models/spree/shipment_spec.rb.updates cost when selected shipping rate is present factors in additional adjustments to adjustment total.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:35:2\"}}","rspec.Spree::Shipment at ./spec/models/spree/shipment_spec.rb.updates cost when selected shipping rate is present updates shipment totals.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:35:1\"}}","rspec.Spree::Shipment at ./spec/models/spree/shipment_spec.rb.when order is completed with inventory tracking validates with inventory.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:30:1:1\"}}","rspec.Spree::Shipment at ./spec/models/spree/shipment_spec.rb.when order is completed without inventory tracking validates with no inventory.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:30:2:1\"}}","rspec.Spree::Shipment::CustomEvents at ./spec/models/spree/shipment/custom_events_spec.rb.order.shipped event does not publish order.shipped when order has unshipped shipments.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","rspec.Spree::Shipment::CustomEvents at ./spec/models/spree/shipment/custom_events_spec.rb.order.shipped event publishes order.shipped when shipment ships and order is fully shipped.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.Spree::Shipment::CustomEvents at ./spec/models/spree/shipment/custom_events_spec.rb.shipment.shipped event does not publish when events are disabled.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","rspec.Spree::Shipment::CustomEvents at ./spec/models/spree/shipment/custom_events_spec.rb.shipment.shipped event publishes shipment.shipped when shipment state changes to shipped.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::ShipmentHelper at ./spec/helpers/shipment_helper_spec.rb.#shipment_tracking_link_to with name passed in params creates link with passed value as a name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","rspec.Spree::ShipmentHelper at ./spec/helpers/shipment_helper_spec.rb.#shipment_tracking_link_to with no tracking_url returns empty string.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1\"}}","rspec.Spree::ShipmentHelper at ./spec/helpers/shipment_helper_spec.rb.#shipment_tracking_link_to with options sets options for link.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5:1\"}}","rspec.Spree::ShipmentHelper at ./spec/helpers/shipment_helper_spec.rb.#shipment_tracking_link_to with tracking and tracking_url creates link with tracking as a name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","rspec.Spree::ShipmentHelper at ./spec/helpers/shipment_helper_spec.rb.#shipment_tracking_link_to with tracking_url only creates a link with tracking_url as a name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","rspec.Spree::Shipments::AddItem at ./spec/services/spree/shipments/add_item_spec.rb.missing variant example at ./spec/services/spree/shipments/add_item_spec.rb:91.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.Spree::Shipments::AddItem at ./spec/services/spree/shipments/add_item_spec.rb.missing variant example at ./spec/services/spree/shipments/add_item_spec.rb:92.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","rspec.Spree::Shipments::AddItem at ./spec/services/spree/shipments/add_item_spec.rb.valid attributes with existing line item adds quantity to the existing line item.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:2\"}}","rspec.Spree::Shipments::AddItem at ./spec/services/spree/shipments/add_item_spec.rb.valid attributes with existing line item does not create a new line item.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","rspec.Spree::Shipments::AddItem at ./spec/services/spree/shipments/add_item_spec.rb.valid attributes with existing line item updates line item totals.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:3\"}}","rspec.Spree::Shipments::AddItem at ./spec/services/spree/shipments/add_item_spec.rb.valid attributes without pre-existing line item behaves like creates a line item creates new line item record.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:2\"}}","rspec.Spree::Shipments::AddItem at ./spec/services/spree/shipments/add_item_spec.rb.valid attributes without pre-existing line item behaves like creates a line item example at ./spec/services/spree/shipments/add_item_spec.rb:28.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","rspec.Spree::Shipments::AddItem at ./spec/services/spree/shipments/add_item_spec.rb.valid attributes without quantity passed creates new line item record.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2\"}}","rspec.Spree::Shipments::AddItem at ./spec/services/spree/shipments/add_item_spec.rb.valid attributes without quantity passed example at ./spec/services/spree/shipments/add_item_spec.rb:49.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","rspec.Spree::Shipments::Create at ./spec/services/spree/shipments/create_spec.rb.missing order example at ./spec/services/spree/shipments/create_spec.rb:102.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","rspec.Spree::Shipments::Create at ./spec/services/spree/shipments/create_spec.rb.missing order example at ./spec/services/spree/shipments/create_spec.rb:103.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","rspec.Spree::Shipments::Create at ./spec/services/spree/shipments/create_spec.rb.missing stock location example at ./spec/services/spree/shipments/create_spec.rb:116.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","rspec.Spree::Shipments::Create at ./spec/services/spree/shipments/create_spec.rb.missing stock location example at ./spec/services/spree/shipments/create_spec.rb:117.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2\"}}","rspec.Spree::Shipments::Create at ./spec/services/spree/shipments/create_spec.rb.missing variant example at ./spec/services/spree/shipments/create_spec.rb:88.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.Spree::Shipments::Create at ./spec/services/spree/shipments/create_spec.rb.missing variant example at ./spec/services/spree/shipments/create_spec.rb:89.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","rspec.Spree::Shipments::Create at ./spec/services/spree/shipments/create_spec.rb.valid attributes with existing line item adds quantity to the existing line item.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:3\"}}","rspec.Spree::Shipments::Create at ./spec/services/spree/shipments/create_spec.rb.valid attributes with existing line item behaves like creates a shipment creates new shipment record.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1:1\"}}","rspec.Spree::Shipments::Create at ./spec/services/spree/shipments/create_spec.rb.valid attributes with existing line item behaves like creates a shipment example at ./spec/services/spree/shipments/create_spec.rb:35.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1:2\"}}","rspec.Spree::Shipments::Create at ./spec/services/spree/shipments/create_spec.rb.valid attributes with existing line item behaves like creates a shipment example at ./spec/services/spree/shipments/create_spec.rb:36.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1:3\"}}","rspec.Spree::Shipments::Create at ./spec/services/spree/shipments/create_spec.rb.valid attributes with existing line item does not create a new line item.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2\"}}","rspec.Spree::Shipments::Create at ./spec/services/spree/shipments/create_spec.rb.valid attributes with existing line item updates line item totals.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:4\"}}","rspec.Spree::Shipments::Create at ./spec/services/spree/shipments/create_spec.rb.valid attributes without pre-existing line item behaves like creates a line item creates new line item record.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","rspec.Spree::Shipments::Create at ./spec/services/spree/shipments/create_spec.rb.valid attributes without pre-existing line item behaves like creates a shipment creates new shipment record.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","rspec.Spree::Shipments::Create at ./spec/services/spree/shipments/create_spec.rb.valid attributes without pre-existing line item behaves like creates a shipment example at ./spec/services/spree/shipments/create_spec.rb:35.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:2\"}}","rspec.Spree::Shipments::Create at ./spec/services/spree/shipments/create_spec.rb.valid attributes without pre-existing line item behaves like creates a shipment example at ./spec/services/spree/shipments/create_spec.rb:36.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:3\"}}","rspec.Spree::Shipments::RemoveItem at ./spec/services/spree/shipments/remove_item_spec.rb.missing variant example at ./spec/services/spree/shipments/remove_item_spec.rb:93.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.Spree::Shipments::RemoveItem at ./spec/services/spree/shipments/remove_item_spec.rb.missing variant example at ./spec/services/spree/shipments/remove_item_spec.rb:94.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","rspec.Spree::Shipments::RemoveItem at ./spec/services/spree/shipments/remove_item_spec.rb.valid attributes entire shipment & line item qty removed behaves like removes line item example at ./spec/services/spree/shipments/remove_item_spec.rb:30.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:1\"}}","rspec.Spree::Shipments::RemoveItem at ./spec/services/spree/shipments/remove_item_spec.rb.valid attributes entire shipment & line item qty removed behaves like removes shipment example at ./spec/services/spree/shipments/remove_item_spec.rb:34.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:3:1\"}}","rspec.Spree::Shipments::RemoveItem at ./spec/services/spree/shipments/remove_item_spec.rb.valid attributes entire shipment & line item qty removed behaves like removes shipment example at ./spec/services/spree/shipments/remove_item_spec.rb:35.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:3:2\"}}","rspec.Spree::Shipments::RemoveItem at ./spec/services/spree/shipments/remove_item_spec.rb.valid attributes entire shipment & line item qty removed behaves like successful example at ./spec/services/spree/shipments/remove_item_spec.rb:26.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1:1\"}}","rspec.Spree::Shipments::RemoveItem at ./spec/services/spree/shipments/remove_item_spec.rb.valid attributes no quantity is passed behaves like removes line item example at ./spec/services/spree/shipments/remove_item_spec.rb:30.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:2:1\"}}","rspec.Spree::Shipments::RemoveItem at ./spec/services/spree/shipments/remove_item_spec.rb.valid attributes no quantity is passed behaves like removes shipment example at ./spec/services/spree/shipments/remove_item_spec.rb:34.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:3:1\"}}","rspec.Spree::Shipments::RemoveItem at ./spec/services/spree/shipments/remove_item_spec.rb.valid attributes no quantity is passed behaves like removes shipment example at ./spec/services/spree/shipments/remove_item_spec.rb:35.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:3:2\"}}","rspec.Spree::Shipments::RemoveItem at ./spec/services/spree/shipments/remove_item_spec.rb.valid attributes no quantity is passed behaves like successful example at ./spec/services/spree/shipments/remove_item_spec.rb:26.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1:1\"}}","rspec.Spree::Shipments::RemoveItem at ./spec/services/spree/shipments/remove_item_spec.rb.valid attributes part of the line item qty removed behaves like successful example at ./spec/services/spree/shipments/remove_item_spec.rb:26.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","rspec.Spree::Shipments::RemoveItem at ./spec/services/spree/shipments/remove_item_spec.rb.valid attributes part of the line item qty removed decreases line item quantity.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:4\"}}","rspec.Spree::Shipments::RemoveItem at ./spec/services/spree/shipments/remove_item_spec.rb.valid attributes part of the line item qty removed example at ./spec/services/spree/shipments/remove_item_spec.rb:51.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2\"}}","rspec.Spree::Shipments::RemoveItem at ./spec/services/spree/shipments/remove_item_spec.rb.valid attributes part of the line item qty removed example at ./spec/services/spree/shipments/remove_item_spec.rb:52.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3\"}}","rspec.Spree::Shipments::RemoveItem at ./spec/services/spree/shipments/remove_item_spec.rb.valid attributes part of the line item qty removed example at ./spec/services/spree/shipments/remove_item_spec.rb:60.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:5\"}}","rspec.Spree::Shipments::RemoveItem at ./spec/services/spree/shipments/remove_item_spec.rb.valid attributes part of the line item qty removed example at ./spec/services/spree/shipments/remove_item_spec.rb:61.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:6\"}}","rspec.Spree::ShippingCalculator at ./spec/models/spree/shipping_calculator_spec.rb.calculates totals for content_items.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6\"}}","rspec.Spree::ShippingCalculator at ./spec/models/spree/shipping_calculator_spec.rb.checks availability for a package.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5\"}}","rspec.Spree::ShippingCalculator at ./spec/models/spree/shipping_calculator_spec.rb.compute_package must be overridden.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4\"}}","rspec.Spree::ShippingCalculator at ./spec/models/spree/shipping_calculator_spec.rb.compute_shipment must be overridden.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3\"}}","rspec.Spree::ShippingCalculator at ./spec/models/spree/shipping_calculator_spec.rb.computes with a package.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2\"}}","rspec.Spree::ShippingCalculator at ./spec/models/spree/shipping_calculator_spec.rb.computes with a shipment.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","rspec.Spree::ShippingCategory at ./spec/models/spree/shipping_category_spec.rb.#includes_digital_shipping_method? returns true if the shipping category includes a digital shipping method.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.Spree::ShippingCategory at ./spec/models/spree/shipping_category_spec.rb.Validations has a valid factory.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::ShippingCategory at ./spec/models/spree/shipping_category_spec.rb.Validations requires name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","rspec.Spree::ShippingCategory at ./spec/models/spree/shipping_category_spec.rb.Validations validates uniqueness.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","rspec.Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb.#available_to_display? when available on backend example at ./spec/models/spree/shipping_method_spec.rb:163.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:2:1\"}}","rspec.Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb.#available_to_display? when available on backend example at ./spec/models/spree/shipping_method_spec.rb:164.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:2:2\"}}","rspec.Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb.#available_to_display? when available on backend example at ./spec/models/spree/shipping_method_spec.rb:165.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:2:3\"}}","rspec.Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb.#available_to_display? when available on frontend example at ./spec/models/spree/shipping_method_spec.rb:157.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1:1\"}}","rspec.Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb.#available_to_display? when available on frontend example at ./spec/models/spree/shipping_method_spec.rb:158.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1:2\"}}","rspec.Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb.#available_to_display? when available on frontend example at ./spec/models/spree/shipping_method_spec.rb:159.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1:3\"}}","rspec.Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb.#backend? example at ./spec/models/spree/shipping_method_spec.rb:176.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:1\"}}","rspec.Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb.#backend? example at ./spec/models/spree/shipping_method_spec.rb:177.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:2\"}}","rspec.Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb.#backend? example at ./spec/models/spree/shipping_method_spec.rb:178.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:3\"}}","rspec.Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb.#build_tracking_url shipping method does not have a tracking URL mask on file uses tracking number gem to build tracking url.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2:1\"}}","rspec.Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb.#build_tracking_url shipping method has a tracking URL mask on file tracking number has spaces returns a single URL with '%20' in lieu of spaces.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1:1:1\"}}","rspec.Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb.#delivery_range when both are the same example at ./spec/models/spree/shipping_method_spec.rb:195.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:3:1\"}}","rspec.Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb.#delivery_range when only one transit day value is set when only maximum day is set example at ./spec/models/spree/shipping_method_spec.rb:208.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:4:2:1\"}}","rspec.Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb.#delivery_range when only one transit day value is set when only minimum day is set example at ./spec/models/spree/shipping_method_spec.rb:202.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:4:1:1\"}}","rspec.Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb.#delivery_range with set estimated_transit_business_days_min and estimated_transit_business_days_max example at ./spec/models/spree/shipping_method_spec.rb:189.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:2:1\"}}","rspec.Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb.#delivery_range without set estimated_transit_business_days_min and estimated_transit_business_days_max example at ./spec/models/spree/shipping_method_spec.rb:183.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:1:1\"}}","rspec.Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb.#display_estimated_price example at ./spec/models/spree/shipping_method_spec.rb:214.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:1\"}}","rspec.Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb.#display_estimated_price with the free rate example at ./spec/models/spree/shipping_method_spec.rb:219.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:2:1\"}}","rspec.Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb.#frontend? example at ./spec/models/spree/shipping_method_spec.rb:170.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1\"}}","rspec.Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb.#frontend? example at ./spec/models/spree/shipping_method_spec.rb:171.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2\"}}","rspec.Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb.#frontend? example at ./spec/models/spree/shipping_method_spec.rb:172.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:3\"}}","rspec.Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb.#requires_zone_check? returns false if the shipping method is digital.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","rspec.Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb.#requires_zone_check? returns true if the shipping method is not digital.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","rspec.Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb.#shipments can gather all the related shipments.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","rspec.Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb.behaves like metadata can query records by metadata properties.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:10\"}}","rspec.Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:10.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","rspec.Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:11.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","rspec.Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:4.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:5.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","rspec.Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:7.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","rspec.Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:8.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","rspec.Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb.behaves like metadata reads data as not symbolized keys.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8\"}}","rspec.Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb.behaves like metadata reads data as symbolized keys.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7\"}}","rspec.Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb.calculators rejects calculators that don't inherit from Spree::ShippingCalculator.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","rspec.Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb.factory sets calculable correctly.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","rspec.Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb.scopes .available example at ./spec/models/spree/shipping_method_spec.rb:22.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","rspec.Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb.scopes .available_on_back_end example at ./spec/models/spree/shipping_method_spec.rb:34.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:1\"}}","rspec.Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb.scopes .available_on_front_end example at ./spec/models/spree/shipping_method_spec.rb:28.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","rspec.Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb.soft deletion soft-deletes when destroy is called.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1\"}}","rspec.Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb.validations shipping category is required adds error to base.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:3:1:2\"}}","rspec.Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb.validations shipping category is required example at ./spec/models/spree/shipping_method_spec.rb:92.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:3:1:1\"}}","rspec.Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb.validations shipping category one associated example at ./spec/models/spree/shipping_method_spec.rb:105.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:3:2:1\"}}","rspec.Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb.validations validates presence of display_on.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2\"}}","rspec.Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb.validations validates presence of name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","rspec.Spree::ShippingRate at ./spec/models/spree/shipping_rate_spec.rb.#delivery_range returns the delivery range for the shipping method.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","rspec.Spree::ShippingRate at ./spec/models/spree/shipping_rate_spec.rb.#display_delivery_range returns the display delivery range for the shipping method.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","rspec.Spree::ShippingRate at ./spec/models/spree/shipping_rate_spec.rb.#display_price when tax included in price when the tax rate is from another zone deducts the other zone's VAT from the calculated shipping rate.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","rspec.Spree::ShippingRate at ./spec/models/spree/shipping_rate_spec.rb.#display_price when tax included in price when the tax rate is from another zone when cost is zero shows no tax amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:2:1\"}}","rspec.Spree::ShippingRate at ./spec/models/spree/shipping_rate_spec.rb.#display_price when tax included in price when the tax rate is from the default zone shows correct tax amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","rspec.Spree::ShippingRate at ./spec/models/spree/shipping_rate_spec.rb.#display_price when tax included in price when the tax rate is from the default zone when cost is zero shows no tax amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:2:1\"}}","rspec.Spree::ShippingRate at ./spec/models/spree/shipping_rate_spec.rb.#display_price when tax is additional to price shows correct tax amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","rspec.Spree::ShippingRate at ./spec/models/spree/shipping_rate_spec.rb.#display_price when tax is additional to price when cost is zero shows no tax amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:1\"}}","rspec.Spree::ShippingRate at ./spec/models/spree/shipping_rate_spec.rb.#display_price when tax rate is not shown in label shows no tax amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1\"}}","rspec.Spree::ShippingRate at ./spec/models/spree/shipping_rate_spec.rb.#display_price when the currency is JPY displays the price in yen.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","rspec.Spree::ShippingRate at ./spec/models/spree/shipping_rate_spec.rb.#final_price does not return 0 when shipment is free because of selected shipping rate.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:4\"}}","rspec.Spree::ShippingRate at ./spec/models/spree/shipping_rate_spec.rb.#final_price returns 0 if cost is lesser than the discount amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2\"}}","rspec.Spree::ShippingRate at ./spec/models/spree/shipping_rate_spec.rb.#final_price returns 0 if free shipping promotion is applied.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","rspec.Spree::ShippingRate at ./spec/models/spree/shipping_rate_spec.rb.#final_price returns cost minus discount amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3\"}}","rspec.Spree::ShippingRate at ./spec/models/spree/shipping_rate_spec.rb.#free? when the shipping rate cost is 0 example at ./spec/models/spree/shipping_rate_spec.rb:208.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1:1\"}}","rspec.Spree::ShippingRate at ./spec/models/spree/shipping_rate_spec.rb.#free? when the shipping rate cost is not 0 example at ./spec/models/spree/shipping_rate_spec.rb:217.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2:1\"}}","rspec.Spree::ShippingRate at ./spec/models/spree/shipping_rate_spec.rb.#free? when the shipping rate cost is not 0 when the discount amount is equal to the cost example at ./spec/models/spree/shipping_rate_spec.rb:235.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2:3:1\"}}","rspec.Spree::ShippingRate at ./spec/models/spree/shipping_rate_spec.rb.#free? when the shipping rate cost is not 0 when the shipment has a free shipping promotion example at ./spec/models/spree/shipping_rate_spec.rb:227.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2:2:1\"}}","rspec.Spree::ShippingRate at ./spec/models/spree/shipping_rate_spec.rb.#shipping_method can be retrieved even when deleted.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","rspec.Spree::ShippingRate at ./spec/models/spree/shipping_rate_spec.rb.#shipping_method can be retrieved.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.Spree::ShippingRate at ./spec/models/spree/shipping_rate_spec.rb.#tax_amount without tax rate returns 0.0.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1\"}}","rspec.Spree::ShippingRate at ./spec/models/spree/shipping_rate_spec.rb.#tax_rate can be retrieved even when deleted.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","rspec.Spree::ShippingRate at ./spec/models/spree/shipping_rate_spec.rb.#tax_rate can be retrieved.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","rspec.Spree::State at ./spec/models/spree/state_spec.rb.can find a state by name or abbr.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","rspec.Spree::State at ./spec/models/spree/state_spec.rb.can find all states group by country id.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2\"}}","rspec.Spree::State at ./spec/models/spree/state_spec.rb.whitelisted_ransackable_attributes example at ./spec/models/spree/state_spec.rb:16.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","rspec.Spree::Stock::AvailabilityValidator at ./spec/models/spree/stock/availability_validator_spec.rb.considers existing inventory_units sufficient.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3\"}}","rspec.Spree::Stock::AvailabilityValidator at ./spec/models/spree/stock/availability_validator_spec.rb.is invalid when supply is insufficent.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2\"}}","rspec.Spree::Stock::AvailabilityValidator at ./spec/models/spree/stock/availability_validator_spec.rb.is valid when supply is sufficient and product is active.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","rspec.Spree::Stock::AvailabilityValidator at ./spec/models/spree/stock/availability_validator_spec.rb.is valid when the quantity is zero.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4\"}}","rspec.Spree::Stock::AvailabilityValidator at ./spec/models/spree/stock/availability_validator_spec.rb.when supply is sufficient but product is not active shows a message about product status and not quantity.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","rspec.Spree::Stock::ContentItem at ./spec/models/spree/stock/content_item_spec.rb.#amount calculates the amount based on line_item's price.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","rspec.Spree::Stock::ContentItem at ./spec/models/spree/stock/content_item_spec.rb.#dimension calculate the total dimension of the variant.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.Spree::Stock::ContentItem at ./spec/models/spree/stock/content_item_spec.rb.#volume calculate the total volume of the variant.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::Stock::Coordinator at ./spec/models/spree/stock/coordinator_spec.rb.#shipments puts the order's ship address on the shipments.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","rspec.Spree::Stock::Coordinator at ./spec/models/spree/stock/coordinator_spec.rb.#shipments turns packages into shipments.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.Spree::Stock::Coordinator at ./spec/models/spree/stock/coordinator_spec.rb.build packages builds a package for every stock location.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","rspec.Spree::Stock::Coordinator at ./spec/models/spree/stock/coordinator_spec.rb.build packages missing stock items in stock location builds packages only for valid stock locations.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","rspec.Spree::Stock::Coordinator at ./spec/models/spree/stock/coordinator_spec.rb.packages builds, prioritizes and estimates.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::Stock::Differentiator at ./spec/models/spree/stock/differentiator_spec.rb.calculates the missing items.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2\"}}","rspec.Spree::Stock::Differentiator at ./spec/models/spree/stock/differentiator_spec.rb.example at ./spec/models/spree/stock/differentiator_spec.rb:31.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","rspec.Spree::Stock::Estimator at ./spec/models/spree/stock/estimator_spec.rb.#shipping rates VAT price calculation when the order does not have a tax zone behaves like shipping rate matches returns shipping rates.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:12:1:1:1\"}}","rspec.Spree::Stock::Estimator at ./spec/models/spree/stock/estimator_spec.rb.#shipping rates VAT price calculation when the order's tax zone is a non-VAT zone deducts the default VAT from the cost.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:12:3:1\"}}","rspec.Spree::Stock::Estimator at ./spec/models/spree/stock/estimator_spec.rb.#shipping rates VAT price calculation when the order's tax zone is a zone with VAT outside the default zone deducts the default vat and applies the foreign vat to calculate the price.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:12:4:1\"}}","rspec.Spree::Stock::Estimator at ./spec/models/spree/stock/estimator_spec.rb.#shipping rates VAT price calculation when the order's tax zone is the default zone behaves like shipping rate matches returns shipping rates.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:12:2:1:1\"}}","rspec.Spree::Stock::Estimator at ./spec/models/spree/stock/estimator_spec.rb.#shipping rates general shipping methods selects the most affordable shipping rate and doesn't raise exception over nil cost.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:9:2\"}}","rspec.Spree::Stock::Estimator at ./spec/models/spree/stock/estimator_spec.rb.#shipping rates general shipping methods selects the most affordable shipping rate.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:9:1\"}}","rspec.Spree::Stock::Estimator at ./spec/models/spree/stock/estimator_spec.rb.#shipping rates if the currency is different than the order's currency behaves like shipping rate doesn't match does not return shipping rates.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7:1:1\"}}","rspec.Spree::Stock::Estimator at ./spec/models/spree/stock/estimator_spec.rb.#shipping rates includes tax adjustments if applicable links the shipping rate and the tax rate.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:11:1\"}}","rspec.Spree::Stock::Estimator at ./spec/models/spree/stock/estimator_spec.rb.#shipping rates involves backend only shipping methods does not return backend rates at all.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:10:1\"}}","rspec.Spree::Stock::Estimator at ./spec/models/spree/stock/estimator_spec.rb.#shipping rates involves backend only shipping methods doesn't select backend rates even if they're more affordable.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:10:2\"}}","rspec.Spree::Stock::Estimator at ./spec/models/spree/stock/estimator_spec.rb.#shipping rates sorts shipping rates by cost.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8\"}}","rspec.Spree::Stock::Estimator at ./spec/models/spree/stock/estimator_spec.rb.#shipping rates when the calculator is not available for that order behaves like shipping rate doesn't match does not return shipping rates.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1:1\"}}","rspec.Spree::Stock::Estimator at ./spec/models/spree/stock/estimator_spec.rb.#shipping rates when the currency is an empty string behaves like shipping rate matches returns shipping rates.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5:1:1\"}}","rspec.Spree::Stock::Estimator at ./spec/models/spree/stock/estimator_spec.rb.#shipping rates when the currency is nil behaves like shipping rate matches returns shipping rates.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1:1\"}}","rspec.Spree::Stock::Estimator at ./spec/models/spree/stock/estimator_spec.rb.#shipping rates when the current matches the order's currency behaves like shipping rate matches returns shipping rates.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6:1:1\"}}","rspec.Spree::Stock::Estimator at ./spec/models/spree/stock/estimator_spec.rb.#shipping rates when the order's ship address is in a different zone behaves like shipping rate doesn't match does not return shipping rates.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1:1\"}}","rspec.Spree::Stock::Estimator at ./spec/models/spree/stock/estimator_spec.rb.#shipping rates when the order's ship address is in the same zone behaves like shipping rate matches returns shipping rates.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","rspec.Spree::Stock::InventoryUnitBuilder at ./spec/models/spree/stock/inventory_unit_builder_spec.rb.#units builds the inventory units as pending.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","rspec.Spree::Stock::InventoryUnitBuilder at ./spec/models/spree/stock/inventory_unit_builder_spec.rb.#units returns an inventory unit for each quantity for the order's line items.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::Stock::InventoryUnitBuilder at ./spec/models/spree/stock/inventory_unit_builder_spec.rb.#units sets the order_id on inventory units.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","rspec.Spree::Stock::Package at ./spec/models/spree/stock/package_spec.rb.#add_multiple adds multiple inventory units.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1\"}}","rspec.Spree::Stock::Package at ./spec/models/spree/stock/package_spec.rb.#add_multiple allows adding with a state.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:2\"}}","rspec.Spree::Stock::Package at ./spec/models/spree/stock/package_spec.rb.#add_multiple defaults to adding with the on hand state.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:3\"}}","rspec.Spree::Stock::Package at ./spec/models/spree/stock/package_spec.rb.#dimension calculates the sum of the dimension of all the items.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:1\"}}","rspec.Spree::Stock::Package at ./spec/models/spree/stock/package_spec.rb.#order there is an inventory unit returns an order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:1:1\"}}","rspec.Spree::Stock::Package at ./spec/models/spree/stock/package_spec.rb.#order there is no inventory unit returns nil.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:2:1\"}}","rspec.Spree::Stock::Package at ./spec/models/spree/stock/package_spec.rb.#remove there is a content item for the inventory unit removes that content item.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1:1\"}}","rspec.Spree::Stock::Package at ./spec/models/spree/stock/package_spec.rb.#remove there is no content item for the inventory unit doesn't change the set of content items.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2:1\"}}","rspec.Spree::Stock::Package at ./spec/models/spree/stock/package_spec.rb.#volume calculates the sum of the volume of all the items.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:1\"}}","rspec.Spree::Stock::Package at ./spec/models/spree/stock/package_spec.rb.builds a list of shipping methods common to all categories.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7\"}}","rspec.Spree::Stock::Package at ./spec/models/spree/stock/package_spec.rb.calculates the quantity by state.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4\"}}","rspec.Spree::Stock::Package at ./spec/models/spree/stock/package_spec.rb.calculates the weight of all the contents.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","rspec.Spree::Stock::Package at ./spec/models/spree/stock/package_spec.rb.can convert to a shipment.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9\"}}","rspec.Spree::Stock::Package at ./spec/models/spree/stock/package_spec.rb.currency returns the currency based on the currency from the order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.Spree::Stock::Package at ./spec/models/spree/stock/package_spec.rb.filters by on_hand and backordered.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3\"}}","rspec.Spree::Stock::Package at ./spec/models/spree/stock/package_spec.rb.finds content item for an inventory unit.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6\"}}","rspec.Spree::Stock::Package at ./spec/models/spree/stock/package_spec.rb.returns nil for content item not found.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5\"}}","rspec.Spree::Stock::Package at ./spec/models/spree/stock/package_spec.rb.when no categories builds an empty list of shipping methods.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1\"}}","rspec.Spree::Stock::Packer at ./spec/models/spree/stock/packer_spec.rb.default_package contains all the items.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.Spree::Stock::Packer at ./spec/models/spree/stock/packer_spec.rb.default_package doesn't track inventory levels doesn't bother stock items status in stock location.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:4:1\"}}","rspec.Spree::Stock::Packer at ./spec/models/spree/stock/packer_spec.rb.default_package doesn't track inventory levels still creates package with proper quantity.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:4:2\"}}","rspec.Spree::Stock::Packer at ./spec/models/spree/stock/packer_spec.rb.default_package location doesn't have order items in stock builds an empty package.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:1\"}}","rspec.Spree::Stock::Packer at ./spec/models/spree/stock/packer_spec.rb.default_package variants are added as backordered without enough on_hand.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","rspec.Spree::Stock::Packer at ./spec/models/spree/stock/packer_spec.rb.packages allows users to set splitters to an empty array.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","rspec.Spree::Stock::Packer at ./spec/models/spree/stock/packer_spec.rb.packages builds an array of packages.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::Stock::Prioritizer at ./spec/models/spree/stock/prioritizer_spec.rb.1st has backorder, 2nd has all.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6\"}}","rspec.Spree::Stock::Prioritizer at ./spec/models/spree/stock/prioritizer_spec.rb.1st has backorder, 2nd has some.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5\"}}","rspec.Spree::Stock::Prioritizer at ./spec/models/spree/stock/prioritizer_spec.rb.1st has some, 2nd has remaining.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4\"}}","rspec.Spree::Stock::Prioritizer at ./spec/models/spree/stock/prioritizer_spec.rb.keeps a single package.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","rspec.Spree::Stock::Prioritizer at ./spec/models/spree/stock/prioritizer_spec.rb.removes duplicate packages.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2\"}}","rspec.Spree::Stock::Prioritizer at ./spec/models/spree/stock/prioritizer_spec.rb.split over 2 packages.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3\"}}","rspec.Spree::Stock::Quantifier at ./spec/models/spree/stock/quantifier_spec.rb.example at ./spec/models/spree/stock/quantifier_spec.rb:21.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","rspec.Spree::Stock::Quantifier at ./spec/models/spree/stock/quantifier_spec.rb.example at ./spec/models/spree/stock/quantifier_spec.rb:22.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2\"}}","rspec.Spree::Stock::Quantifier at ./spec/models/spree/stock/quantifier_spec.rb.with a single stock location/item total_on_hand should match stock_item.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","rspec.Spree::Stock::Quantifier at ./spec/models/spree/stock/quantifier_spec.rb.with a single stock location/item when variant is available when stock item allows backordering behaves like unlimited supply can_supply? any amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:3:2:1\"}}","rspec.Spree::Stock::Quantifier at ./spec/models/spree/stock/quantifier_spec.rb.with a single stock location/item when variant is available when stock item allows backordering example at ./spec/models/spree/stock/quantifier_spec.rb:51.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:3:1\"}}","rspec.Spree::Stock::Quantifier at ./spec/models/spree/stock/quantifier_spec.rb.with a single stock location/item when variant is available when stock item prevents backordering can_supply? only upto total_on_hand.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:4:2\"}}","rspec.Spree::Stock::Quantifier at ./spec/models/spree/stock/quantifier_spec.rb.with a single stock location/item when variant is available when stock item prevents backordering example at ./spec/models/spree/stock/quantifier_spec.rb:59.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:4:1\"}}","rspec.Spree::Stock::Quantifier at ./spec/models/spree/stock/quantifier_spec.rb.with a single stock location/item when variant is available when track_inventory_levels is false behaves like unlimited supply can_supply? any amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1:2:1\"}}","rspec.Spree::Stock::Quantifier at ./spec/models/spree/stock/quantifier_spec.rb.with a single stock location/item when variant is available when track_inventory_levels is false example at ./spec/models/spree/stock/quantifier_spec.rb:37.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1:1\"}}","rspec.Spree::Stock::Quantifier at ./spec/models/spree/stock/quantifier_spec.rb.with a single stock location/item when variant is available when variant inventory tracking is off behaves like unlimited supply can_supply? any amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:2:2:1\"}}","rspec.Spree::Stock::Quantifier at ./spec/models/spree/stock/quantifier_spec.rb.with a single stock location/item when variant is available when variant inventory tracking is off example at ./spec/models/spree/stock/quantifier_spec.rb:45.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:2:1\"}}","rspec.Spree::Stock::Quantifier at ./spec/models/spree/stock/quantifier_spec.rb.with a single stock location/item when variant is not available example at ./spec/models/spree/stock/quantifier_spec.rb:74.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3:1\"}}","rspec.Spree::Stock::Quantifier at ./spec/models/spree/stock/quantifier_spec.rb.with multiple stock locations/items total_on_hand should total all active stock_items.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","rspec.Spree::Stock::Quantifier at ./spec/models/spree/stock/quantifier_spec.rb.with multiple stock locations/items when variant is available when all stock items prevent backordering can_supply? upto total_on_hand.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:2:2\"}}","rspec.Spree::Stock::Quantifier at ./spec/models/spree/stock/quantifier_spec.rb.with multiple stock locations/items when variant is available when all stock items prevent backordering example at ./spec/models/spree/stock/quantifier_spec.rb:106.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:2:1\"}}","rspec.Spree::Stock::Quantifier at ./spec/models/spree/stock/quantifier_spec.rb.with multiple stock locations/items when variant is available when any stock item allows backordering behaves like unlimited supply can_supply? any amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1:2:1\"}}","rspec.Spree::Stock::Quantifier at ./spec/models/spree/stock/quantifier_spec.rb.with multiple stock locations/items when variant is available when any stock item allows backordering example at ./spec/models/spree/stock/quantifier_spec.rb:98.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1:1\"}}","rspec.Spree::Stock::Quantifier at ./spec/models/spree/stock/quantifier_spec.rb.with multiple stock locations/items when variant is not available example at ./spec/models/spree/stock/quantifier_spec.rb:121.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3:1\"}}","rspec.Spree::Stock::Splitter::Backordered at ./spec/models/spree/stock/splitter/backordered_spec.rb.splits packages by status.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","rspec.Spree::Stock::Splitter::Base at ./spec/models/spree/stock/splitter/base_spec.rb.continues to splitter chain example at ./spec/models/spree/stock/splitter/base_spec.rb:17.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::Stock::Splitter::Digital at ./spec/models/spree/stock/splitter/digital_spec.rb.splits each package by product digital status.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","rspec.Spree::Stock::Splitter::ShippingCategory at ./spec/models/spree/stock/splitter/shipping_category_spec.rb.splits each package by shipping category.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","rspec.Spree::Stock::Splitter::Weight at ./spec/models/spree/stock/splitter/weight_spec.rb.with multiple packages splits and keeps splitting until all packages are underweight.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","rspec.Spree::Stock::Splitter::Weight at ./spec/models/spree/stock/splitter/weight_spec.rb.with packages that can be reduced splits and keeps splitting until all packages are underweight.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::Stock::Splitter::Weight at ./spec/models/spree/stock/splitter/weight_spec.rb.with packages that can not be reduced handles packages that can not be reduced.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.Spree::StockItem at ./spec/models/spree/stock_item_spec.rb.#after_save binary_inventory_cache is set to false (default) in_stock? changes touches its variant.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1:1:1\"}}","rspec.Spree::StockItem at ./spec/models/spree/stock_item_spec.rb.#after_save binary_inventory_cache is set to false (default) in_stock? does not change touches its variant.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1:2:1\"}}","rspec.Spree::StockItem at ./spec/models/spree/stock_item_spec.rb.#after_save binary_inventory_cache is set to true in_stock? changes touches its variant.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2:1:1\"}}","rspec.Spree::StockItem at ./spec/models/spree/stock_item_spec.rb.#after_save binary_inventory_cache is set to true in_stock? does not change does not touch its variant.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2:2:1\"}}","rspec.Spree::StockItem at ./spec/models/spree/stock_item_spec.rb.#after_save binary_inventory_cache is set to true when a new stock location is added touches its variant.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2:3:1\"}}","rspec.Spree::StockItem at ./spec/models/spree/stock_item_spec.rb.#after_touch touches its variant.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:1\"}}","rspec.Spree::StockItem at ./spec/models/spree/stock_item_spec.rb.adjust count_on_hand is updated pessimistically.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","rspec.Spree::StockItem at ./spec/models/spree/stock_item_spec.rb.adjust count_on_hand item out of stock (by five items) when stock received is insufficient to fulfill backorders splits inventory to fulfill partial backorder.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2:1:1\"}}","rspec.Spree::StockItem at ./spec/models/spree/stock_item_spec.rb.adjust count_on_hand item out of stock (by two items) adds new items fills existing backorders.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:3:3:1\"}}","rspec.Spree::StockItem at ./spec/models/spree/stock_item_spec.rb.adjust count_on_hand item out of stock (by two items) does not process backorders when stock is adjusted negatively.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:3:2\"}}","rspec.Spree::StockItem at ./spec/models/spree/stock_item_spec.rb.adjust count_on_hand item out of stock (by two items) processes existing backorders, even with negative stock.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:3:1\"}}","rspec.Spree::StockItem at ./spec/models/spree/stock_item_spec.rb.available to be included in shipment backorderable example at ./spec/models/spree/stock_item_spec.rb:27.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1\"}}","rspec.Spree::StockItem at ./spec/models/spree/stock_item_spec.rb.available to be included in shipment has stock example at ./spec/models/spree/stock_item_spec.rb:21.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:1\"}}","rspec.Spree::StockItem at ./spec/models/spree/stock_item_spec.rb.available to be included in shipment no stock and not backorderable example at ./spec/models/spree/stock_item_spec.rb:36.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3:1\"}}","rspec.Spree::StockItem at ./spec/models/spree/stock_item_spec.rb.behaves like lifecycle events lifecycle events stock_item.created publishes created event when record is created.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1:1\"}}","rspec.Spree::StockItem at ./spec/models/spree/stock_item_spec.rb.behaves like lifecycle events lifecycle events stock_item.deleted publishes deleted event when record is deleted.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:3:1\"}}","rspec.Spree::StockItem at ./spec/models/spree/stock_item_spec.rb.behaves like lifecycle events lifecycle events stock_item.updated publishes updated event when record is updated.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:2:1\"}}","rspec.Spree::StockItem at ./spec/models/spree/stock_item_spec.rb.behaves like metadata can query records by metadata properties.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:10\"}}","rspec.Spree::StockItem at ./spec/models/spree/stock_item_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:10.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","rspec.Spree::StockItem at ./spec/models/spree/stock_item_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:11.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","rspec.Spree::StockItem at ./spec/models/spree/stock_item_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:4.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::StockItem at ./spec/models/spree/stock_item_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:5.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","rspec.Spree::StockItem at ./spec/models/spree/stock_item_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:7.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","rspec.Spree::StockItem at ./spec/models/spree/stock_item_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:8.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","rspec.Spree::StockItem at ./spec/models/spree/stock_item_spec.rb.behaves like metadata reads data as not symbolized keys.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8\"}}","rspec.Spree::StockItem at ./spec/models/spree/stock_item_spec.rb.behaves like metadata reads data as symbolized keys.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7\"}}","rspec.Spree::StockItem at ./spec/models/spree/stock_item_spec.rb.can return the stock item's variant's name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4\"}}","rspec.Spree::StockItem at ./spec/models/spree/stock_item_spec.rb.destroyed doesnt allow recreating more than one stock item at once.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:2\"}}","rspec.Spree::StockItem at ./spec/models/spree/stock_item_spec.rb.destroyed recreates stock item just fine.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1\"}}","rspec.Spree::StockItem at ./spec/models/spree/stock_item_spec.rb.maintains the count on hand for a variant.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3\"}}","rspec.Spree::StockItem at ./spec/models/spree/stock_item_spec.rb.reduce_count_on_hand_to_zero when count_on_hand > 0 example at ./spec/models/spree/stock_item_spec.rb:47.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1:1\"}}","rspec.Spree::StockItem at ./spec/models/spree/stock_item_spec.rb.reduce_count_on_hand_to_zero when count_on_hand > 0 example at ./spec/models/spree/stock_item_spec.rb:57.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2:1\"}}","rspec.Spree::StockItem at ./spec/models/spree/stock_item_spec.rb.scopes .with_active_stock_location when stock location is active example at ./spec/models/spree/stock_item_spec.rb:470.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:1:1:1\"}}","rspec.Spree::StockItem at ./spec/models/spree/stock_item_spec.rb.scopes .with_active_stock_location when stock location is inactive example at ./spec/models/spree/stock_item_spec.rb:476.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:1:2:1\"}}","rspec.Spree::StockItem at ./spec/models/spree/stock_item_spec.rb.set count_on_hand is updated pessimistically.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1\"}}","rspec.Spree::StockItem at ./spec/models/spree/stock_item_spec.rb.set count_on_hand item out of stock (by two items) adds new items fills existing backorders.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2:2:1\"}}","rspec.Spree::StockItem at ./spec/models/spree/stock_item_spec.rb.set count_on_hand item out of stock (by two items) doesn't process backorders.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2:1\"}}","rspec.Spree::StockItem at ./spec/models/spree/stock_item_spec.rb.validations count_on_hand when count_on_hand changed when backorderable when both count_on_hand and count_on_hand_was are negative when count_on_hand is greater than count_on_hand_was behaves like valid count_on_hand has :no errors_on.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:1:2:1:2:1:1:1\"}}","rspec.Spree::StockItem at ./spec/models/spree/stock_item_spec.rb.validations count_on_hand when count_on_hand changed when backorderable when both count_on_hand and count_on_hand_was are negative when count_on_hand is smaller than count_on_hand_was behaves like valid count_on_hand has :no errors_on.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:1:2:1:2:2:1:1\"}}","rspec.Spree::StockItem at ./spec/models/spree/stock_item_spec.rb.validations count_on_hand when count_on_hand changed when backorderable when both count_on_hand and count_on_hand_was are positive when count_on_hand is greater than count_on_hand_was behaves like valid count_on_hand has :no errors_on.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:1:2:1:1:1:1:1\"}}","rspec.Spree::StockItem at ./spec/models/spree/stock_item_spec.rb.validations count_on_hand when count_on_hand changed when backorderable when both count_on_hand and count_on_hand_was are positive when count_on_hand is smaller than count_on_hand_was behaves like valid count_on_hand has :no errors_on.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:1:2:1:1:2:1:1\"}}","rspec.Spree::StockItem at ./spec/models/spree/stock_item_spec.rb.validations count_on_hand when count_on_hand changed when backorderable when both count_on_hand is negative and count_on_hand_was is positive when count_on_hand is greater than count_on_hand_was behaves like valid count_on_hand has :no errors_on.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:1:2:1:4:1:1:1\"}}","rspec.Spree::StockItem at ./spec/models/spree/stock_item_spec.rb.validations count_on_hand when count_on_hand changed when backorderable when both count_on_hand is positive and count_on_hand_was is negative when count_on_hand is greater than count_on_hand_was behaves like valid count_on_hand has :no errors_on.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:1:2:1:3:1:1:1\"}}","rspec.Spree::StockItem at ./spec/models/spree/stock_item_spec.rb.validations count_on_hand when count_on_hand changed when not backorderable when both count_on_hand and count_on_hand_was are negative when count_on_hand is greater than count_on_hand_was behaves like valid count_on_hand has :no errors_on.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:1:2:2:2:1:1:1\"}}","rspec.Spree::StockItem at ./spec/models/spree/stock_item_spec.rb.validations count_on_hand when count_on_hand changed when not backorderable when both count_on_hand and count_on_hand_was are negative when count_on_hand is smaller than count_on_hand_was behaves like not valid count_on_hand example at ./spec/models/spree/stock_item_spec.rb:302.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:1:2:2:2:2:1:2\"}}","rspec.Spree::StockItem at ./spec/models/spree/stock_item_spec.rb.validations count_on_hand when count_on_hand changed when not backorderable when both count_on_hand and count_on_hand_was are negative when count_on_hand is smaller than count_on_hand_was behaves like not valid count_on_hand has 1 error on count_on_hand.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:1:2:2:2:2:1:1\"}}","rspec.Spree::StockItem at ./spec/models/spree/stock_item_spec.rb.validations count_on_hand when count_on_hand changed when not backorderable when both count_on_hand and count_on_hand_was are positive when count_on_hand is greater than count_on_hand_was behaves like valid count_on_hand has :no errors_on.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:1:2:2:1:1:1:1\"}}","rspec.Spree::StockItem at ./spec/models/spree/stock_item_spec.rb.validations count_on_hand when count_on_hand changed when not backorderable when both count_on_hand and count_on_hand_was are positive when count_on_hand is smaller than count_on_hand_was behaves like valid count_on_hand has :no errors_on.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:1:2:2:1:2:1:1\"}}","rspec.Spree::StockItem at ./spec/models/spree/stock_item_spec.rb.validations count_on_hand when count_on_hand changed when not backorderable when both count_on_hand is negative and count_on_hand_was is positive when count_on_hand is greater than count_on_hand_was behaves like not valid count_on_hand example at ./spec/models/spree/stock_item_spec.rb:302.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:1:2:2:4:1:1:2\"}}","rspec.Spree::StockItem at ./spec/models/spree/stock_item_spec.rb.validations count_on_hand when count_on_hand changed when not backorderable when both count_on_hand is negative and count_on_hand_was is positive when count_on_hand is greater than count_on_hand_was behaves like not valid count_on_hand has 1 error on count_on_hand.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:1:2:2:4:1:1:1\"}}","rspec.Spree::StockItem at ./spec/models/spree/stock_item_spec.rb.validations count_on_hand when count_on_hand changed when not backorderable when both count_on_hand is positive and count_on_hand_was is negative when count_on_hand is greater than count_on_hand_was behaves like valid count_on_hand has :no errors_on.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:1:2:2:3:1:1:1\"}}","rspec.Spree::StockItem at ./spec/models/spree/stock_item_spec.rb.validations count_on_hand when count_on_hand not changed when backorderable behaves like valid count_on_hand has :no errors_on.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:1:1:2:1:1\"}}","rspec.Spree::StockItem at ./spec/models/spree/stock_item_spec.rb.validations count_on_hand when count_on_hand not changed when not backorderable behaves like valid count_on_hand has :no errors_on.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:1:1:1:1:1\"}}","rspec.Spree::StockItem at ./spec/models/spree/stock_item_spec.rb.variant can be found even if the variant is deleted.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:1\"}}","rspec.Spree::StockItem at ./spec/models/spree/stock_item_spec.rb.with stock movements doesnt raise ReadOnlyRecord error.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1\"}}","rspec.Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb.#address returns Spree::Address instance.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:1\"}}","rspec.Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb.#conditionally_touch_records active has changed example at ./spec/models/spree/stock_location_spec.rb:311.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:17:1:1\"}}","rspec.Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb.#conditionally_touch_records active has changed example at ./spec/models/spree/stock_location_spec.rb:312.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:17:1:2\"}}","rspec.Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb.#conditionally_touch_records active has not changed example at ./spec/models/spree/stock_location_spec.rb:316.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:17:2:1\"}}","rspec.Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb.#country_name returns the country name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:20:1\"}}","rspec.Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb.#display_name returns the name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:1\"}}","rspec.Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb.#display_name with admin name set returns the admin name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:2:1\"}}","rspec.Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb.#state_text both name and abbr is present example at ./spec/models/spree/stock_location_spec.rb:294.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:2:1\"}}","rspec.Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb.#state_text only name is present example at ./spec/models/spree/stock_location_spec.rb:302.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:3:1\"}}","rspec.Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb.#state_text state is blank example at ./spec/models/spree/stock_location_spec.rb:286.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:1:1\"}}","rspec.Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb.#stock_item_or_create with stock item variant ID passed example at ./spec/models/spree/stock_location_spec.rb:159.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2:2:1\"}}","rspec.Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb.#stock_item_or_create with stock item variant ID passed example at ./spec/models/spree/stock_location_spec.rb:160.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2:2:2\"}}","rspec.Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb.#stock_item_or_create with stock item variant instance passed example at ./spec/models/spree/stock_location_spec.rb:154.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2:1:1\"}}","rspec.Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb.#stock_item_or_create with stock item variant instance passed example at ./spec/models/spree/stock_location_spec.rb:155.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2:1:2\"}}","rspec.Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb.#stock_item_or_create without stock item variant ID passed creates a stock_item if not found for a variant.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1:2:1\"}}","rspec.Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb.#stock_item_or_create without stock item variant ID passed example at ./spec/models/spree/stock_location_spec.rb:145.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1:2:2\"}}","rspec.Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb.#stock_item_or_create without stock item variant instance passed creates a stock_item if not found for a variant.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1:1:1\"}}","rspec.Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb.#stock_item_or_create without stock item variant instance passed example at ./spec/models/spree/stock_location_spec.rb:136.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1:1:2\"}}","rspec.Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb.can be deactivated.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13\"}}","rspec.Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb.creates a stock_movement.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12\"}}","rspec.Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb.ensures only one stock location is default at a time.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14\"}}","rspec.Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb.fill_status all on_hand with no backordered.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:1\"}}","rspec.Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb.fill_status some on_hand with some backordered.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:2\"}}","rspec.Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb.fill_status when backordering is not allowed all on_hand.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:4:1\"}}","rspec.Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb.fill_status when backordering is not allowed some on_hand.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:4:2\"}}","rspec.Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb.fill_status when backordering is not allowed zero on_hand.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:4:3\"}}","rspec.Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb.fill_status without stock_items zero on_hand and one backordered.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:5:1\"}}","rspec.Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb.fill_status zero on_hand with all backordered.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:3\"}}","rspec.Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb.finds a count_on_hand for a variant.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8\"}}","rspec.Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb.finds a stock_item for a variant by id.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5\"}}","rspec.Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb.finds a stock_item for a variant.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4\"}}","rspec.Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb.finds determines if you a variant is backorderable.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9\"}}","rspec.Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb.handling stock items given a variant propagate all variants false example at ./spec/models/spree/stock_location_spec.rb:99.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:3:2:1\"}}","rspec.Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb.handling stock items given a variant propagate all variants true example at ./spec/models/spree/stock_location_spec.rb:87.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:3:1:1\"}}","rspec.Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb.handling stock items given a variant propagate variants creates a new stock item.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:2:1\"}}","rspec.Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb.handling stock items given a variant propagate variants passes backorderable default config false example at ./spec/models/spree/stock_location_spec.rb:76.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:2:2:2:1\"}}","rspec.Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb.handling stock items given a variant propagate variants passes backorderable default config true example at ./spec/models/spree/stock_location_spec.rb:70.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:2:2:1:1\"}}","rspec.Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb.handling stock items given a variant set up creates stock item.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1:1\"}}","rspec.Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb.handling stock items given a variant set up stock item exists returns existing stock item.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1:2:1\"}}","rspec.Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb.handling the stock items creation after create creates stock_items for all variants.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb.restocks a variant with a positive stock movement.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10\"}}","rspec.Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb.returns nil when stock_item is not found for variant.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6\"}}","rspec.Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb.unstocks a variant with a negative stock movement.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11\"}}","rspec.Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb.validates uniqueness.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2\"}}","rspec.Spree::StockLocations::StockItems::Create at ./spec/services/spree/stock_locations/stock_items/create_spec.rb.#call with prepared stock items with stock items in the db inserts stock items without duplicates.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","rspec.Spree::StockLocations::StockItems::Create at ./spec/services/spree/stock_locations/stock_items/create_spec.rb.#call with prepared stock items without stock items in the db inserts the stock location stock items.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","rspec.Spree::StockLocations::StockItems::Create at ./spec/services/spree/stock_locations/stock_items/create_spec.rb.#call with prepared stock items without stock items in the db invalidates the Variant cache.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:3\"}}","rspec.Spree::StockLocations::StockItems::Create at ./spec/services/spree/stock_locations/stock_items/create_spec.rb.#call with prepared stock items without stock items in the db sets the stock location data necessary for the inserted stock items.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:2\"}}","rspec.Spree::StockLocations::StockItems::Create at ./spec/services/spree/stock_locations/stock_items/create_spec.rb.#call without prepared stock items does not insert stock items.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","rspec.Spree::StockLocations::StockItems::Create at ./spec/services/spree/stock_locations/stock_items/create_spec.rb.#call without prepared stock items does not invalidates the Variant cache.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2\"}}","rspec.Spree::StockLocations::StockItems::CreateJob at ./spec/jobs/spree/stock_locations/stock_items/create_job_spec.rb.enqueues the creation of the stock location stock items.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","rspec.Spree::StockMovement at ./spec/models/spree/stock_movement_spec.rb.Constants QUANTITY_LIMITS[:max] return 2**31 - 1.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","rspec.Spree::StockMovement at ./spec/models/spree/stock_movement_spec.rb.Constants QUANTITY_LIMITS[:min] return -2**31.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","rspec.Spree::StockMovement at ./spec/models/spree/stock_movement_spec.rb.Instance Methods #readonly? does not update a persisted record.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:3:1\"}}","rspec.Spree::StockMovement at ./spec/models/spree/stock_movement_spec.rb.Instance Methods #update_stock_item_quantity when quantity is negative decrements the stock item count on hand.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:4:3:1\"}}","rspec.Spree::StockMovement at ./spec/models/spree/stock_movement_spec.rb.Instance Methods #update_stock_item_quantity when quantity is positive increments the stock item count on hand.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:4:4:1\"}}","rspec.Spree::StockMovement at ./spec/models/spree/stock_movement_spec.rb.Instance Methods #update_stock_item_quantity when track inventory levels is false does not update count on hand.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:4:1:1\"}}","rspec.Spree::StockMovement at ./spec/models/spree/stock_movement_spec.rb.Instance Methods #update_stock_item_quantity when track inventory tracking is off does not update count on hand.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:4:2:1\"}}","rspec.Spree::StockMovement at ./spec/models/spree/stock_movement_spec.rb.Instance Methods .product example at ./spec/models/spree/stock_movement_spec.rb:69.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1:1\"}}","rspec.Spree::StockMovement at ./spec/models/spree/stock_movement_spec.rb.Instance Methods .variant example at ./spec/models/spree/stock_movement_spec.rb:73.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2:1\"}}","rspec.Spree::StockMovement at ./spec/models/spree/stock_movement_spec.rb.Scope .recent orders chronologically by created at.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1\"}}","rspec.Spree::StockMovement at ./spec/models/spree/stock_movement_spec.rb.lifecycle events stock_movement.created publishes created event when record is created.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","rspec.Spree::StockMovement at ./spec/models/spree/stock_movement_spec.rb.validations allows the negative quantity for a backorderable stock item.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","rspec.Spree::StockMovement at ./spec/models/spree/stock_movement_spec.rb.validations does not allow quantity that is less than the stock item's count on hand.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","rspec.Spree::StockMovement at ./spec/models/spree/stock_movement_spec.rb.whitelisted ransackable attributes returns amount attribute.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","rspec.Spree::StockMovement::CustomEvents at ./spec/models/spree/stock_movement/custom_events_spec.rb.product.back_in_stock event does not publish when product was already in stock.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","rspec.Spree::StockMovement::CustomEvents at ./spec/models/spree/stock_movement/custom_events_spec.rb.product.back_in_stock event publishes product.back_in_stock when product comes back in stock.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.Spree::StockMovement::CustomEvents at ./spec/models/spree/stock_movement/custom_events_spec.rb.product.out_of_stock event does not publish when product still has stock.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","rspec.Spree::StockMovement::CustomEvents at ./spec/models/spree/stock_movement/custom_events_spec.rb.product.out_of_stock event does not publish when product was already out of stock.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","rspec.Spree::StockMovement::CustomEvents at ./spec/models/spree/stock_movement/custom_events_spec.rb.product.out_of_stock event publishes product.out_of_stock when product goes out of stock.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::StockMovement::CustomEvents at ./spec/models/spree/stock_movement/custom_events_spec.rb.when events are disabled does not publish any events.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","rspec.Spree::StockTransfer at ./spec/models/spree/stock_transfer_spec.rb.#receive receives new inventory (from a vendor).{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","rspec.Spree::StockTransfer at ./spec/models/spree/stock_transfer_spec.rb.#reference example at ./spec/models/spree/stock_transfer_spec.rb:25.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","rspec.Spree::StockTransfer at ./spec/models/spree/stock_transfer_spec.rb.#to_param example at ./spec/models/spree/stock_transfer_spec.rb:31.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","rspec.Spree::StockTransfer at ./spec/models/spree/stock_transfer_spec.rb.#transfer transfers variants between 2 locations.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","rspec.Spree::StockTransfer at ./spec/models/spree/stock_transfer_spec.rb.#transfer when variants are empty does not transfer the variants.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3:1\"}}","rspec.Spree::StockTransfer at ./spec/models/spree/stock_transfer_spec.rb.#transfer when variants are nil does not transfer the variants.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:4:1\"}}","rspec.Spree::StockTransfer at ./spec/models/spree/stock_transfer_spec.rb.#transfer when variants are not available in the source location does not transfer the variants.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1\"}}","rspec.Spree::StockTransfer at ./spec/models/spree/stock_transfer_spec.rb.#validations checks if source location and destination location are the same.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","rspec.Spree::StockTransfer at ./spec/models/spree/stock_transfer_spec.rb.behaves like lifecycle events lifecycle events stock_transfer.created publishes created event when record is created.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1:1\"}}","rspec.Spree::StockTransfer at ./spec/models/spree/stock_transfer_spec.rb.behaves like lifecycle events lifecycle events stock_transfer.deleted publishes deleted event when record is deleted.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:3:1\"}}","rspec.Spree::StockTransfer at ./spec/models/spree/stock_transfer_spec.rb.behaves like lifecycle events lifecycle events stock_transfer.updated publishes updated event when record is updated.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:2:1\"}}","rspec.Spree::StockTransfer at ./spec/models/spree/stock_transfer_spec.rb.behaves like metadata can query records by metadata properties.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:10\"}}","rspec.Spree::StockTransfer at ./spec/models/spree/stock_transfer_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:10.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","rspec.Spree::StockTransfer at ./spec/models/spree/stock_transfer_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:11.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","rspec.Spree::StockTransfer at ./spec/models/spree/stock_transfer_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:4.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::StockTransfer at ./spec/models/spree/stock_transfer_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:5.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","rspec.Spree::StockTransfer at ./spec/models/spree/stock_transfer_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:7.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","rspec.Spree::StockTransfer at ./spec/models/spree/stock_transfer_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:8.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","rspec.Spree::StockTransfer at ./spec/models/spree/stock_transfer_spec.rb.behaves like metadata reads data as not symbolized keys.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8\"}}","rspec.Spree::StockTransfer at ./spec/models/spree/stock_transfer_spec.rb.behaves like metadata reads data as symbolized keys.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7\"}}","rspec.Spree::Store at ./spec/models/spree/store_spec.rb.#can_be_deleted? can delete when there are more than 1 stores.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:2\"}}","rspec.Spree::Store at ./spec/models/spree/store_spec.rb.#can_be_deleted? cannot delete the only store.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:1\"}}","rspec.Spree::Store at ./spec/models/spree/store_spec.rb.#countries_available_for_checkout returns country list for checkout zone.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1:1\"}}","rspec.Spree::Store at ./spec/models/spree/store_spec.rb.#countries_available_for_checkout returns list of all countries.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:2:1\"}}","rspec.Spree::Store at ./spec/models/spree/store_spec.rb.#default_country_iso= when country is found sets the default country.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:2:1\"}}","rspec.Spree::Store at ./spec/models/spree/store_spec.rb.#default_country_iso= when country is not found sets the default country.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:1:1\"}}","rspec.Spree::Store at ./spec/models/spree/store_spec.rb.#default_stock_location with default stock location returns the default stock location.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:21:1:1\"}}","rspec.Spree::Store at ./spec/models/spree/store_spec.rb.#default_stock_location without default stock location creates a new default stock location.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:21:2:1\"}}","rspec.Spree::Store at ./spec/models/spree/store_spec.rb.#ensure_default_country checkout zone not set example at ./spec/models/spree/store_spec.rb:572.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1:2\"}}","rspec.Spree::Store at ./spec/models/spree/store_spec.rb.#ensure_default_country checkout zone not set with default country example at ./spec/models/spree/store_spec.rb:569.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1:1:1\"}}","rspec.Spree::Store at ./spec/models/spree/store_spec.rb.#ensure_default_country checkout zone set with default country set default country is a zone member example at ./spec/models/spree/store_spec.rb:601.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2:1:2:1\"}}","rspec.Spree::Store at ./spec/models/spree/store_spec.rb.#ensure_default_country checkout zone set with default country set default country is not a zone member example at ./spec/models/spree/store_spec.rb:607.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2:1:3:1\"}}","rspec.Spree::Store at ./spec/models/spree/store_spec.rb.#ensure_default_country checkout zone set with default country set no zone members example at ./spec/models/spree/store_spec.rb:592.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2:1:1:1\"}}","rspec.Spree::Store at ./spec/models/spree/store_spec.rb.#ensure_default_country checkout zone set without default country set no zone members example at ./spec/models/spree/store_spec.rb:618.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2:2:1:1\"}}","rspec.Spree::Store at ./spec/models/spree/store_spec.rb.#ensure_default_country checkout zone set without default country set with zone members example at ./spec/models/spree/store_spec.rb:624.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2:2:2:1\"}}","rspec.Spree::Store at ./spec/models/spree/store_spec.rb.#ensure_supported_currencies store with default_currency example at ./spec/models/spree/store_spec.rb:729.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:17:1:1\"}}","rspec.Spree::Store at ./spec/models/spree/store_spec.rb.#ensure_supported_currencies store with supported currencies example at ./spec/models/spree/store_spec.rb:735.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:17:2:1\"}}","rspec.Spree::Store at ./spec/models/spree/store_spec.rb.#ensure_supported_locales store with default_locale example at ./spec/models/spree/store_spec.rb:709.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:1:1\"}}","rspec.Spree::Store at ./spec/models/spree/store_spec.rb.#ensure_supported_locales store with supported locales example at ./spec/models/spree/store_spec.rb:721.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:3:1\"}}","rspec.Spree::Store at ./spec/models/spree/store_spec.rb.#ensure_supported_locales store without default locale example at ./spec/models/spree/store_spec.rb:715.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:2:1\"}}","rspec.Spree::Store at ./spec/models/spree/store_spec.rb.#favicon with an attached favicon image returns a resized favicon.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:1:1\"}}","rspec.Spree::Store at ./spec/models/spree/store_spec.rb.#favicon without an attached favicon image returns a blank favicon.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:2:1\"}}","rspec.Spree::Store at ./spec/models/spree/store_spec.rb.#formatted_url example at ./spec/models/spree/store_spec.rb:853.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:23:1\"}}","rspec.Spree::Store at ./spec/models/spree/store_spec.rb.#formatted_url on production example at ./spec/models/spree/store_spec.rb:864.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:23:3:1\"}}","rspec.Spree::Store at ./spec/models/spree/store_spec.rb.#formatted_url url with port example at ./spec/models/spree/store_spec.rb:858.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:23:2:1\"}}","rspec.Spree::Store at ./spec/models/spree/store_spec.rb.#formatted_url_or_custom_domain with custom domain example at ./spec/models/spree/store_spec.rb:878.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:24:2:1\"}}","rspec.Spree::Store at ./spec/models/spree/store_spec.rb.#formatted_url_or_custom_domain without custom domain example at ./spec/models/spree/store_spec.rb:872.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:24:1:1\"}}","rspec.Spree::Store at ./spec/models/spree/store_spec.rb.#states_available_for_checkout returns list of states associated to country.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:2:1:1\"}}","rspec.Spree::Store at ./spec/models/spree/store_spec.rb.#states_available_for_checkout returns states list for checkout zone.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1:1\"}}","rspec.Spree::Store at ./spec/models/spree/store_spec.rb.#supported_currencies_list with supported currencies set returns supported currencies list.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:1:1\"}}","rspec.Spree::Store at ./spec/models/spree/store_spec.rb.#supported_currencies_list without supported currencies set returns supported currencies list.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:2:1\"}}","rspec.Spree::Store at ./spec/models/spree/store_spec.rb.#supported_locales_list with supported locale set returns supported currencies list.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:1:1\"}}","rspec.Spree::Store at ./spec/models/spree/store_spec.rb.#supported_locales_list without supported currencies set returns supported currencies list.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:2:1\"}}","rspec.Spree::Store at ./spec/models/spree/store_spec.rb.#supported_shipping_zones when checkout zone not set returns all shipping zones.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:22:2:1\"}}","rspec.Spree::Store at ./spec/models/spree/store_spec.rb.#supported_shipping_zones with checkout zone set returns the checkout zone.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:22:1:1\"}}","rspec.Spree::Store at ./spec/models/spree/store_spec.rb.#unique_name returns the Store Name followed by the Store Code in parentheses.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:1\"}}","rspec.Spree::Store at ./spec/models/spree/store_spec.rb..available_locales example at ./spec/models/spree/store_spec.rb:479.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1\"}}","rspec.Spree::Store at ./spec/models/spree/store_spec.rb..by_url finds stores by url.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","rspec.Spree::Store at ./spec/models/spree/store_spec.rb..current returns default when no domain.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","rspec.Spree::Store at ./spec/models/spree/store_spec.rb..current returns store for domain.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2\"}}","rspec.Spree::Store at ./spec/models/spree/store_spec.rb..default when a default store is already present ensures there is a default if one doesn't exist yet.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1:2\"}}","rspec.Spree::Store at ./spec/models/spree/store_spec.rb..default when a default store is already present ensures there is only one default.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1:3\"}}","rspec.Spree::Store at ./spec/models/spree/store_spec.rb..default when a default store is already present returns the already existing default store.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1:1\"}}","rspec.Spree::Store at ./spec/models/spree/store_spec.rb..default when a default store is already present when store is not saved ensure old default location still default.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1:4:1\"}}","rspec.Spree::Store at ./spec/models/spree/store_spec.rb..default when a default store is not present builds a new default store.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2:1\"}}","rspec.Spree::Store at ./spec/models/spree/store_spec.rb..default when a default store is not present does not persist the original default store.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2:2\"}}","rspec.Spree::Store at ./spec/models/spree/store_spec.rb.Associations #orders #inventory_units example at ./spec/models/spree/store_spec.rb:94.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:6:1\"}}","rspec.Spree::Store at ./spec/models/spree/store_spec.rb.Associations #orders #line_items example at ./spec/models/spree/store_spec.rb:62.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:2:1\"}}","rspec.Spree::Store at ./spec/models/spree/store_spec.rb.Associations #orders #payments example at ./spec/models/spree/store_spec.rb:69.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:3:1\"}}","rspec.Spree::Store at ./spec/models/spree/store_spec.rb.Associations #orders #return_authorizations example at ./spec/models/spree/store_spec.rb:85.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:5:1\"}}","rspec.Spree::Store at ./spec/models/spree/store_spec.rb.Associations #orders #shipments example at ./spec/models/spree/store_spec.rb:76.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:4:1\"}}","rspec.Spree::Store at ./spec/models/spree/store_spec.rb.Associations #orders example at ./spec/models/spree/store_spec.rb:56.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","rspec.Spree::Store at ./spec/models/spree/store_spec.rb.Associations #payment_methods example at ./spec/models/spree/store_spec.rb:49.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","rspec.Spree::Store at ./spec/models/spree/store_spec.rb.Associations #products #product_properties example at ./spec/models/spree/store_spec.rb:25.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","rspec.Spree::Store at ./spec/models/spree/store_spec.rb.Associations #products #variants #stock_items example at ./spec/models/spree/store_spec.rb:38.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:2:1\"}}","rspec.Spree::Store at ./spec/models/spree/store_spec.rb.Associations #products #variants #stock_items example at ./spec/models/spree/store_spec.rb:39.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:2:2\"}}","rspec.Spree::Store at ./spec/models/spree/store_spec.rb.Associations #products #variants #stock_items example at ./spec/models/spree/store_spec.rb:40.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:2:3\"}}","rspec.Spree::Store at ./spec/models/spree/store_spec.rb.Associations #products #variants example at ./spec/models/spree/store_spec.rb:32.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:1\"}}","rspec.Spree::Store at ./spec/models/spree/store_spec.rb.Associations #products example at ./spec/models/spree/store_spec.rb:19.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","rspec.Spree::Store at ./spec/models/spree/store_spec.rb.Associations #promotions example at ./spec/models/spree/store_spec.rb:118.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5:1\"}}","rspec.Spree::Store at ./spec/models/spree/store_spec.rb.Associations #store_credits #store_credit_events example at ./spec/models/spree/store_spec.rb:108.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:2:1\"}}","rspec.Spree::Store at ./spec/models/spree/store_spec.rb.Associations #store_credits #store_credit_events example at ./spec/models/spree/store_spec.rb:109.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:2:2\"}}","rspec.Spree::Store at ./spec/models/spree/store_spec.rb.Associations #store_credits #store_credit_events example at ./spec/models/spree/store_spec.rb:110.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:2:3\"}}","rspec.Spree::Store at ./spec/models/spree/store_spec.rb.Associations #store_credits example at ./spec/models/spree/store_spec.rb:102.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1\"}}","rspec.Spree::Store at ./spec/models/spree/store_spec.rb.Callbacks #ensure_default_automatic_taxons creates automatic taxons on the collections taxonomy.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:4:1\"}}","rspec.Spree::Store at ./spec/models/spree/store_spec.rb.Callbacks #ensure_default_automatic_taxons is idempotent - does not create duplicates when called multiple times.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:4:2\"}}","rspec.Spree::Store at ./spec/models/spree/store_spec.rb.Callbacks #ensure_default_post_categories_are_created creates default post categories.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:5:1\"}}","rspec.Spree::Store at ./spec/models/spree/store_spec.rb.Callbacks #ensure_default_post_categories_are_created is idempotent - does not create duplicates when called multiple times.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:5:2\"}}","rspec.Spree::Store at ./spec/models/spree/store_spec.rb.Callbacks #ensure_default_taxonomies_are_created creates default taxonomies.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:1\"}}","rspec.Spree::Store at ./spec/models/spree/store_spec.rb.Callbacks #ensure_default_taxonomies_are_created is idempotent - does not create duplicates when called multiple times.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:2\"}}","rspec.Spree::Store at ./spec/models/spree/store_spec.rb.Callbacks #ensure_default_taxonomies_are_created with non-English store locale creates taxonomies with translated names in store locale.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:3:1\"}}","rspec.Spree::Store at ./spec/models/spree/store_spec.rb.Callbacks #ensure_default_taxonomies_are_created with non-English store locale falls back to English when translation is missing.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:3:2\"}}","rspec.Spree::Store at ./spec/models/spree/store_spec.rb.Callbacks #import_payment_methods_from_store imports payment methods from other store.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:7:1\"}}","rspec.Spree::Store at ./spec/models/spree/store_spec.rb.Callbacks #import_products_from_store imports products from other store.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:6:1\"}}","rspec.Spree::Store at ./spec/models/spree/store_spec.rb.Callbacks #set_code #create_default_policies creates default policies.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:5:1\"}}","rspec.Spree::Store at ./spec/models/spree/store_spec.rb.Callbacks #set_code #create_default_policies is idempotent - does not create duplicates when called multiple times.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:5:2\"}}","rspec.Spree::Store at ./spec/models/spree/store_spec.rb.Callbacks #set_code #create_default_policies with non-English store locale creates policies with translated names in store locale.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:5:3:1\"}}","rspec.Spree::Store at ./spec/models/spree/store_spec.rb.Callbacks #set_code sets the code.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","rspec.Spree::Store at ./spec/models/spree/store_spec.rb.Callbacks #set_code when code is already set does not change the code.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:2:1\"}}","rspec.Spree::Store at ./spec/models/spree/store_spec.rb.Callbacks #set_code when code is already taken generates a new code.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:4:1\"}}","rspec.Spree::Store at ./spec/models/spree/store_spec.rb.Callbacks #set_code when name is not set does not set the code.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:3:1\"}}","rspec.Spree::Store at ./spec/models/spree/store_spec.rb.Callbacks #set_url on create sets url.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1:1\"}}","rspec.Spree::Store at ./spec/models/spree/store_spec.rb.Callbacks #set_url on update code change update url updates url but keep old one.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:2:1\"}}","rspec.Spree::Store at ./spec/models/spree/store_spec.rb.Translations translates store fields.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","rspec.Spree::Store at ./spec/models/spree/store_spec.rb.Validations #code cannot create 2 stores with the same code.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","rspec.Spree::Store at ./spec/models/spree/store_spec.rb.Validations #code cannot create a store with reserved code.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:2\"}}","rspec.Spree::Store at ./spec/models/spree/store_spec.rb.soft deletion another store soft-deletes when destroy is called.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:20:2:1\"}}","rspec.Spree::Store at ./spec/models/spree/store_spec.rb.soft deletion default store single store cannot be deleted.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:20:1:2:1\"}}","rspec.Spree::Store at ./spec/models/spree/store_spec.rb.soft deletion default store with multiple stores can be deleted.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:20:1:1:1\"}}","rspec.Spree::Store at ./spec/models/spree/store_spec.rb.soft deletion default store with multiple stores passes default flag to other store.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:20:1:1:2\"}}","rspec.Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.#amount_authorized amount authorized is defined returns the attribute value.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:2:1\"}}","rspec.Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.#amount_authorized amount authorized is not defined returns zero.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:1:1\"}}","rspec.Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.#amount_remaining the amount_used is defined the authorized amount is defined subtracts the amount used and the authorized amount from the credited amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2:2:1\"}}","rspec.Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.#amount_remaining the amount_used is defined the authorized amount is not defined subtracts the amount used from the credited amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2:1:1\"}}","rspec.Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.#amount_remaining the amount_used is not defined the authorized amount is defined subtracts the authorized amount from the credited amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1:2:1\"}}","rspec.Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.#amount_remaining the amount_used is not defined the authorized amount is not defined returns the credited amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1:1:1\"}}","rspec.Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.#amount_used amount used is defined returns the attribute value.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:2:1\"}}","rspec.Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.#amount_used amount used is not defined returns zero.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:1:1\"}}","rspec.Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.#authorize amount is invalid returns false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2:1\"}}","rspec.Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.#authorize amount is valid amount has not been authorized yet adds the new amount to authorized amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1:1:2\"}}","rspec.Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.#authorize amount is valid amount has not been authorized yet originator is present records the originator.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1:1:3:1\"}}","rspec.Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.#authorize amount is valid amount has not been authorized yet returns true.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1:1:1\"}}","rspec.Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.#authorize amount is valid authorization has already happened returns true.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1:2:1\"}}","rspec.Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.#can_capture? checkout payment returns true.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:2:1\"}}","rspec.Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.#can_capture? complete payment returns false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:5:1\"}}","rspec.Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.#can_capture? invalid payment returns false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:4:1\"}}","rspec.Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.#can_capture? pending payment returns true.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:1:1\"}}","rspec.Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.#can_capture? void payment returns false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:3:1\"}}","rspec.Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.#can_credit? #store_events create an action is specified creates an event with the set action.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:17:3:1:3:1\"}}","rspec.Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.#can_credit? #store_events create user has multiple store credits saves the user's total store credit in the event.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:17:3:1:2:1\"}}","rspec.Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.#can_credit? #store_events create user has one store credit creates a store credit event.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:17:3:1:1:1\"}}","rspec.Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.#can_credit? #store_events create user has one store credit makes the store credit event an allocation event.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:17:3:1:1:2\"}}","rspec.Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.#can_credit? #store_events create user has one store credit saves the user's total store credit in the event.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:17:3:1:1:3\"}}","rspec.Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.#can_credit? payment is completed credit is owed on the order payment doesn't have allowed credit returns false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:17:2:1:1:1\"}}","rspec.Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.#can_credit? payment is completed credit is owed on the order payment has allowed credit returns true.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:17:2:1:2:1\"}}","rspec.Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.#can_credit? payment is not completed returns false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:17:1:1\"}}","rspec.Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.#can_void? complete payment returns false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:5:1\"}}","rspec.Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.#can_void? invalid payment returns false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:4:1\"}}","rspec.Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.#can_void? pending payment returns true.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:1:1\"}}","rspec.Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.#can_void? remove store credits when order is completed example at ./spec/models/spree/store_credit_spec.rb:639.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:2:2:1\"}}","rspec.Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.#can_void? remove store credits when payment is completed example at ./spec/models/spree/store_credit_spec.rb:645.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:2:3:1\"}}","rspec.Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.#can_void? remove store credits when payment is in checkout and order is not completed example at ./spec/models/spree/store_credit_spec.rb:633.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:2:1:1\"}}","rspec.Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.#can_void? void payment returns false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:3:1\"}}","rspec.Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.#capture currency mismatch adds an error to the model.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:2:2\"}}","rspec.Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.#capture currency mismatch does not update the store credit model.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:2:3\"}}","rspec.Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.#capture currency mismatch returns false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:2:1\"}}","rspec.Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.#capture insufficient funds adds an error to the model.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1:2\"}}","rspec.Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.#capture insufficient funds does not update the store credit model.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1:3\"}}","rspec.Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.#capture insufficient funds returns false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1:1\"}}","rspec.Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.#capture valid capture originator is present records the originator.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:3:4:1\"}}","rspec.Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.#capture valid capture returns true.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:3:1\"}}","rspec.Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.#capture valid capture updates the authorized amount to the difference between the captured amount and the authorized amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:3:2\"}}","rspec.Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.#capture valid capture updates the used amount to the current used amount plus the captured amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:3:3\"}}","rspec.Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.#credit amount is more than what is captured adds an error message about the currency mismatch.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:3:2\"}}","rspec.Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.#credit amount is more than what is captured returns false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:3:1\"}}","rspec.Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.#credit amount is successfully credited credit_to_new_allocation is not set creates a new store credit event.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:4:2:3\"}}","rspec.Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.#credit amount is successfully credited credit_to_new_allocation is not set credits the passed amount to the store credit amount used.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:4:2:2\"}}","rspec.Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.#credit amount is successfully credited credit_to_new_allocation is not set returns true.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:4:2:1\"}}","rspec.Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.#credit amount is successfully credited credit_to_new_allocation is set creates a new store credit record.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:4:1:2\"}}","rspec.Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.#credit amount is successfully credited credit_to_new_allocation is set credits the passed amount to a new store credit record does not set the amount used on the originating store credit.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:4:1:4:1\"}}","rspec.Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.#credit amount is successfully credited credit_to_new_allocation is set credits the passed amount to a new store credit record sets a memo.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:4:1:4:8\"}}","rspec.Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.#credit amount is successfully credited credit_to_new_allocation is set credits the passed amount to a new store credit record sets attribute category_id inherited from the originating store credit.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:4:1:4:4\"}}","rspec.Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.#credit amount is successfully credited credit_to_new_allocation is set credits the passed amount to a new store credit record sets attribute created_by_id inherited from the originating store credit.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:4:1:4:5\"}}","rspec.Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.#credit amount is successfully credited credit_to_new_allocation is set credits the passed amount to a new store credit record sets attribute currency inherited from the originating store credit.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:4:1:4:6\"}}","rspec.Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.#credit amount is successfully credited credit_to_new_allocation is set credits the passed amount to a new store credit record sets attribute type_id inherited from the originating store credit.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:4:1:4:7\"}}","rspec.Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.#credit amount is successfully credited credit_to_new_allocation is set credits the passed amount to a new store credit record sets attribute user_id inherited from the originating store credit.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:4:1:4:3\"}}","rspec.Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.#credit amount is successfully credited credit_to_new_allocation is set credits the passed amount to a new store credit record sets the correct amount on the new store credit.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:4:1:4:2\"}}","rspec.Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.#credit amount is successfully credited credit_to_new_allocation is set does not create a new store credit event on the parent store credit.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:4:1:3\"}}","rspec.Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.#credit amount is successfully credited credit_to_new_allocation is set originator is present records the originator.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:4:1:5:1\"}}","rspec.Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.#credit amount is successfully credited credit_to_new_allocation is set returns true.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:4:1:1\"}}","rspec.Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.#credit currency does not match adds an error message about the currency mismatch.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:1:2\"}}","rspec.Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.#credit currency does not match returns false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:1:1\"}}","rspec.Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.#credit unable to find capture event adds an error message about the currency mismatch.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:2:2\"}}","rspec.Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.#credit unable to find capture event returns false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:2:1\"}}","rspec.Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.#display_amount returns a Spree::Money instance.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","rspec.Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.#display_amount_used returns a Spree::Money instance.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","rspec.Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.#validate_authorization currency mismatch adds an error to the model.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:2:2\"}}","rspec.Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.#validate_authorization currency mismatch returns false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:2:1\"}}","rspec.Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.#validate_authorization insufficient funds adds an error to the model.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1:2\"}}","rspec.Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.#validate_authorization insufficient funds returns false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1:1\"}}","rspec.Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.#validate_authorization troublesome floats returns true.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:4:1\"}}","rspec.Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.#validate_authorization valid authorization returns true.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:3:1\"}}","rspec.Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.#void auth event found for auth_code originator is present records the originator.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:3:3:1\"}}","rspec.Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.#void auth event found for auth_code returns the capture amount to the store credit.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:3:2\"}}","rspec.Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.#void auth event found for auth_code returns true.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:3:1\"}}","rspec.Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.#void capture event found for auth_code does not change the amount used on the store credit.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2:2\"}}","rspec.Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.#void capture event found for auth_code returns false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2:1\"}}","rspec.Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.#void no event found for auth_code adds an error to the model.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1:2\"}}","rspec.Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.#void no event found for auth_code returns false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1:1\"}}","rspec.Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.behaves like lifecycle events lifecycle events store_credit.created publishes created event when record is created.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1:1\"}}","rspec.Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.behaves like lifecycle events lifecycle events store_credit.deleted publishes deleted event when record is deleted.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:3:1\"}}","rspec.Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.behaves like lifecycle events lifecycle events store_credit.updated publishes updated event when record is updated.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:2:1\"}}","rspec.Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.behaves like metadata can query records by metadata properties.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:10\"}}","rspec.Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:10.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","rspec.Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:11.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","rspec.Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:4.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:5.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","rspec.Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:7.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","rspec.Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:8.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","rspec.Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.behaves like metadata reads data as not symbolized keys.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8\"}}","rspec.Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.behaves like metadata reads data as symbolized keys.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7\"}}","rspec.Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.callbacks amount used is greater than zero can not delete the store credit.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","rspec.Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.validations amount authorized less than or equal to amount adds an error message about the invalid authorized amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3:2\"}}","rspec.Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.validations amount authorized less than or equal to amount is not valid.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3:1\"}}","rspec.Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.validations amount used less than or equal to amount adds an error message about the invalid amount used.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:2\"}}","rspec.Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.validations amount used less than or equal to amount is not valid.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1\"}}","rspec.Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.validations used amount should not be greater than the credited amount the used amount is defined is not valid.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1:1\"}}","rspec.Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.validations used amount should not be greater than the credited amount the used amount is defined sets the correct error message.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1:2\"}}","rspec.Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb.validations used amount should not be greater than the credited amount the used amount is not defined yet is valid.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:2:1\"}}","rspec.Spree::StoreFaviconImage at ./spec/models/spree/store_favicon_image_spec.rb.validations file size when size is 1 megabyte is valid.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1:1\"}}","rspec.Spree::StoreFaviconImage at ./spec/models/spree/store_favicon_image_spec.rb.validations file size when size is over 1 megabyte is invalid.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:1\"}}","rspec.Spree::StoreFaviconImage at ./spec/models/spree/store_favicon_image_spec.rb.validations validates image properties.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::StoreProduct at ./spec/models/spree/store_product_spec.rb.#refresh_metrics! when orders are from different stores only counts statistics from the specific store.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","rspec.Spree::StoreProduct at ./spec/models/spree/store_product_spec.rb.#refresh_metrics! when orders have multiple line items with different quantities sums quantities for units_sold_count.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1\"}}","rspec.Spree::StoreProduct at ./spec/models/spree/store_product_spec.rb.#refresh_metrics! when orders have multiple line items with different quantities uses pre_tax_amount for revenue.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:2\"}}","rspec.Spree::StoreProduct at ./spec/models/spree/store_product_spec.rb.#refresh_metrics! when product has variants includes orders with product variants in statistics.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5:1\"}}","rspec.Spree::StoreProduct at ./spec/models/spree/store_product_spec.rb.#refresh_metrics! when there are completed orders calculates revenue from line item pre_tax_amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2\"}}","rspec.Spree::StoreProduct at ./spec/models/spree/store_product_spec.rb.#refresh_metrics! when there are completed orders calculates units_sold_count from line item quantities.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","rspec.Spree::StoreProduct at ./spec/models/spree/store_product_spec.rb.#refresh_metrics! when there are multiple line items across orders sums all pre_tax_amounts across orders.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6:2\"}}","rspec.Spree::StoreProduct at ./spec/models/spree/store_product_spec.rb.#refresh_metrics! when there are multiple line items across orders sums all quantities across orders.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6:1\"}}","rspec.Spree::StoreProduct at ./spec/models/spree/store_product_spec.rb.#refresh_metrics! when there are no completed orders sets statistics to zero.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","rspec.Spree::Stores::FindCurrent at ./spec/finders/spree/stores/find_current_spec.rb.existing store example at ./spec/finders/spree/stores/find_current_spec.rb:25.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.Spree::Stores::FindCurrent at ./spec/finders/spree/stores/find_current_spec.rb.existing store example at ./spec/finders/spree/stores/find_current_spec.rb:26.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","rspec.Spree::Stores::FindCurrent at ./spec/finders/spree/stores/find_current_spec.rb.no arguments example at ./spec/finders/spree/stores/find_current_spec.rb:18.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::Stores::FindCurrent at ./spec/finders/spree/stores/find_current_spec.rb.no arguments example at ./spec/finders/spree/stores/find_current_spec.rb:19.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","rspec.Spree::Stores::FindCurrent at ./spec/finders/spree/stores/find_current_spec.rb.non-existing store example at ./spec/finders/spree/stores/find_current_spec.rb:32.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","rspec.Spree::Stores::FindCurrent at ./spec/finders/spree/stores/find_current_spec.rb.with custom domain example at ./spec/finders/spree/stores/find_current_spec.rb:46.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","rspec.Spree::Stores::FindCurrent at ./spec/finders/spree/stores/find_current_spec.rb.with scope example at ./spec/finders/spree/stores/find_current_spec.rb:39.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","rspec.Spree::Stores::SettingsDefaultsByCountry at ./spec/services/spree/stores/settings_defaults_by_country_spec.rb.when country code is US returns imperial unit system.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::Stores::SettingsDefaultsByCountry at ./spec/services/spree/stores/settings_defaults_by_country_spec.rb.when country code is not US returns metric unit system.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.Spree::Subscriber at ./spec/models/spree/subscriber_spec.rb.#call with event handlers falls back to handle when no matching handler.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:2\"}}","rspec.Spree::Subscriber at ./spec/models/spree/subscriber_spec.rb.#call with event handlers routes to the correct handler.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","rspec.Spree::Subscriber at ./spec/models/spree/subscriber_spec.rb.#call without event handlers calls the handle method.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","rspec.Spree::Subscriber at ./spec/models/spree/subscriber_spec.rb..call creates an instance and calls it.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","rspec.Spree::Subscriber at ./spec/models/spree/subscriber_spec.rb..on maps events to methods.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.Spree::Subscriber at ./spec/models/spree/subscriber_spec.rb..subscribes_to accepts multiple patterns.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","rspec.Spree::Subscriber at ./spec/models/spree/subscriber_spec.rb..subscribes_to accumulates patterns from multiple calls.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","rspec.Spree::Subscriber at ./spec/models/spree/subscriber_spec.rb..subscribes_to registers subscription patterns.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::Subscriber at ./spec/models/spree/subscriber_spec.rb..subscribes_to stores subscription options.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","rspec.Spree::Subscriber at ./spec/models/spree/subscriber_spec.rb.integration receives events when registered.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","rspec.Spree::Tags::BulkAdd at ./spec/services/spree/tags/bulk_add_spec.rb.#call assigns correct attributes to taggings.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","rspec.Spree::Tags::BulkAdd at ./spec/services/spree/tags/bulk_add_spec.rb.#call creates taggings for each product-tag pair.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","rspec.Spree::Tags::BulkAdd at ./spec/services/spree/tags/bulk_add_spec.rb.#call creates tags for each tag name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::Tags::BulkAdd at ./spec/services/spree/tags/bulk_add_spec.rb.#call touches all products.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","rspec.Spree::Tags::BulkAdd at ./spec/services/spree/tags/bulk_add_spec.rb.#call when no records are provided does not create any taggings.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6:1\"}}","rspec.Spree::Tags::BulkAdd at ./spec/services/spree/tags/bulk_add_spec.rb.#call when no tag names are provided does not create any tags or taggings.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7:1\"}}","rspec.Spree::Tags::BulkAdd at ./spec/services/spree/tags/bulk_add_spec.rb.#call when tag names are duplicated or have extra spaces creates unique tags without extra spaces.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5:1\"}}","rspec.Spree::Tags::BulkRemove at ./spec/services/spree/tags/bulk_remove_spec.rb.#call does not remove tags.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","rspec.Spree::Tags::BulkRemove at ./spec/services/spree/tags/bulk_remove_spec.rb.#call removes correct taggings.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","rspec.Spree::Tags::BulkRemove at ./spec/services/spree/tags/bulk_remove_spec.rb.#call removes taggings for each product-tag pair.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::Tags::BulkRemove at ./spec/services/spree/tags/bulk_remove_spec.rb.#call touches all products.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","rspec.Spree::TaxCategory at ./spec/models/spree/tax_category_spec.rb.#destroy nullifies all products and variants.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","rspec.Spree::TaxCategory at ./spec/models/spree/tax_category_spec.rb.#destroy removes all tax rates.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","rspec.Spree::TaxCategory at ./spec/models/spree/tax_category_spec.rb..default returns the default tax category.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.Spree::TaxCategory at ./spec/models/spree/tax_category_spec.rb.default tax category undefaults the previous default tax category except when updating the existing default tax category.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","rspec.Spree::TaxCategory at ./spec/models/spree/tax_category_spec.rb.default tax category undefaults the previous default tax category.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb.#adjust not taxable line item does not create a refund.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:2\"}}","rspec.Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb.#adjust not taxable line item does not create a tax adjustment.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1\"}}","rspec.Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb.#adjust taxable line item when price includes tax when order's zone does not match default zone, is not included in the default zone, AND does not match the rate's zone does not create a tax refund for each tax rate.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1:3:2\"}}","rspec.Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb.#adjust taxable line item when price includes tax when order's zone does not match default zone, is not included in the default zone, AND does not match the rate's zone does not create positive adjustments.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1:3:1\"}}","rspec.Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb.#adjust taxable line item when price includes tax when order's zone is neither the default zone, or included in the default zone, but matches the rate's zone creates an adjustment.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1:2:1\"}}","rspec.Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb.#adjust taxable line item when price includes tax when order's zone is neither the default zone, or included in the default zone, but matches the rate's zone does not create a tax refund for each tax rate.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1:2:2\"}}","rspec.Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb.#adjust taxable line item when price includes tax when price does not include tax creates an adjustment.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1:4:3\"}}","rspec.Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb.#adjust taxable line item when price includes tax when price does not include tax deletes adjustments for open order when taxrate is deleted.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1:4:1\"}}","rspec.Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb.#adjust taxable line item when price includes tax when price does not include tax does not create a tax refund.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1:4:4\"}}","rspec.Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb.#adjust taxable line item when price includes tax when price does not include tax does not delete adjustments for complete order when taxrate is deleted.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1:4:2\"}}","rspec.Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb.#adjust taxable line item when price includes tax when price does not include tax tax adjustments applies adjustments when a tax zone is present.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1:4:5:1\"}}","rspec.Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb.#adjust taxable line item when price includes tax when price does not include tax tax adjustments when the tax zone is removed does not apply any adjustments.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1:4:5:2:1\"}}","rspec.Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb.#adjust taxable line item when price includes tax when two rates apply creates two price adjustments.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1:5:1\"}}","rspec.Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb.#adjust taxable line item when price includes tax when two rates apply price adjustments should be accurate.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1:5:2\"}}","rspec.Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb.#adjust taxable line item when price includes tax when zone is contained by default tax zone creates two adjustments, one for each tax rate.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1:1:1\"}}","rspec.Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb.#adjust taxable line item when price includes tax when zone is contained by default tax zone does not create a tax refund.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1:1:2\"}}","rspec.Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb.#amount_for_label returns a string with the percentage when the amount is not 0.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2\"}}","rspec.Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb.#amount_for_label returns an empty string when the amount is 0.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","rspec.Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb.#label returns the name and amount for the tax rate.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","rspec.Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb..adjust for MOSS taxation in Europe a download to france costs more including tax.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:4:1:3\"}}","rspec.Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb..adjust for MOSS taxation in Europe a download to germany costs 100 euros including tax.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:4:1:2\"}}","rspec.Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb..adjust for MOSS taxation in Europe a download to somewhere else costs the net amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:4:1:4\"}}","rspec.Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb..adjust for MOSS taxation in Europe a download without an address costs 100 euros including tax.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:4:1:1\"}}","rspec.Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb..adjust for MOSS taxation in Europe a t-shirt to france costs 100 euros including tax.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:4:2:2\"}}","rspec.Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb..adjust for MOSS taxation in Europe a t-shirt to germany costs 100 euros including tax.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:4:2:1\"}}","rspec.Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb..adjust for MOSS taxation in Europe a t-shirt to somewhere else costs the net amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:4:2:3\"}}","rspec.Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb..adjust with line items applies adjustments for two tax rates to the order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","rspec.Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb..adjust with shipments applies adjustments for two tax rates to the order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3:1\"}}","rspec.Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb..adjust without tax rates updates pre_tax_total to match line item cost if no taxes.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","rspec.Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb..included_tax_amount_for will only get me tax amounts from tax_rates that match.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","rspec.Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb.match returns an empty array when tax_zone is nil.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb.match when no rate zones match the tax zone when there is a default tax zone when the order has a different tax zone when the tax is a VAT return no tax rate.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:2:1:1\"}}","rspec.Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb.match when no rate zones match the tax zone when there is a default tax zone when the order has a different tax zone when the tax is not VAT returns no tax rate.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:2:2:1\"}}","rspec.Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb.match when no rate zones match the tax zone when there is a default tax zone when the order has the same tax zone when the tax is a VAT example at ./spec/models/spree/tax_rate_spec.rb:115.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:1:2:1\"}}","rspec.Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb.match when no rate zones match the tax zone when there is a default tax zone when the order has the same tax zone when the tax is not a VAT example at ./spec/models/spree/tax_rate_spec.rb:109.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:1:1:1\"}}","rspec.Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb.match when no rate zones match the tax zone when there is no default tax zone returns all rates that match the rate zone.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1:3\"}}","rspec.Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb.match when no rate zones match the tax zone when there is no default tax zone returns an empty array.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1:1\"}}","rspec.Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb.match when no rate zones match the tax zone when there is no default tax zone returns the rate that matches the rate zone.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1:2\"}}","rspec.Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb.match when no rate zones match the tax zone when there is no default tax zone when the tax_zone is contained within a rate zone returns the rate zone.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1:4:1\"}}","rspec.Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb.percentage conversion #amount_percentage converts decimal amount to percentage.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1:1\"}}","rspec.Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb.percentage conversion #amount_percentage handles zero amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1:3\"}}","rspec.Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb.percentage conversion #amount_percentage returns nil when amount is nil.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1:2\"}}","rspec.Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb.percentage conversion #amount_percentage rounds to 2 decimal places.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1:4\"}}","rspec.Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb.percentage conversion #amount_percentage= converts percentage to decimal amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2:1\"}}","rspec.Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb.percentage conversion #amount_percentage= handles string percentage values.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2:5\"}}","rspec.Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb.percentage conversion #amount_percentage= handles zero percentage.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2:4\"}}","rspec.Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb.percentage conversion #amount_percentage= sets amount to nil when percentage is empty string.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2:3\"}}","rspec.Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb.percentage conversion #amount_percentage= sets amount to nil when percentage is nil.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2:2\"}}","rspec.Spree::Taxon at ./spec/models/spree/taxon_spec.rb.#active_products_with_descendants when category has no products returns false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:17:3:1\"}}","rspec.Spree::Taxon at ./spec/models/spree/taxon_spec.rb.#active_products_with_descendants when category has products but children categories have no products returns false when products aren't active.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:17:4:2\"}}","rspec.Spree::Taxon at ./spec/models/spree/taxon_spec.rb.#active_products_with_descendants when category has products but children categories have no products returns true.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:17:4:1\"}}","rspec.Spree::Taxon at ./spec/models/spree/taxon_spec.rb.#active_products_with_descendants when category has products returns true when products aren't active.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:17:1:2\"}}","rspec.Spree::Taxon at ./spec/models/spree/taxon_spec.rb.#active_products_with_descendants when category has products returns true.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:17:1:1\"}}","rspec.Spree::Taxon at ./spec/models/spree/taxon_spec.rb.#active_products_with_descendants when children categories also have no products returns false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:17:5:1\"}}","rspec.Spree::Taxon at ./spec/models/spree/taxon_spec.rb.#active_products_with_descendants when only children categories have products returns false when products aren't active.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:17:2:2\"}}","rspec.Spree::Taxon at ./spec/models/spree/taxon_spec.rb.#active_products_with_descendants when only children categories have products returns true.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:17:2:1\"}}","rspec.Spree::Taxon at ./spec/models/spree/taxon_spec.rb.#cached_self_and_descendants_ids example at ./spec/models/spree/taxon_spec.rb:270.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1\"}}","rspec.Spree::Taxon at ./spec/models/spree/taxon_spec.rb.#copy_taxonomy_from_parent example at ./spec/models/spree/taxon_spec.rb:277.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1\"}}","rspec.Spree::Taxon at ./spec/models/spree/taxon_spec.rb.#copy_taxonomy_from_parent example at ./spec/models/spree/taxon_spec.rb:278.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2\"}}","rspec.Spree::Taxon at ./spec/models/spree/taxon_spec.rb.#localized_slugs_for_store when one of the supported locales does not have a translation falls back to store's default locale.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:2:1\"}}","rspec.Spree::Taxon at ./spec/models/spree/taxon_spec.rb.#localized_slugs_for_store when setting the slug translations for taxonomy sets the slugs in slug format.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:3:1\"}}","rspec.Spree::Taxon at ./spec/models/spree/taxon_spec.rb.#localized_slugs_for_store when setting the slugs in taxon under taxomony with different parent slug sets the slug in valid format.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:4:1\"}}","rspec.Spree::Taxon at ./spec/models/spree/taxon_spec.rb.#localized_slugs_for_store when there are slugs in locales not supported by the store returns only slugs in locales supported by the store.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:1:1\"}}","rspec.Spree::Taxon at ./spec/models/spree/taxon_spec.rb.#pretty_name 1 lvl deep returns taxonomy name and taxon name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:1:1\"}}","rspec.Spree::Taxon at ./spec/models/spree/taxon_spec.rb.#pretty_name 2+ lvl deep returns parent name and taxon name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:2:1\"}}","rspec.Spree::Taxon at ./spec/models/spree/taxon_spec.rb.#pretty_name 2+ lvl deep when name is updated returns the updated pretty name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:2:2:1\"}}","rspec.Spree::Taxon at ./spec/models/spree/taxon_spec.rb.#pretty_name 2+ lvl deep when parent name is updated returns the updated pretty name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:2:3:1\"}}","rspec.Spree::Taxon at ./spec/models/spree/taxon_spec.rb.#pretty_name when `always_use_translations` is disabled sets the pretty name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:3:1\"}}","rspec.Spree::Taxon at ./spec/models/spree/taxon_spec.rb.#pretty_name when `always_use_translations` is enabled sets the pretty name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:4:1\"}}","rspec.Spree::Taxon at ./spec/models/spree/taxon_spec.rb.#products_matching_rules when the taxon is automatic when the taxon has no rules returns an empty taxon.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:2:1:1\"}}","rspec.Spree::Taxon at ./spec/models/spree/taxon_spec.rb.#products_matching_rules when the taxon is automatic when the taxon has rules when the rule is a sale rule when the match policy is in_not_equal_to matches products that aren't on sale and have price in store's currency.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:2:2:2:2:1\"}}","rspec.Spree::Taxon at ./spec/models/spree/taxon_spec.rb.#products_matching_rules when the taxon is automatic when the taxon has rules when the rule is a sale rule when the match policy is is_equal_to matches products that are on sale in store's currency.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:2:2:2:1:1\"}}","rspec.Spree::Taxon at ./spec/models/spree/taxon_spec.rb.#products_matching_rules when the taxon is automatic when the taxon has rules when the rule is a tag rule when the match policy is is_equal_to returns products that match cruelty-free tag.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:2:2:1:1:1\"}}","rspec.Spree::Taxon at ./spec/models/spree/taxon_spec.rb.#products_matching_rules when the taxon is automatic when the taxon has rules when the rule is a tag rule when the match policy is is_equal_to returns products that match discounted tag.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:2:2:1:1:2\"}}","rspec.Spree::Taxon at ./spec/models/spree/taxon_spec.rb.#products_matching_rules when the taxon is automatic when the taxon has rules when the rule is a tag rule when the match policy is is_equal_to with all rules match policy returns products that match both tags.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:2:2:1:1:3:1\"}}","rspec.Spree::Taxon at ./spec/models/spree/taxon_spec.rb.#products_matching_rules when the taxon is automatic when the taxon has rules when the rule is a tag rule when the match policy is is_equal_to with any rules match policy returns products that match any tag.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:2:2:1:1:4:1\"}}","rspec.Spree::Taxon at ./spec/models/spree/taxon_spec.rb.#products_matching_rules when the taxon is automatic when the taxon has rules when the rule is a tag rule when the match policy is is_not_equal_to returns products that do not match cruelty-free tag.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:2:2:1:2:1\"}}","rspec.Spree::Taxon at ./spec/models/spree/taxon_spec.rb.#products_matching_rules when the taxon is automatic when the taxon has rules when the rule is a tag rule when the match policy is is_not_equal_to returns products that do not match discounted tag.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:2:2:1:2:2\"}}","rspec.Spree::Taxon at ./spec/models/spree/taxon_spec.rb.#products_matching_rules when the taxon is automatic when the taxon has rules when the rule is a tag rule when the match policy is is_not_equal_to with all rules match policy returns products that do not match both tags.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:2:2:1:2:3:1\"}}","rspec.Spree::Taxon at ./spec/models/spree/taxon_spec.rb.#products_matching_rules when the taxon is automatic when the taxon has rules when the rule is a tag rule when the match policy is is_not_equal_to with any rules match policy returns products that do not match any tag.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:2:2:1:2:4:1\"}}","rspec.Spree::Taxon at ./spec/models/spree/taxon_spec.rb.#products_matching_rules when the taxon is manual returns an empty taxon.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:1:1\"}}","rspec.Spree::Taxon at ./spec/models/spree/taxon_spec.rb.#regenerate_pretty_name_and_permalink regenerates pretty name and permalink.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:1\"}}","rspec.Spree::Taxon at ./spec/models/spree/taxon_spec.rb.#regenerate_pretty_name_and_permalink when parent name is changed updates the pretty name and permalink.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:3:1\"}}","rspec.Spree::Taxon at ./spec/models/spree/taxon_spec.rb.#regenerate_pretty_name_and_permalink when parent's permalink is changed updates the pretty name and permalink.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:2:1\"}}","rspec.Spree::Taxon at ./spec/models/spree/taxon_spec.rb.#regenerate_pretty_name_and_permalink when taxon is moved updates the pretty name and permalink when move is done inside different locales.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:5:2\"}}","rspec.Spree::Taxon at ./spec/models/spree/taxon_spec.rb.#regenerate_pretty_name_and_permalink when taxon is moved updates the pretty name and permalink.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:5:1\"}}","rspec.Spree::Taxon at ./spec/models/spree/taxon_spec.rb.#regenerate_pretty_name_and_permalink with translations updates the pretty name and permalink for translations as well.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:4:1\"}}","rspec.Spree::Taxon at ./spec/models/spree/taxon_spec.rb.#store returns the store from the taxonomy.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:1\"}}","rspec.Spree::Taxon at ./spec/models/spree/taxon_spec.rb.#sync_taxonomy_name when none root taxon name is updated does not update the taxonomy name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:1:1\"}}","rspec.Spree::Taxon at ./spec/models/spree/taxon_spec.rb.#sync_taxonomy_name when root taxon attribute other than name is updated does not update the taxonomy.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:4:1\"}}","rspec.Spree::Taxon at ./spec/models/spree/taxon_spec.rb.#sync_taxonomy_name when root taxon name is updated updates the taxonomy name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:2:1\"}}","rspec.Spree::Taxon at ./spec/models/spree/taxon_spec.rb.#sync_taxonomy_name when root taxon name is updated with special characters updates the taxonomy name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:3:1\"}}","rspec.Spree::Taxon at ./spec/models/spree/taxon_spec.rb.#to_param example at ./spec/models/spree/taxon_spec.rb:13.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.Spree::Taxon at ./spec/models/spree/taxon_spec.rb.Scopes .for_taxonomy when translations are disabled returns the correct taxon.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1:1\"}}","rspec.Spree::Taxon at ./spec/models/spree/taxon_spec.rb.Scopes .for_taxonomy when translations are enabled returns the correct taxon.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:2:1\"}}","rspec.Spree::Taxon at ./spec/models/spree/taxon_spec.rb.Scopes .with_matching_name returns the taxon with the matching name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1\"}}","rspec.Spree::Taxon at ./spec/models/spree/taxon_spec.rb.Scopes .with_matching_name with translations returns the taxon with the matching name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:2:1\"}}","rspec.Spree::Taxon at ./spec/models/spree/taxon_spec.rb.Validations #check_for_root does not validate the taxon.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","rspec.Spree::Taxon at ./spec/models/spree/taxon_spec.rb.Validations #check_for_root validates the taxon.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:2\"}}","rspec.Spree::Taxon at ./spec/models/spree/taxon_spec.rb.Validations #parent_belongs_to_same_taxonomy does not validate the taxon.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","rspec.Spree::Taxon at ./spec/models/spree/taxon_spec.rb.Validations #parent_belongs_to_same_taxonomy validates the taxon.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:2\"}}","rspec.Spree::Taxon at ./spec/models/spree/taxon_spec.rb.behaves like metadata can query records by metadata properties.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:10\"}}","rspec.Spree::Taxon at ./spec/models/spree/taxon_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:10.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","rspec.Spree::Taxon at ./spec/models/spree/taxon_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:11.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","rspec.Spree::Taxon at ./spec/models/spree/taxon_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:4.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::Taxon at ./spec/models/spree/taxon_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:5.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","rspec.Spree::Taxon at ./spec/models/spree/taxon_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:7.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","rspec.Spree::Taxon at ./spec/models/spree/taxon_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:8.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","rspec.Spree::Taxon at ./spec/models/spree/taxon_spec.rb.behaves like metadata reads data as not symbolized keys.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8\"}}","rspec.Spree::Taxon at ./spec/models/spree/taxon_spec.rb.behaves like metadata reads data as symbolized keys.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7\"}}","rspec.Spree::Taxon at ./spec/models/spree/taxon_spec.rb.callbacks regenerate_taxon_products when rule is created calls #regenerate_taxon_products.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:4:1\"}}","rspec.Spree::Taxon at ./spec/models/spree/taxon_spec.rb.callbacks regenerate_taxon_products when rule is destroyed calls #regenerate_taxon_products.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:3:1\"}}","rspec.Spree::Taxon at ./spec/models/spree/taxon_spec.rb.callbacks regenerate_taxon_products when taxon's rule changes calls #regenerate_taxon_products.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:2:1\"}}","rspec.Spree::Taxon at ./spec/models/spree/taxon_spec.rb.callbacks regenerate_taxon_products when taxon's rules_match_policy changes calls #regenerate_taxon_products.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:1:1\"}}","rspec.Spree::Taxon at ./spec/models/spree/taxon_spec.rb.creating a child node using first_or_create does not error out.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1\"}}","rspec.Spree::Taxon at ./spec/models/spree/taxon_spec.rb.ransackable_associations example at ./spec/models/spree/taxon_spec.rb:266.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1\"}}","rspec.Spree::Taxon at ./spec/models/spree/taxon_spec.rb.set_permalink sets permalink correctly when no parent present.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","rspec.Spree::Taxon at ./spec/models/spree/taxon_spec.rb.set_permalink stores old slugs in FriendlyIds history.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:3\"}}","rspec.Spree::Taxon at ./spec/models/spree/taxon_spec.rb.set_permalink supports Chinese characters.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2\"}}","rspec.Spree::Taxon at ./spec/models/spree/taxon_spec.rb.set_permalink with parent taxon sets permalink correctly when taxon has parent.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:4:1\"}}","rspec.Spree::Taxon at ./spec/models/spree/taxon_spec.rb.set_permalink with parent taxon sets permalink correctly with existing permalink present.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:4:2\"}}","rspec.Spree::Taxon at ./spec/models/spree/taxon_spec.rb.set_permalink with parent taxon setting a new node sibling position via :child_index= taxon is not new passes the desired index move_to_child_with_index of :parent.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:4:4:1:1\"}}","rspec.Spree::Taxon at ./spec/models/spree/taxon_spec.rb.set_permalink with parent taxon supports Chinese characters.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:4:3\"}}","rspec.Spree::Taxon at ./spec/models/spree/taxon_spec.rb.when using another locale translates taxon fields.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","rspec.Spree::TaxonImage at ./spec/models/spree/taxon_image_spec.rb.validation has allowed attachment content type.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::TaxonImage at ./spec/models/spree/taxon_image_spec.rb.validation has no allowed attachment content type.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","rspec.Spree::Taxonomy at ./spec/models/spree/taxonomy_spec.rb.#destroy destroys all associated taxons.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","rspec.Spree::Taxonomy at ./spec/models/spree/taxonomy_spec.rb.#set_root_taxon_name when Taxonomy is created sets the root Taxonomy name to match.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1\"}}","rspec.Spree::Taxonomy at ./spec/models/spree/taxonomy_spec.rb.#set_root_taxon_name when Taxonomy name is updated changes the root Taxon name to match.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1\"}}","rspec.Spree::Taxonomy at ./spec/models/spree/taxonomy_spec.rb.#set_root_taxon_name when Taxonomy position is updated does not change the root Taxon name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3:1\"}}","rspec.Spree::Taxonomy at ./spec/models/spree/taxonomy_spec.rb.behaves like metadata can query records by metadata properties.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:10\"}}","rspec.Spree::Taxonomy at ./spec/models/spree/taxonomy_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:10.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","rspec.Spree::Taxonomy at ./spec/models/spree/taxonomy_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:11.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","rspec.Spree::Taxonomy at ./spec/models/spree/taxonomy_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:4.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::Taxonomy at ./spec/models/spree/taxonomy_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:5.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","rspec.Spree::Taxonomy at ./spec/models/spree/taxonomy_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:7.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","rspec.Spree::Taxonomy at ./spec/models/spree/taxonomy_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:8.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","rspec.Spree::Taxonomy at ./spec/models/spree/taxonomy_spec.rb.behaves like metadata reads data as not symbolized keys.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8\"}}","rspec.Spree::Taxonomy at ./spec/models/spree/taxonomy_spec.rb.behaves like metadata reads data as symbolized keys.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7\"}}","rspec.Spree::Taxonomy at ./spec/models/spree/taxonomy_spec.rb.scopes .with_matching_name returns the taxonomy with the matching name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","rspec.Spree::Taxonomy at ./spec/models/spree/taxonomy_spec.rb.scopes .with_matching_name with translations returns the taxonomy with the matching name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:2:1\"}}","rspec.Spree::Taxons::AddProducts at ./spec/services/spree/taxons/add_products_spec.rb.#call creates classifications for each taxon-product pair.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::Taxons::AddProducts at ./spec/services/spree/taxons/add_products_spec.rb.#call returns a successful result.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","rspec.Spree::Taxons::AddProducts at ./spec/services/spree/taxons/add_products_spec.rb.#call sets the correct position for each classification.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","rspec.Spree::Taxons::AddProducts at ./spec/services/spree/taxons/add_products_spec.rb.#call touches all products.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","rspec.Spree::Taxons::AddProducts at ./spec/services/spree/taxons/add_products_spec.rb.#call touches all taxons.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","rspec.Spree::Taxons::AddProducts at ./spec/services/spree/taxons/add_products_spec.rb.#call updates classification_count on products.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7\"}}","rspec.Spree::Taxons::AddProducts at ./spec/services/spree/taxons/add_products_spec.rb.#call updates classification_count on taxons.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","rspec.Spree::Taxons::Find at ./spec/finders/spree/taxons/find_spec.rb.filtering by taxon property when filtering by taxon name returns taxon with matching name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","rspec.Spree::Taxons::RegenerateProducts at ./spec/services/spree/taxons/regenerate_products_spec.rb.after changing rules re-matches products for an automatic taxon.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::Taxons::RegenerateProducts at ./spec/services/spree/taxons/regenerate_products_spec.rb.after changing rules updates classification_count on products.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","rspec.Spree::Taxons::RegenerateProducts at ./spec/services/spree/taxons/regenerate_products_spec.rb.after changing rules updates classification_count on taxon.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","rspec.Spree::Taxons::RegenerateProducts at ./spec/services/spree/taxons/regenerate_products_spec.rb.when nothing changed doesn't change the taxon.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.Spree::Taxons::RegenerateProducts at ./spec/services/spree/taxons/regenerate_products_spec.rb.with manual order when nothing changed keeps products positions.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","rspec.Spree::Taxons::RegenerateProducts at ./spec/services/spree/taxons/regenerate_products_spec.rb.with manual order when products added keeps products positions.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","rspec.Spree::Taxons::RegenerateProducts at ./spec/services/spree/taxons/regenerate_products_spec.rb.with manual order when some one product removed and 2 added keeps products positions.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3:1\"}}","rspec.Spree::Taxons::RegenerateProducts at ./spec/services/spree/taxons/regenerate_products_spec.rb.with manual order when some one product removed from middle of list and 2 added keeps products positions.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4:1\"}}","rspec.Spree::Taxons::RemoveProducts at ./spec/services/spree/taxons/remove_products_spec.rb.#call removes classifications for each taxon-product pair.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::Taxons::RemoveProducts at ./spec/services/spree/taxons/remove_products_spec.rb.#call resets the position for remaining classifications.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","rspec.Spree::Taxons::RemoveProducts at ./spec/services/spree/taxons/remove_products_spec.rb.#call returns a successful result.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","rspec.Spree::Taxons::RemoveProducts at ./spec/services/spree/taxons/remove_products_spec.rb.#call touches all products.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","rspec.Spree::Taxons::RemoveProducts at ./spec/services/spree/taxons/remove_products_spec.rb.#call touches all taxons.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","rspec.Spree::Taxons::RemoveProducts at ./spec/services/spree/taxons/remove_products_spec.rb.#call updates classification_count on products.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7\"}}","rspec.Spree::Taxons::RemoveProducts at ./spec/services/spree/taxons/remove_products_spec.rb.#call updates classification_count on taxons.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","rspec.Spree::UrlValidator at ./spec/validators/spree/url_validator_spec.rb.using a given message or a defined one using the message option adds the given message to the record url errors array.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","rspec.Spree::UrlValidator at ./spec/validators/spree/url_validator_spec.rb.using a given message or a defined one without using the message option adds a pre-defined message to the record url error array.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","rspec.Spree::UrlValidator at ./spec/validators/spree/url_validator_spec.rb.validating the given URL is invalid example at ./spec/validators/spree/url_validator_spec.rb:16.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","rspec.Spree::UrlValidator at ./spec/validators/spree/url_validator_spec.rb.validating the given URL is invalid example at ./spec/validators/spree/url_validator_spec.rb:17.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2\"}}","rspec.Spree::UrlValidator at ./spec/validators/spree/url_validator_spec.rb.validating the given URL is invalid example at ./spec/validators/spree/url_validator_spec.rb:18.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3\"}}","rspec.Spree::UrlValidator at ./spec/validators/spree/url_validator_spec.rb.validating the given URL is invalid example at ./spec/validators/spree/url_validator_spec.rb:19.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:4\"}}","rspec.Spree::UrlValidator at ./spec/validators/spree/url_validator_spec.rb.validating the given URL is invalid example at ./spec/validators/spree/url_validator_spec.rb:20.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:5\"}}","rspec.Spree::UrlValidator at ./spec/validators/spree/url_validator_spec.rb.validating the given URL is valid example at ./spec/validators/spree/url_validator_spec.rb:24.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","rspec.Spree::UrlValidator at ./spec/validators/spree/url_validator_spec.rb.validating the given URL is valid example at ./spec/validators/spree/url_validator_spec.rb:25.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2\"}}","rspec.Spree::UrlValidator at ./spec/validators/spree/url_validator_spec.rb.validating the given URL is valid example at ./spec/validators/spree/url_validator_spec.rb:26.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:3\"}}","rspec.Spree::UrlValidator at ./spec/validators/spree/url_validator_spec.rb.validating the given URL is valid example at ./spec/validators/spree/url_validator_spec.rb:27.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:4\"}}","rspec.Spree::UrlValidator at ./spec/validators/spree/url_validator_spec.rb.validating the given URL is valid example at ./spec/validators/spree/url_validator_spec.rb:29.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:5\"}}","rspec.Spree::UserManagement at ./spec/models/spree/concerns/user_management_spec.rb.associations has many invitations.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3\"}}","rspec.Spree::UserManagement at ./spec/models/spree/concerns/user_management_spec.rb.associations has many role_users.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.Spree::UserManagement at ./spec/models/spree/concerns/user_management_spec.rb.associations has many users through role_users.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","rspec.Spree::UserManagement at ./spec/models/spree/concerns/user_management_spec.rb.instance methods #add_user adds a user to the resource with a specified role.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2\"}}","rspec.Spree::UserManagement at ./spec/models/spree/concerns/user_management_spec.rb.instance methods #add_user adds a user to the resource with the default role.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","rspec.Spree::UserManagement at ./spec/models/spree/concerns/user_management_spec.rb.instance methods #default_user_role returns the default admin role.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","rspec.Spree::UserManagement at ./spec/models/spree/concerns/user_management_spec.rb.instance methods #remove_user removes a user from the resource.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","rspec.Spree::UserMethods at ./spec/models/spree/concerns/user_methods_spec.rb.#can_be_deleted? when user has a role on current store returns false if user is the last with a role on the store.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1:2\"}}","rspec.Spree::UserMethods at ./spec/models/spree/concerns/user_methods_spec.rb.#can_be_deleted? when user has a role on current store returns true if another user also has a role on the store.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1:1\"}}","rspec.Spree::UserMethods at ./spec/models/spree/concerns/user_methods_spec.rb.#can_be_deleted? when user has no role on current store returns false if user has completed orders.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2:2\"}}","rspec.Spree::UserMethods at ./spec/models/spree/concerns/user_methods_spec.rb.#can_be_deleted? when user has no role on current store returns true if user has no completed orders.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2:1\"}}","rspec.Spree::UserMethods at ./spec/models/spree/concerns/user_methods_spec.rb.#check_completed_orders allow to destroy dependent destroy does not destroy dependent destroy items.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","rspec.Spree::UserMethods at ./spec/models/spree/concerns/user_methods_spec.rb.#check_completed_orders rstrict t delete dependent destroyed does not destroy dependent destroy items.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","rspec.Spree::UserMethods at ./spec/models/spree/concerns/user_methods_spec.rb.#invited_by returns the user who invited the current user.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","rspec.Spree::UserMethods at ./spec/models/spree/concerns/user_methods_spec.rb.#last_incomplete_spree_order with an incomplete order example at ./spec/models/spree/concerns/user_methods_spec.rb:20.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","rspec.Spree::UserMethods at ./spec/models/spree/concerns/user_methods_spec.rb.#last_incomplete_spree_order with incomplete canceled order example at ./spec/models/spree/concerns/user_methods_spec.rb:26.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","rspec.Spree::UserMethods at ./spec/models/spree/concerns/user_methods_spec.rb.#last_incomplete_spree_order without an incomplete order example at ./spec/models/spree/concerns/user_methods_spec.rb:30.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","rspec.Spree::UserMethods at ./spec/models/spree/concerns/user_methods_spec.rb.#payment_sources does not include credit cards that belong to other user.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","rspec.Spree::UserMethods at ./spec/models/spree/concerns/user_methods_spec.rb.#payment_sources does not include credit cards with inactive payment method.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:5\"}}","rspec.Spree::UserMethods at ./spec/models/spree/concerns/user_methods_spec.rb.#payment_sources does not include credit cards without payment profile.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3\"}}","rspec.Spree::UserMethods at ./spec/models/spree/concerns/user_methods_spec.rb.#payment_sources does not include outdated credit cards.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4\"}}","rspec.Spree::UserMethods at ./spec/models/spree/concerns/user_methods_spec.rb.#payment_sources includes only not expired credit cards with payment profile that belong to subject user.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","rspec.Spree::UserMethods at ./spec/models/spree/concerns/user_methods_spec.rb.#scramble_email_and_names scramble email and names.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","rspec.Spree::UserMethods at ./spec/models/spree/concerns/user_methods_spec.rb..multi_search returns users based on an email.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","rspec.Spree::UserMethods at ./spec/models/spree/concerns/user_methods_spec.rb..multi_search returns users based on the first name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2\"}}","rspec.Spree::UserRoles at ./spec/models/spree/concerns/user_roles_spec.rb.#add_role adds a role to the user.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::UserRoles at ./spec/models/spree/concerns/user_roles_spec.rb.#add_role when a resource parameter is provided adds a role to the user for the resource.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","rspec.Spree::UserRoles at ./spec/models/spree/concerns/user_roles_spec.rb.#has_spree_role? when a resource parameter is provided when the user does not have the role for the resource returns false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3:2:1\"}}","rspec.Spree::UserRoles at ./spec/models/spree/concerns/user_roles_spec.rb.#has_spree_role? when a resource parameter is provided when the user has the role for the resource returns true.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3:1:1\"}}","rspec.Spree::UserRoles at ./spec/models/spree/concerns/user_roles_spec.rb.#has_spree_role? with a role example at ./spec/models/spree/concerns/user_roles_spec.rb:56.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","rspec.Spree::UserRoles at ./spec/models/spree/concerns/user_roles_spec.rb.#has_spree_role? without a role example at ./spec/models/spree/concerns/user_roles_spec.rb:60.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","rspec.Spree::UserRoles at ./spec/models/spree/concerns/user_roles_spec.rb.#remove_role removes a role from the user.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.Spree::UserRoles at ./spec/models/spree/concerns/user_roles_spec.rb.#remove_role when a resource parameter is provided removes a role from the user for the resource.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","rspec.Spree::UserRoles at ./spec/models/spree/concerns/user_roles_spec.rb.#spree_admin? example at ./spec/models/spree/concerns/user_roles_spec.rb:83.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","rspec.Spree::UserRoles at ./spec/models/spree/concerns/user_roles_spec.rb.#spree_admin? when a resource parameter is provided checks against the resource.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1\"}}","rspec.Spree::UserRoles at ./spec/models/spree/concerns/user_roles_spec.rb..spree_admin_created? returns false when admin does not exist.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2\"}}","rspec.Spree::UserRoles at ./spec/models/spree/concerns/user_roles_spec.rb..spree_admin_created? returns true when admin exists.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.#additional_images returns all images except the default.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:53:1\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.#available? when discontinued when product is available example at ./spec/models/spree/variant_spec.rb:1220.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:43:1:1:1\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.#available? when discontinued when product is not available example at ./spec/models/spree/variant_spec.rb:1228.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:43:1:2:1\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.#available? when not discontinued when product is available example at ./spec/models/spree/variant_spec.rb:1242.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:43:2:1:1\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.#available? when not discontinued when product is not available example at ./spec/models/spree/variant_spec.rb:1250.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:43:2:2:1\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.#backordered? returns false when out of stock and not backorderable.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:47:2\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.#backordered? returns false when there is available item in stock.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:47:3\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.#backordered? returns true when out of stock and backorderable.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:47:1\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.#cost_currency when cost currency is nil populates cost currency with the default value on save.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:18:1:1\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.#cost_price= uses LocalizedNumber.parse.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:1\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.#created_at creates variant with created_at timestamp.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:45:1\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.#currency returns the globally configured currency.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:16:1\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.#default_image when variant has images returns the first image.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:50:1:1\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.#default_image when variant has no images falls back to product default image.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:50:2:1\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.#dimension return the dimension if the dimension parameters are different of zero.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:40:1\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.#discontinue! changes updated_at.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:41:2\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.#discontinue! sets the discontinued.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:41:1\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.#discontinued? is false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:42:1\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.#discontinued? is true.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:42:2\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.#display_amount returns a Spree::Money.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:17:1\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.#ensure_not_in_complete_orders adds error on variant destroy.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:48:1\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.#has_images? when images are preloaded but empty returns false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:54:4:1\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.#has_images? when images are preloaded uses loaded association.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:54:3:1\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.#has_images? when variant has images returns true.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:54:2:1\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.#has_images? when variant has no images returns false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:54:1:1\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.#in_stock? #can_supply? calls out to quantifier.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:2:1\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.#in_stock? when stock_items are backorderable when stock_items out of stock can_supply? return true.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:3:1:2\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.#in_stock? when stock_items are backorderable when stock_items out of stock in_stock? returns false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:3:1:1\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.#in_stock? when stock_items are not backorderable when stock_items in stock returns true if stock_items in stock.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:1:1:1\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.#in_stock? when stock_items are not backorderable when stock_items out of stock return false if stock_items out of stock.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:29:1:2:1\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.#in_stock_or_backorderable? when variant has no stock items example at ./spec/models/spree/variant_spec.rb:482.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:1:1\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.#in_stock_or_backorderable? when variant has stock items when variant stock items count_on_hand <= 0 example at ./spec/models/spree/variant_spec.rb:499.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:2:2:1\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.#in_stock_or_backorderable? when variant has stock items when variant stock items count_on_hand <= 0 when variant track_inventory = false example at ./spec/models/spree/variant_spec.rb:504.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:2:2:2:1\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.#in_stock_or_backorderable? when variant has stock items when variant stock items count_on_hand <= 0 when variant track_inventory = true example at ./spec/models/spree/variant_spec.rb:508.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:2:2:3:1\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.#in_stock_or_backorderable? when variant has stock items when variant stock items count_on_hand <= 0 when variant track_inventory = true with some variant stock item having backorderable = true example at ./spec/models/spree/variant_spec.rb:513.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:2:2:3:2:1\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.#in_stock_or_backorderable? when variant has stock items when variant stock items count_on_hand > 0 example at ./spec/models/spree/variant_spec.rb:493.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:2:1:1\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.#is_backorderable invokes Spree::Stock::Quantifier.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:30:1\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.#on_sale? when existing currency is passed checks if variant is discounted in that currency.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:21:1:1\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.#on_sale? when existing currency is passed when variant is discounted returns true.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:21:1:2:1\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.#on_sale? when existing currency is passed when variant is not discounted returns false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:21:1:3:1\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.#on_sale? when passed currency does not exist returns false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:21:2:1\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.#options returns an array of hashes with option type name, value, and presentation orderd by option type position.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:23:1\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.#options_text when the variant has no option values returns an empty string.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:24:1:1\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.#options_text when the variant has option values returns the options text of the variant.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:24:2:1\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.#price= uses LocalizedNumber.parse.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:14:1\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.#price_in when currency is EUR returns the value in the EUR.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:2:1\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.#price_in when currency is USD returns the value in the USD.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:3:1\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.#price_in when currency is not specified returns 0.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:1:1\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.#price_in when price exists in a price list does not return price list price.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:5:1\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.#price_in when price exists in a price list when base price also exists returns the base price, not the price list price.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:5:2:1\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.#price_in when there is no price with present amount in given currency returns 0.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:19:4:1\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.#primary_image returns the first image.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:51:1\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.#purchasable? when stock_items are not backorderable when stock_items in stock returns true if stock_items in stock.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:31:1:1:1\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.#purchasable? when stock_items are not backorderable when stock_items out of stock return false if stock_items out of stock.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:31:1:2:1\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.#purchasable? when stock_items are out of stock when stock item are backorderable returns true if stock_items are backorderable.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:31:2:1:1\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.#purchasable? when stock_items are out of stock when stock_items are not backorderable return false if stock_items are not backorderable.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:31:2:2:1\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.#remove_line_items_from_incomplete_orders deletes the line items from the order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:49:2\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.#remove_line_items_from_incomplete_orders schedules RemoveFromIncompleteOrdersJob.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:49:1\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.#secondary_image returns the second image.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:52:1\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.#set_price creates a base price for the currency.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:20:1\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.#set_price does not update price list price.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:20:3\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.#set_price sets compare_at_amount when provided.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:20:4\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.#set_price updates existing base price.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:20:2\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.#should_track_inventory? does not track inventory when global setting is off.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:35:1\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.#should_track_inventory? does not track inventory when variant is turned off.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:35:2\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.#should_track_inventory? tracks inventory when global and variant are on.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:35:3\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.#tax_category when tax category is deleted also in product with default tax category returns the default tax category.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:33:4:1:1\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.#tax_category when tax category is deleted also in product without default tax category returns nil.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:33:4:2:1\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.#tax_category when tax category is deleted returns the parent products tax_category.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:33:3:1\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.#tax_category when tax_category is nil returns the parent products tax_category.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:33:1:1\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.#tax_category when tax_category is set returns the tax_category set on itself.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:33:2:1\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.#total_on_hand is infinite if track_inventory_levels is false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:32:1\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.#total_on_hand matches quantifier total_on_hand.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:32:2\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.#updated_at creates variant with updated_at timestamp.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:46:1\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.#volume is zero if any dimension parameter is zero.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:39:1\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.#volume return the volume if the dimension parameters are different of zero.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:39:2\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.#weight= uses LocalizedNumber.parse.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:15:1\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb..amount_in when currency is EUR returns the value in the EUR.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:22:2:1\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb..amount_in when currency is USD returns the value in the USD.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:22:3:1\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb..amount_in when currency is not specified returns nil.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:22:1:1\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.after create #create_default_stock_item existing variant creates a default stock item.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:4:3:1\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.after create #create_default_stock_item when not tracking inventory creates a default stock item.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:4:1:1\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.after create #create_default_stock_item when not tracking inventory when variant is created along with a stock item does not create an another stock item.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:4:1:2:1\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.after create #create_default_stock_item when tracking inventory does not create a default stock item.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:4:2:1\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.after create mark_master_out_of_stock when a variant is created example at ./spec/models/spree/variant_spec.rb:143.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:3:2:1\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.after create mark_master_out_of_stock when product is created without variants but with stock example at ./spec/models/spree/variant_spec.rb:137.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:3:1:1\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.after create propagate to stock items.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.after create stock location has disable propagate all variants propagate to stock items.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2:1\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.after_commit :remove_prices_from_master_variant removes prices from master when variant with price is created.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.after_commit :remove_stock_items_from_master_variant removes stock items from master when variant is created.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.after_update_commit :handle_track_inventory_change when not tracking inventory updates stock item count on hand to 0.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1:1\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.after_update_commit :handle_track_inventory_change when tracking inventory keeps stock items.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2:1\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.behaves like default_price #default_price delegates price.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.behaves like default_price #default_price delegates price_including_vat_for.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:3\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.behaves like default_price #default_price example at ./spec/support/concerns/default_price.rb:23.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.behaves like default_price .has_one :default_price has a dependent destroy.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.behaves like default_price .has_one :default_price has the class name of Spree::Price.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.behaves like default_price .has_one :default_price is a has one association.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.behaves like default_price example at ./spec/support/concerns/default_price.rb:36.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.behaves like lifecycle events lifecycle events variant.created publishes created event when record is created.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1:1\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.behaves like lifecycle events lifecycle events variant.deleted publishes deleted event when record is deleted.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:3:1\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.behaves like lifecycle events lifecycle events variant.updated publishes updated event when record is updated.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:2:1\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.behaves like metadata can query records by metadata properties.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:10\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:10.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:5\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:11.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:6\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:4.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:5.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:7.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.behaves like metadata example at ./lib/spree/testing_support/metadata.rb:8.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:4\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.behaves like metadata reads data as not symbolized keys.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:8\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.behaves like metadata reads data as symbolized keys.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:7\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.counter cache variant_count on product correctly counts multiple variants.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:55:1:4\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.counter cache variant_count on product decrements when a variant is destroyed.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:55:1:2\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.counter cache variant_count on product does not count master variant.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:55:1:3\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.counter cache variant_count on product increments when a variant is created.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:55:1:1\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.deleted_at scope has a price if deleted.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:36:1\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.descriptive_name master variant returns name with Master identifier.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:27:1:1\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.descriptive_name variant returns options text with name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:27:2:1\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.exchange_name master variant returns name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:25:1:1\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.exchange_name master variant returns name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:26:1:1\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.exchange_name variant returns options text.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:25:2:1\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.exchange_name variant returns options text.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:26:2:1\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.in_stock scope returns all in stock variants.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:38:1\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.product has other variants option value accessors does not duplicate associated option values when set multiple times.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1:2\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.product has other variants option value accessors sets option value.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1:1\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.product has other variants product has other variants option value accessors does not duplicate associated option values when set multiple times.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2:1:2\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.product has other variants product has other variants option value accessors sets option value.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2:1:1\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.scope .active example at ./spec/models/spree/variant_spec.rb:396.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:5:4\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.scope .active finds not_deleted variants.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:5:2\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.scope .active finds not_discontinued variants.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:5:1\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.scope .active finds variants for_currency_and_available_price_amount.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:5:3\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.scope .eligible when only master variants returns all of them.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1:1:1\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.scope .eligible when product has more than 1 variant filters master variant out.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1:2:1\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.scope .for_currency_and_available_price_amount when currency parameter is nil example at ./spec/models/spree/variant_spec.rb:367.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:4:3:1\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.scope .for_currency_and_available_price_amount when price with currency not present when price do not have amount example at ./spec/models/spree/variant_spec.rb:358.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:4:2:2:1\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.scope .for_currency_and_available_price_amount when price with currency not present when price has amount example at ./spec/models/spree/variant_spec.rb:348.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:4:2:1:1\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.scope .for_currency_and_available_price_amount when price with currency present when price do not have amount example at ./spec/models/spree/variant_spec.rb:338.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:4:1:2:1\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.scope .for_currency_and_available_price_amount when price with currency present when price has amount example at ./spec/models/spree/variant_spec.rb:328.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:4:1:1:1\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.scope .not_deleted when deleted example at ./spec/models/spree/variant_spec.rb:311.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:3:1:1\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.scope .not_deleted when not deleted example at ./spec/models/spree/variant_spec.rb:317.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:3:2:1\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.scope .not_discontinued when discontinue_on not present example at ./spec/models/spree/variant_spec.rb:303.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:2:3:1\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.scope .not_discontinued when discontinued example at ./spec/models/spree/variant_spec.rb:291.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:2:1:1\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.scope .not_discontinued when not discontinued example at ./spec/models/spree/variant_spec.rb:297.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:2:2:1\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.set_position sets variant position after creation.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:28:1\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.sorting responds to set_list_position.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.stock movements builds out collection just fine through stock items.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:37:1\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.touching clears the in_stock cache key.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:34:2\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.touching updates a product.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:34:1\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.touching when unlinking an option value touches variant.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:34:3:1\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.validate :check_price when variant has a default price keeps the default price.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:44:1:1\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.validate :check_price when variant has a default price when the default price is invalid infers price from the default variant.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:44:1:2:1\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.validate :check_price when variant has a default price when the default price is invalid when there is no default variant adds an error.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:44:1:2:2:1\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.validate :check_price when variant has no default price infers price from the default variant.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:44:2:1\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.validate :check_price when variant has no default price when there is no default variant adds an error.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:44:2:2:1\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.validate :check_price when variant has prices keeps the prices.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:44:3:1\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.validations SKU default behaviour invalid with the same SKU.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3:2:1:1\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.validations SKU default behaviour valid with different SKU.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3:2:2:1\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.validations SKU default behaviour valid without SKU.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3:2:2:2\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.validations SKU disabled validation valid with the same SKU.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3:3:1:1\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.validations SKU disabled validation valid without SKU.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3:3:1:2\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.validations SKU normalizes preserves empty string (does not convert to nil).{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3:1:2\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.validations SKU normalizes strips leading and trailing whitespace.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3:1:1\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.validations validates price is 0.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.validations validates price is greater than 0.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.validations validates the dimensions unit.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:4\"}}","rspec.Spree::Variant at ./spec/models/spree/variant_spec.rb.validations validates the weight unit.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:5\"}}","rspec.Spree::VariantPresenter at ./spec/presenters/spree/variant_presenter_spec.rb.#call generates request body without raising any errors.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","rspec.Spree::VariantPresenter at ./spec/presenters/spree/variant_presenter_spec.rb.#call returns an array of variant with option_values and images.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::Variants::OptionTypesFinder at ./spec/finders/spree/variants/option_types_finder_spec.rb.#execute returns ordered Option Types and Option Values.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::Variants::OptionTypesFinder at ./spec/finders/spree/variants/option_types_finder_spec.rb.#execute when Option Type is color returns color Option Type first.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","rspec.Spree::Variants::OptionTypesPresenter at ./spec/presenters/spree/variants/option_types_presenter_spec.rb.#default_variant default variant of product backorderable returns the same Variant as Product#default_variant.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","rspec.Spree::Variants::OptionTypesPresenter at ./spec/presenters/spree/variants/option_types_presenter_spec.rb.#default_variant default variant of product in stock returns the same Variant as Product#default_variant.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","rspec.Spree::Variants::OptionTypesPresenter at ./spec/presenters/spree/variants/option_types_presenter_spec.rb.#default_variant returns first Variant of first Option Value of first Option Type.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","rspec.Spree::Variants::OptionTypesPresenter at ./spec/presenters/spree/variants/option_types_presenter_spec.rb.#default_variant with backorderable Variant returns first backorderable Variant.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1\"}}","rspec.Spree::Variants::OptionTypesPresenter at ./spec/presenters/spree/variants/option_types_presenter_spec.rb.#default_variant with in-stock Variant returns first in-stock Variant.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","rspec.Spree::Variants::OptionTypesPresenter at ./spec/presenters/spree/variants/option_types_presenter_spec.rb.#default_variant without Option Types example at ./spec/presenters/spree/variants/option_types_presenter_spec.rb:85.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5:1\"}}","rspec.Spree::Variants::OptionTypesPresenter at ./spec/presenters/spree/variants/option_types_presenter_spec.rb.#options returns serialized options for Option Types and Option Values.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.Spree::Variants::OptionTypesPresenter at ./spec/presenters/spree/variants/option_types_presenter_spec.rb.#options without Option Types example at ./spec/presenters/spree/variants/option_types_presenter_spec.rb:166.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","rspec.Spree::Variants::OptionsPresenter at ./spec/presenters/spree/variants/options_presenter_spec.rb.#to_hash when variant has no option values returns empty hash.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","rspec.Spree::Variants::OptionsPresenter at ./spec/presenters/spree/variants/options_presenter_spec.rb.#to_hash when variant has option values returns valid hash.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","rspec.Spree::Variants::OptionsPresenter at ./spec/presenters/spree/variants/options_presenter_spec.rb.#to_sentence orders by bar than foo.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::Variants::RemoveFromIncompleteOrdersJob at ./spec/jobs/spree/variants/remove_from_incomplete_orders_job_spec.rb.enqueues the removal of variants line items.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","rspec.Spree::Variants::RemoveLineItemJob at ./spec/jobs/spree/variants/remove_line_item_job_spec.rb.removes the line item from the order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","rspec.Spree::Variants::RemoveLineItems at ./spec/services/spree/variants/remove_line_items_spec.rb.#call when all order states allows to remove line items schedules a Spree::LineItems::RemoveFromOrderJob for each order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","rspec.Spree::Variants::RemoveLineItems at ./spec/services/spree/variants/remove_line_items_spec.rb.#call when none of order states allow to remove line items does not schedule a Spree::LineItems::RemoveFromOrderJob for each order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","rspec.Spree::Variants::RemoveLineItems at ./spec/services/spree/variants/remove_line_items_spec.rb.#call when some of order states allow to remove line items does not schedule a Spree::LineItems::RemoveFromOrderJob for each cancelled order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:2\"}}","rspec.Spree::Variants::RemoveLineItems at ./spec/services/spree/variants/remove_line_items_spec.rb.#call when some of order states allow to remove line items schedules a Spree::LineItems::RemoveFromOrderJob for each pending order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","rspec.Spree::Variants::TouchJob at ./spec/jobs/spree/variants/touch_job_spec.rb.handles empty array.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2\"}}","rspec.Spree::Variants::TouchJob at ./spec/jobs/spree/variants/touch_job_spec.rb.touches all variants with the given IDs.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1\"}}","rspec.Spree::Variants::VisibleFinder at ./spec/finders/spree/variants/visible_finder_spec.rb.#execute returns variants ordered by option value position for passed currency.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Spree::VatPriceCalculation at ./spec/models/spree/concerns/vat_price_calculation_spec.rb.#gross_amount with a default zone set and zone equal to the default zone does not call 'TaxRate.included_tax_amount_for'.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1:1\"}}","rspec.Spree::VatPriceCalculation at ./spec/models/spree/concerns/vat_price_calculation_spec.rb.#gross_amount with a default zone set and zone not equal to default zone calls TaxRate.included_tax_amount_for two times.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:2:1\"}}","rspec.Spree::VatPriceCalculation at ./spec/models/spree/concerns/vat_price_calculation_spec.rb.#gross_amount with no default zone set does not call TaxRate.included_tax_amount_for.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","rspec.Spree::VatPriceCalculation at ./spec/models/spree/concerns/vat_price_calculation_spec.rb.#gross_amount with no zone given does not call TaxRate.included_tax_amount_for.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","rspec.Spree::Wallet::CreatePaymentSource at ./spec/services/spree/wallet/create_payment_source_spec.rb.invalid attributes example at ./spec/services/spree/wallet/create_payment_source_spec.rb:81.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","rspec.Spree::Wallet::CreatePaymentSource at ./spec/services/spree/wallet/create_payment_source_spec.rb.invalid attributes example at ./spec/services/spree/wallet/create_payment_source_spec.rb:82.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","rspec.Spree::Wallet::CreatePaymentSource at ./spec/services/spree/wallet/create_payment_source_spec.rb.missing attributes example at ./spec/services/spree/wallet/create_payment_source_spec.rb:65.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.Spree::Wallet::CreatePaymentSource at ./spec/services/spree/wallet/create_payment_source_spec.rb.missing attributes example at ./spec/services/spree/wallet/create_payment_source_spec.rb:66.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","rspec.Spree::Wallet::CreatePaymentSource at ./spec/services/spree/wallet/create_payment_source_spec.rb.valid attributes with source attributes assigns payment method.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3\"}}","rspec.Spree::Wallet::CreatePaymentSource at ./spec/services/spree/wallet/create_payment_source_spec.rb.valid attributes with source attributes creates new payment source record.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","rspec.Spree::Wallet::CreatePaymentSource at ./spec/services/spree/wallet/create_payment_source_spec.rb.valid attributes with source attributes returns newly created record in .value.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2\"}}","rspec.Spree::Wallet::CreatePaymentSource at ./spec/services/spree/wallet/create_payment_source_spec.rb.valid attributes with source attributes with user assigns payment method.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:4:3\"}}","rspec.Spree::Wallet::CreatePaymentSource at ./spec/services/spree/wallet/create_payment_source_spec.rb.valid attributes with source attributes with user assigns user example at ./spec/services/spree/wallet/create_payment_source_spec.rb:56.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:4:4:1\"}}","rspec.Spree::Wallet::CreatePaymentSource at ./spec/services/spree/wallet/create_payment_source_spec.rb.valid attributes with source attributes with user creates new payment source record.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:4:1\"}}","rspec.Spree::Wallet::CreatePaymentSource at ./spec/services/spree/wallet/create_payment_source_spec.rb.valid attributes with source attributes with user returns newly created record in .value.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:4:2\"}}","rspec.Spree::WebhookDelivery at ./spec/models/spree/webhook_delivery_spec.rb.#complete! with connection error records the connection error.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:4:1\"}}","rspec.Spree::WebhookDelivery at ./spec/models/spree/webhook_delivery_spec.rb.#complete! with failed HTTP response marks the delivery as failed for 4xx responses.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1\"}}","rspec.Spree::WebhookDelivery at ./spec/models/spree/webhook_delivery_spec.rb.#complete! with failed HTTP response marks the delivery as failed for 5xx responses.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:2\"}}","rspec.Spree::WebhookDelivery at ./spec/models/spree/webhook_delivery_spec.rb.#complete! with successful HTTP response marks 201 as successful.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:2\"}}","rspec.Spree::WebhookDelivery at ./spec/models/spree/webhook_delivery_spec.rb.#complete! with successful HTTP response marks 204 as successful.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:3\"}}","rspec.Spree::WebhookDelivery at ./spec/models/spree/webhook_delivery_spec.rb.#complete! with successful HTTP response marks the delivery as successful.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:1\"}}","rspec.Spree::WebhookDelivery at ./spec/models/spree/webhook_delivery_spec.rb.#complete! with timeout error records the timeout error.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3:1\"}}","rspec.Spree::WebhookDelivery at ./spec/models/spree/webhook_delivery_spec.rb.#failed? returns false when success is nil.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3\"}}","rspec.Spree::WebhookDelivery at ./spec/models/spree/webhook_delivery_spec.rb.#failed? returns false when success is true.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2\"}}","rspec.Spree::WebhookDelivery at ./spec/models/spree/webhook_delivery_spec.rb.#failed? returns true when success is false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1\"}}","rspec.Spree::WebhookDelivery at ./spec/models/spree/webhook_delivery_spec.rb.#pending? returns false when delivered_at is present.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2\"}}","rspec.Spree::WebhookDelivery at ./spec/models/spree/webhook_delivery_spec.rb.#pending? returns true when delivered_at is nil.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1\"}}","rspec.Spree::WebhookDelivery at ./spec/models/spree/webhook_delivery_spec.rb.#successful? returns false when success is false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","rspec.Spree::WebhookDelivery at ./spec/models/spree/webhook_delivery_spec.rb.#successful? returns false when success is nil.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3\"}}","rspec.Spree::WebhookDelivery at ./spec/models/spree/webhook_delivery_spec.rb.#successful? returns true when success is true.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.Spree::WebhookDelivery at ./spec/models/spree/webhook_delivery_spec.rb.scopes .failed returns only failed deliveries.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","rspec.Spree::WebhookDelivery at ./spec/models/spree/webhook_delivery_spec.rb.scopes .for_event returns deliveries for the specified event.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5:1\"}}","rspec.Spree::WebhookDelivery at ./spec/models/spree/webhook_delivery_spec.rb.scopes .pending returns only pending deliveries.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","rspec.Spree::WebhookDelivery at ./spec/models/spree/webhook_delivery_spec.rb.scopes .recent orders by created_at desc.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1\"}}","rspec.Spree::WebhookDelivery at ./spec/models/spree/webhook_delivery_spec.rb.scopes .successful returns only successful deliveries.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","rspec.Spree::WebhookEndpoint at ./spec/models/spree/webhook_endpoint_spec.rb.#subscribed_events with empty subscriptions returns wildcard.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:1\"}}","rspec.Spree::WebhookEndpoint at ./spec/models/spree/webhook_endpoint_spec.rb.#subscribed_events with specific subscriptions returns the subscriptions.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1\"}}","rspec.Spree::WebhookEndpoint at ./spec/models/spree/webhook_endpoint_spec.rb.#subscribed_to? with empty subscriptions returns true for any event.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1\"}}","rspec.Spree::WebhookEndpoint at ./spec/models/spree/webhook_endpoint_spec.rb.#subscribed_to? with mixed subscriptions does not match non-subscribed events.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:5:3\"}}","rspec.Spree::WebhookEndpoint at ./spec/models/spree/webhook_endpoint_spec.rb.#subscribed_to? with mixed subscriptions matches exact events.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:5:2\"}}","rspec.Spree::WebhookEndpoint at ./spec/models/spree/webhook_endpoint_spec.rb.#subscribed_to? with mixed subscriptions matches pattern events.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:5:1\"}}","rspec.Spree::WebhookEndpoint at ./spec/models/spree/webhook_endpoint_spec.rb.#subscribed_to? with pattern subscriptions does not match events outside the pattern.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:4:2\"}}","rspec.Spree::WebhookEndpoint at ./spec/models/spree/webhook_endpoint_spec.rb.#subscribed_to? with pattern subscriptions matches events that fit the pattern.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:4:1\"}}","rspec.Spree::WebhookEndpoint at ./spec/models/spree/webhook_endpoint_spec.rb.#subscribed_to? with specific subscriptions returns false for non-subscribed events.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3:2\"}}","rspec.Spree::WebhookEndpoint at ./spec/models/spree/webhook_endpoint_spec.rb.#subscribed_to? with specific subscriptions returns true for subscribed events.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:3:1\"}}","rspec.Spree::WebhookEndpoint at ./spec/models/spree/webhook_endpoint_spec.rb.#subscribed_to? with wildcard subscription returns true for any event.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1\"}}","rspec.Spree::WebhookEndpoint at ./spec/models/spree/webhook_endpoint_spec.rb.callbacks before_create :generate_secret_key does not overwrite existing secret key.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:2\"}}","rspec.Spree::WebhookEndpoint at ./spec/models/spree/webhook_endpoint_spec.rb.callbacks before_create :generate_secret_key generates a secret key on create.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","rspec.Spree::WebhookEndpoint at ./spec/models/spree/webhook_endpoint_spec.rb.scopes .active returns only active endpoints.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","rspec.Spree::WebhookEndpoint at ./spec/models/spree/webhook_endpoint_spec.rb.scopes .inactive returns only inactive endpoints.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","rspec.Spree::WebhookEndpoint at ./spec/models/spree/webhook_endpoint_spec.rb.soft delete soft deletes the record.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1\"}}","rspec.Spree::WebhookEndpoint at ./spec/models/spree/webhook_endpoint_spec.rb.validations active inclusion accepts false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2\"}}","rspec.Spree::WebhookEndpoint at ./spec/models/spree/webhook_endpoint_spec.rb.validations active inclusion accepts true.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","rspec.Spree::WebhookEndpoint at ./spec/models/spree/webhook_endpoint_spec.rb.validations active inclusion rejects nil.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:3\"}}","rspec.Spree::WebhookEndpoint at ./spec/models/spree/webhook_endpoint_spec.rb.validations url format accepts valid http urls.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2\"}}","rspec.Spree::WebhookEndpoint at ./spec/models/spree/webhook_endpoint_spec.rb.validations url format accepts valid https urls.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","rspec.Spree::WebhookEndpoint at ./spec/models/spree/webhook_endpoint_spec.rb.validations url format rejects ftp urls.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:4\"}}","rspec.Spree::WebhookEndpoint at ./spec/models/spree/webhook_endpoint_spec.rb.validations url format rejects invalid urls.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3\"}}","rspec.Spree::WishedItem at ./spec/models/spree/wished_item_spec.rb..quantity .display_price example at ./spec/models/spree/wished_item_spec.rb:52.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:10:1\"}}","rspec.Spree::WishedItem at ./spec/models/spree/wished_item_spec.rb..quantity .display_total example at ./spec/models/spree/wished_item_spec.rb:56.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:11:1\"}}","rspec.Spree::WishedItem at ./spec/models/spree/wished_item_spec.rb..quantity .price example at ./spec/models/spree/wished_item_spec.rb:44.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:8:1\"}}","rspec.Spree::WishedItem at ./spec/models/spree/wished_item_spec.rb..quantity .total example at ./spec/models/spree/wished_item_spec.rb:48.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:9:1\"}}","rspec.Spree::WishedItem at ./spec/models/spree/wished_item_spec.rb..quantity example at ./spec/models/spree/wished_item_spec.rb:13.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.Spree::WishedItem at ./spec/models/spree/wished_item_spec.rb..quantity example at ./spec/models/spree/wished_item_spec.rb:14.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","rspec.Spree::WishedItem at ./spec/models/spree/wished_item_spec.rb..quantity validates numericality must be greater than 0.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:6\"}}","rspec.Spree::WishedItem at ./spec/models/spree/wished_item_spec.rb..quantity validates numericality of quantity.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:5\"}}","rspec.Spree::WishedItem at ./spec/models/spree/wished_item_spec.rb..quantity validates presence of variant.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:4\"}}","rspec.Spree::WishedItem at ./spec/models/spree/wished_item_spec.rb..quantity validates presence of wishlist.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3\"}}","rspec.Spree::WishedItem at ./spec/models/spree/wished_item_spec.rb..quantity when wished_item is already associated with the wishlist validates uniqueness of variant within scope of wishlist.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:7:1\"}}","rspec.Spree::WishedItem at ./spec/models/spree/wished_item_spec.rb.behaves like lifecycle events lifecycle events wished_item.created publishes created event when record is created.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","rspec.Spree::WishedItem at ./spec/models/spree/wished_item_spec.rb.behaves like lifecycle events lifecycle events wished_item.deleted publishes deleted event when record is deleted.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:1\"}}","rspec.Spree::WishedItem at ./spec/models/spree/wished_item_spec.rb.behaves like lifecycle events lifecycle events wished_item.updated publishes updated event when record is updated.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","rspec.Spree::Wishlist at ./spec/models/spree/wishlist_spec.rb.#destroy deletes associated wished variants.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1\"}}","rspec.Spree::Wishlist at ./spec/models/spree/wishlist_spec.rb.#product_ids returns the product ids.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1\"}}","rspec.Spree::Wishlist at ./spec/models/spree/wishlist_spec.rb.#variant_ids returns the variant ids.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:13:1\"}}","rspec.Spree::Wishlist at ./spec/models/spree/wishlist_spec.rb.#wished_items_count returns the wished items count.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:12:1\"}}","rspec.Spree::Wishlist at ./spec/models/spree/wishlist_spec.rb..ensure_default_exists_and_is_unique when user creates a new default store does not alter the state of wishlist belonging to other users.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1:3\"}}","rspec.Spree::Wishlist at ./spec/models/spree/wishlist_spec.rb..ensure_default_exists_and_is_unique when user creates a new default store does not alter the state of wishlist belonging to same users, but in other stores.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1:4\"}}","rspec.Spree::Wishlist at ./spec/models/spree/wishlist_spec.rb..ensure_default_exists_and_is_unique when user creates a new default store preserves is_default: true for new wishlist.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1:1\"}}","rspec.Spree::Wishlist at ./spec/models/spree/wishlist_spec.rb..ensure_default_exists_and_is_unique when user creates a new default store sets is_default: false on the wishlist that was the previous default.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1:2\"}}","rspec.Spree::Wishlist at ./spec/models/spree/wishlist_spec.rb..get_by_param returns nil when not found.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:2\"}}","rspec.Spree::Wishlist at ./spec/models/spree/wishlist_spec.rb..get_by_param returns the wishlist of the token.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1\"}}","rspec.Spree::Wishlist at ./spec/models/spree/wishlist_spec.rb..include? is true if the wishlist includes the specified variant.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","rspec.Spree::Wishlist at ./spec/models/spree/wishlist_spec.rb..to_param returns the wishlists token.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1\"}}","rspec.Spree::Wishlist at ./spec/models/spree/wishlist_spec.rb.has a valid factory.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2\"}}","rspec.Spree::Wishlist at ./spec/models/spree/wishlist_spec.rb.lifecycle events wishlist.created publishes created event when record is created.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","rspec.Spree::Wishlist at ./spec/models/spree/wishlist_spec.rb.lifecycle events wishlist.deleted publishes deleted event when record is destroyed.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","rspec.Spree::Wishlist at ./spec/models/spree/wishlist_spec.rb.lifecycle events wishlist.updated publishes updated event when record is updated.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","rspec.Spree::Wishlist at ./spec/models/spree/wishlist_spec.rb.validates presence of name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3\"}}","rspec.Spree::Wishlist at ./spec/models/spree/wishlist_spec.rb.validates presence of store.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4\"}}","rspec.Spree::Wishlist at ./spec/models/spree/wishlist_spec.rb.validates presence of user.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5\"}}","rspec.Spree::Zone at ./spec/models/spree/zone_spec.rb.#contains? when both zones are the same zone is true.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:3:1\"}}","rspec.Spree::Zone at ./spec/models/spree/zone_spec.rb.#contains? when checking countries against countries when all members are included in the zone we check against is true.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:4:1:1\"}}","rspec.Spree::Zone at ./spec/models/spree/zone_spec.rb.#contains? when checking countries against countries when none of the members are included in the zone we check against is false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:4:3:1\"}}","rspec.Spree::Zone at ./spec/models/spree/zone_spec.rb.#contains? when checking countries against countries when some members are included in the zone we check against is false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:4:2:1\"}}","rspec.Spree::Zone at ./spec/models/spree/zone_spec.rb.#contains? when checking country against state is false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:6:1\"}}","rspec.Spree::Zone at ./spec/models/spree/zone_spec.rb.#contains? when checking state against country when all states contained in one of the countries we check against is true.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:7:1:1\"}}","rspec.Spree::Zone at ./spec/models/spree/zone_spec.rb.#contains? when checking state against country when none of the states contained in any of the countries we check against is false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:7:3:1\"}}","rspec.Spree::Zone at ./spec/models/spree/zone_spec.rb.#contains? when checking state against country when some states contained in one of the countries we check against is false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:7:2:1\"}}","rspec.Spree::Zone at ./spec/models/spree/zone_spec.rb.#contains? when checking states against states when all members are included in the zone we check against is true.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:5:1:1\"}}","rspec.Spree::Zone at ./spec/models/spree/zone_spec.rb.#contains? when checking states against states when none of the members are included in the zone we check against is false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:5:3:1\"}}","rspec.Spree::Zone at ./spec/models/spree/zone_spec.rb.#contains? when checking states against states when some members are included in the zone we check against is false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:5:2:1\"}}","rspec.Spree::Zone at ./spec/models/spree/zone_spec.rb.#contains? when the source has no members is false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:2:1\"}}","rspec.Spree::Zone at ./spec/models/spree/zone_spec.rb.#contains? when the target has no members is false.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1:1\"}}","rspec.Spree::Zone at ./spec/models/spree/zone_spec.rb.#country_list when zone consists of countries returns a list of countries.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1:1\"}}","rspec.Spree::Zone at ./spec/models/spree/zone_spec.rb.#country_list when zone consists of states returns a list of countries.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2:1\"}}","rspec.Spree::Zone at ./spec/models/spree/zone_spec.rb.#include? when zone is country type is true.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","rspec.Spree::Zone at ./spec/models/spree/zone_spec.rb.#include? when zone is state type is true.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","rspec.Spree::Zone at ./spec/models/spree/zone_spec.rb.#kind returns whatever value you set.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1\"}}","rspec.Spree::Zone at ./spec/models/spree/zone_spec.rb.#kind when the zone consists of country zone members returns the kind of zone member.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2:1\"}}","rspec.Spree::Zone at ./spec/models/spree/zone_spec.rb.#match callbacks #nullify_checkout_zone is expected to nullify checkout zone.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:2:1\"}}","rspec.Spree::Zone at ./spec/models/spree/zone_spec.rb.#match callbacks #remove_previous_default is expected to make previous default tax zones to non default tax zones.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1:1\"}}","rspec.Spree::Zone at ./spec/models/spree/zone_spec.rb.#match scopes .remove_previous_default is expected to include zone with default tax.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","rspec.Spree::Zone at ./spec/models/spree/zone_spec.rb.#match scopes .remove_previous_default is expected to not include zone with default tax.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:2\"}}","rspec.Spree::Zone at ./spec/models/spree/zone_spec.rb.#match when there are no qualifying zones returns nil.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6:1\"}}","rspec.Spree::Zone at ./spec/models/spree/zone_spec.rb.#match when there are two qualified zones with different member types returns the zone with the more specific member type.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5:1\"}}","rspec.Spree::Zone at ./spec/models/spree/zone_spec.rb.#match when there are two qualified zones with same member type when both zones have the same number of members returns the zone that was created first.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:1:1\"}}","rspec.Spree::Zone at ./spec/models/spree/zone_spec.rb.#match when there are two qualified zones with same member type when one of the zones has fewer members returns the zone with fewer members.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4:2:1\"}}","rspec.Spree::Zone at ./spec/models/spree/zone_spec.rb.#match when there is only one qualifying zone returns the qualifying zone.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3:1\"}}","rspec.Spree::Zone at ./spec/models/spree/zone_spec.rb.#potential_matching_zones finding potential matches for a country zone only returns each zone once.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1:2\"}}","rspec.Spree::Zone at ./spec/models/spree/zone_spec.rb.#potential_matching_zones finding potential matches for a country zone will find all zones with countries covered by the passed in zone.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1:1\"}}","rspec.Spree::Zone at ./spec/models/spree/zone_spec.rb.#potential_matching_zones finding potential matches for a state zone only returns each zone once.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2:3\"}}","rspec.Spree::Zone at ./spec/models/spree/zone_spec.rb.#potential_matching_zones finding potential matches for a state zone will find all zones which share states covered by passed in zone.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2:1\"}}","rspec.Spree::Zone at ./spec/models/spree/zone_spec.rb.#potential_matching_zones finding potential matches for a state zone will find zones that share countries with any states of the passed in zone.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2:2\"}}","rspec.Spree::Zone at ./spec/models/spree/zone_spec.rb.#save when a zone member country is added to an existing zone consisting of state members removes existing country members.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2:1\"}}","rspec.Spree::Zone at ./spec/models/spree/zone_spec.rb.#save when default_tax is true clears previous default tax zone.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1:1\"}}","rspec.Spree::Zone at ./spec/models/spree/zone_spec.rb.#state_list has countries associated returns states associated to that countries.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1:1\"}}","rspec.Spree::Zone at ./spec/models/spree/zone_spec.rb.#state_list has states associated returns that states.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:2:1\"}}","rspec.Spree::Zone at ./spec/models/spree/zone_spec.rb.#state_list_for has countries associated returns states associated with the country.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:1:1\"}}","rspec.Spree::Zone at ./spec/models/spree/zone_spec.rb.#state_list_for has states associated returns states associated with the country.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:11:2:1\"}}","rspec.Spree::Zone at ./spec/models/spree/zone_spec.rb..default_tax when there is a default tax zone specified is the correct zone.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1\"}}","rspec.Spree::Zone at ./spec/models/spree/zone_spec.rb..default_tax when there is no default tax zone specified is nil.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1\"}}","rspec.Spree::Zone at ./spec/models/spree/zone_spec.rb.state and country associations has countries associated can access associated countries.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1:1\"}}","rspec.Spree::Zone at ./spec/models/spree/zone_spec.rb.state and country associations has states associated can access associated states.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:2:1\"}}","rspec.Spree::ZoneMember at ./spec/models/spree/zone_member_spec.rb.scopes .defunct_without_kind zoneable is absent example at ./spec/models/spree/zone_member_spec.rb:26.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:3:1\"}}","rspec.Spree::ZoneMember at ./spec/models/spree/zone_member_spec.rb.scopes .defunct_without_kind zoneable is not of defunct kind example at ./spec/models/spree/zone_member_spec.rb:20.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2:1\"}}","rspec.Spree::ZoneMember at ./spec/models/spree/zone_member_spec.rb.scopes .defunct_without_kind zoneable is present and is of defunct kind example at ./spec/models/spree/zone_member_spec.rb:14.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1:1\"}}","rspec.StoreCreditCategory at ./spec/models/spree/store_credit_category_spec.rb.callbacks store credit category is not used in store credit can delete store credit category.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","rspec.StoreCreditCategory at ./spec/models/spree/store_credit_category_spec.rb.callbacks store credit category is used in store credit can not delete store credit category.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","rspec.StoreCreditEvent at ./spec/models/spree/store_credit_event_spec.rb.#allocation? action is allocation example at ./spec/models/spree/store_credit_event_spec.rb:122.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:1:1\"}}","rspec.StoreCreditEvent at ./spec/models/spree/store_credit_event_spec.rb.#allocation? action is not allocation example at ./spec/models/spree/store_credit_event_spec.rb:127.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6:2:1\"}}","rspec.StoreCreditEvent at ./spec/models/spree/store_credit_event_spec.rb.#authorized? action is authorize example at ./spec/models/spree/store_credit_event_spec.rb:186.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:1:1\"}}","rspec.StoreCreditEvent at ./spec/models/spree/store_credit_event_spec.rb.#authorized? action is not authorize example at ./spec/models/spree/store_credit_event_spec.rb:191.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:10:2:1\"}}","rspec.StoreCreditEvent at ./spec/models/spree/store_credit_event_spec.rb.#captured? action is capture example at ./spec/models/spree/store_credit_event_spec.rb:154.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1:1\"}}","rspec.StoreCreditEvent at ./spec/models/spree/store_credit_event_spec.rb.#captured? action is not capture example at ./spec/models/spree/store_credit_event_spec.rb:159.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2:1\"}}","rspec.StoreCreditEvent at ./spec/models/spree/store_credit_event_spec.rb.#credit? action is credit example at ./spec/models/spree/store_credit_event_spec.rb:138.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:1:1\"}}","rspec.StoreCreditEvent at ./spec/models/spree/store_credit_event_spec.rb.#credit? action is not credit example at ./spec/models/spree/store_credit_event_spec.rb:143.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7:2:1\"}}","rspec.StoreCreditEvent at ./spec/models/spree/store_credit_event_spec.rb.#display_action allocation event returns added.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:3:1\"}}","rspec.StoreCreditEvent at ./spec/models/spree/store_credit_event_spec.rb.#display_action authorize event returns authorized.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","rspec.StoreCreditEvent at ./spec/models/spree/store_credit_event_spec.rb.#display_action capture event returns used.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","rspec.StoreCreditEvent at ./spec/models/spree/store_credit_event_spec.rb.#display_action credit event returns credit.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:5:1\"}}","rspec.StoreCreditEvent at ./spec/models/spree/store_credit_event_spec.rb.#display_action void event returns credit.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:4:1\"}}","rspec.StoreCreditEvent at ./spec/models/spree/store_credit_event_spec.rb.#display_amount returns a Spree::Money instance.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.StoreCreditEvent at ./spec/models/spree/store_credit_event_spec.rb.#display_amount uses the events amount attribute.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","rspec.StoreCreditEvent at ./spec/models/spree/store_credit_event_spec.rb.#display_user_total_amount returns a Spree::Money instance.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.StoreCreditEvent at ./spec/models/spree/store_credit_event_spec.rb.#display_user_total_amount uses the events user_total_amount attribute.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","rspec.StoreCreditEvent at ./spec/models/spree/store_credit_event_spec.rb.#order there is an associated payment with the event returns the order associated with the payment.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:2:1\"}}","rspec.StoreCreditEvent at ./spec/models/spree/store_credit_event_spec.rb.#order there is no associated payment with the event returns nil.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4:1:1\"}}","rspec.StoreCreditEvent at ./spec/models/spree/store_credit_event_spec.rb.#store example at ./spec/models/spree/store_credit_event_spec.rb:112.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5:1\"}}","rspec.StoreCreditEvent at ./spec/models/spree/store_credit_event_spec.rb.#voided? action is not void example at ./spec/models/spree/store_credit_event_spec.rb:175.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:2:1\"}}","rspec.StoreCreditEvent at ./spec/models/spree/store_credit_event_spec.rb.#voided? action is void example at ./spec/models/spree/store_credit_event_spec.rb:170.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:9:1:1\"}}","rspec.Variant scopes at ./spec/models/spree/variant/scopes_spec.rb.#product_name_or_sku_cont does not return variants of products that do not match name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:3\"}}","rspec.Variant scopes at ./spec/models/spree/variant/scopes_spec.rb.#product_name_or_sku_cont does not return variants with not matching skus.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:4\"}}","rspec.Variant scopes at ./spec/models/spree/variant/scopes_spec.rb.#product_name_or_sku_cont return multiple variants based on variants sku.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:6\"}}","rspec.Variant scopes at ./spec/models/spree/variant/scopes_spec.rb.#product_name_or_sku_cont returns multiple variants based on products name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:5\"}}","rspec.Variant scopes at ./spec/models/spree/variant/scopes_spec.rb.#product_name_or_sku_cont returns no variants when products name does not match any.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:7\"}}","rspec.Variant scopes at ./spec/models/spree/variant/scopes_spec.rb.#product_name_or_sku_cont returns no variants when variants sku does not match any.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:8\"}}","rspec.Variant scopes at ./spec/models/spree/variant/scopes_spec.rb.#product_name_or_sku_cont returns variants based on products name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.Variant scopes at ./spec/models/spree/variant/scopes_spec.rb.#product_name_or_sku_cont returns variants based on variant sku.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","rspec.Variant scopes at ./spec/models/spree/variant/scopes_spec.rb.#product_name_or_sku_cont when using translations does not return variants of products that do not match name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:9:2\"}}","rspec.Variant scopes at ./spec/models/spree/variant/scopes_spec.rb.#product_name_or_sku_cont when using translations returns variants based on products translated name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:9:1\"}}","rspec.Variant scopes at ./spec/models/spree/variant/scopes_spec.rb.#search_by_product_name_or_sku does not return variants of products that do not match name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:3\"}}","rspec.Variant scopes at ./spec/models/spree/variant/scopes_spec.rb.#search_by_product_name_or_sku does not return variants with not matching skus.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:4\"}}","rspec.Variant scopes at ./spec/models/spree/variant/scopes_spec.rb.#search_by_product_name_or_sku return multiple variants based on variants sku.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:6\"}}","rspec.Variant scopes at ./spec/models/spree/variant/scopes_spec.rb.#search_by_product_name_or_sku returns multiple variants based on products name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:5\"}}","rspec.Variant scopes at ./spec/models/spree/variant/scopes_spec.rb.#search_by_product_name_or_sku returns no variants when products name does not match any.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:7\"}}","rspec.Variant scopes at ./spec/models/spree/variant/scopes_spec.rb.#search_by_product_name_or_sku returns no variants when variants sku does not match any.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:8\"}}","rspec.Variant scopes at ./spec/models/spree/variant/scopes_spec.rb.#search_by_product_name_or_sku returns variants based on products name.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.Variant scopes at ./spec/models/spree/variant/scopes_spec.rb.#search_by_product_name_or_sku returns variants based on variant sku.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:2\"}}","rspec.core:activate_products at ./spec/lib/tasks/core_spec.rb.#prerequisites example at ./spec/lib/tasks/core_spec.rb:9.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.core:activate_products at ./spec/lib/tasks/core_spec.rb.archived, make_active_at in the future -> archived.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5\"}}","rspec.core:activate_products at ./spec/lib/tasks/core_spec.rb.archived, make_active_at in the past -> archived.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4\"}}","rspec.core:activate_products at ./spec/lib/tasks/core_spec.rb.draft, make_active_at in the future -> draft.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3\"}}","rspec.core:activate_products at ./spec/lib/tasks/core_spec.rb.draft, make_active_at in the past -> active.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2\"}}","rspec.core:archive_products at ./spec/lib/tasks/core_spec.rb.#prerequisites example at ./spec/lib/tasks/core_spec.rb:70.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"3:1:1\"}}","rspec.core:archive_products at ./spec/lib/tasks/core_spec.rb.active, discontinue_on in the future -> active.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"3:5\"}}","rspec.core:archive_products at ./spec/lib/tasks/core_spec.rb.active, discontinue_on in the past -> archived.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"3:4\"}}","rspec.core:archive_products at ./spec/lib/tasks/core_spec.rb.draft, discontinue_on in the future -> draft.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"3:3\"}}","rspec.core:archive_products at ./spec/lib/tasks/core_spec.rb.draft, discontinue_on in the past -> archived.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"3:2\"}}","rspec.core:migrate_newsletter_subscribers at ./spec/lib/tasks/core_spec.rb.migrates newsletter subscribers.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"2:1\"}}","rspec.exchanges:charge_unreturned_items at ./spec/lib/tasks/exchanges_spec.rb.#prerequisites example at ./spec/lib/tasks/exchanges_spec.rb:7.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}","rspec.exchanges:charge_unreturned_items at ./spec/lib/tasks/exchanges_spec.rb.there are no unreturned items example at ./spec/lib/tasks/exchanges_spec.rb:11.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2:1\"}}","rspec.exchanges:charge_unreturned_items at ./spec/lib/tasks/exchanges_spec.rb.there are unreturned items fewer than the config allowed days have passed does not create a new order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:1:1\"}}","rspec.exchanges:charge_unreturned_items at ./spec/lib/tasks/exchanges_spec.rb.there are unreturned items more than the config allowed days have passed associates the exchanges inventory units with the new line items.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:4\"}}","rspec.exchanges:charge_unreturned_items at ./spec/lib/tasks/exchanges_spec.rb.there are unreturned items more than the config allowed days have passed associates the store of the original order with the exchange order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:8\"}}","rspec.exchanges:charge_unreturned_items at ./spec/lib/tasks/exchanges_spec.rb.there are unreturned items more than the config allowed days have passed authorizes the order for the full amount of the unreturned items including taxes.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:6\"}}","rspec.exchanges:charge_unreturned_items at ./spec/lib/tasks/exchanges_spec.rb.there are unreturned items more than the config allowed days have passed creates a new completed order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:1\"}}","rspec.exchanges:charge_unreturned_items at ./spec/lib/tasks/exchanges_spec.rb.there are unreturned items more than the config allowed days have passed creates line items on the order for the unreturned items.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:3\"}}","rspec.exchanges:charge_unreturned_items at ./spec/lib/tasks/exchanges_spec.rb.there are unreturned items more than the config allowed days have passed does not attempt to create a new order for the item more than once.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:7\"}}","rspec.exchanges:charge_unreturned_items at ./spec/lib/tasks/exchanges_spec.rb.there are unreturned items more than the config allowed days have passed it is unable to authorize the credit card raises an error with the order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:10:1\"}}","rspec.exchanges:charge_unreturned_items at ./spec/lib/tasks/exchanges_spec.rb.there are unreturned items more than the config allowed days have passed moves the shipment for the unreturned items to the new order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:2\"}}","rspec.exchanges:charge_unreturned_items at ./spec/lib/tasks/exchanges_spec.rb.there are unreturned items more than the config allowed days have passed the exchange inventory unit has been returned does not create a new order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:12:1\"}}","rspec.exchanges:charge_unreturned_items at ./spec/lib/tasks/exchanges_spec.rb.there are unreturned items more than the config allowed days have passed the exchange inventory unit is not shipped does not create a new order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:11:1\"}}","rspec.exchanges:charge_unreturned_items at ./spec/lib/tasks/exchanges_spec.rb.there are unreturned items more than the config allowed days have passed there is no card from the previous order attempts to use the user's default card.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:9:1\"}}","rspec.exchanges:charge_unreturned_items at ./spec/lib/tasks/exchanges_spec.rb.there are unreturned items more than the config allowed days have passed uses the credit card from the previous order.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3:2:5\"}}","rspec.i18n at ./spec/lib/i18n_spec.rb.#available_locales when SpreeI18n is defined returns all locales from the SpreeI18n.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:1\"}}","rspec.i18n at ./spec/lib/i18n_spec.rb.#available_locales when SpreeI18n is defined returns an array with the string \"en\" removed.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1:2\"}}","rspec.i18n at ./spec/lib/i18n_spec.rb.#available_locales when SpreeI18n is not defined returns just default locale.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2:1\"}}","rspec.i18n at ./spec/lib/i18n_spec.rb.missed + unused translations missed translations does not break when asked for multiple translations.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1:3\"}}","rspec.i18n at ./spec/lib/i18n_spec.rb.missed + unused translations missed translations does not log present translations.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1:2\"}}","rspec.i18n at ./spec/lib/i18n_spec.rb.missed + unused translations missed translations logs missing translations.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:1:1\"}}","rspec.i18n at ./spec/lib/i18n_spec.rb.missed + unused translations unused translations does not log used translations.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2:2\"}}","rspec.i18n at ./spec/lib/i18n_spec.rb.missed + unused translations unused translations logs translations that aren't used.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:8:2:1\"}}","rspec.i18n at ./spec/lib/i18n_spec.rb.prepends a string scope.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:4\"}}","rspec.i18n at ./spec/lib/i18n_spec.rb.prepends to an array scope.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:5\"}}","rspec.i18n at ./spec/lib/i18n_spec.rb.raise error without any context when using a path.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:3\"}}","rspec.i18n at ./spec/lib/i18n_spec.rb.returns reasonable string for missing translations.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:7\"}}","rspec.i18n at ./spec/lib/i18n_spec.rb.returns two translations.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:6\"}}","rspec.i18n at ./spec/lib/i18n_spec.rb.translates within the spree scope.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:2\"}}","rspec.product filters at ./spec/models/spree/product_filter_spec.rb.finds products filtered by brand can find products in the 'Nike' brand.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:2\"}}","rspec.product filters at ./spec/models/spree/product_filter_spec.rb.finds products filtered by brand does not attempt to call value method on Arel::Table.{\"arguments\":{},\"metadata\":{\"scoped_id\":\"1:1:1\"}}"],"testSuiteDurations":{"rspec":{" at ./core/spec/models/spree/user_spec.rb":{"source_file":"core/spec/models/spree/user_spec.rb","duration":{"p50":"0","p90":"0"}},"EmailValidator at ./spec/validators/email_validator_spec.rb":{"source_file":"core/spec/validators/email_validator_spec.rb","duration":{"p50":"291514324","p90":"335322854"}},"I18n at ./core/spec/i18n_spec.rb":{"source_file":"core/spec/i18n_spec.rb","duration":{"p50":"0","p90":"0"}},"I18n at ./spec/i18n_spec.rb":{"source_file":"core/spec/i18n_spec.rb","duration":{"p50":"2738495104","p90":"2966584242"}},"Order at ./core/spec/models/spree/order/gift_card_spec.rb":{"source_file":"core/spec/models/spree/order/gift_card_spec.rb","duration":{"p50":"0","p90":"0"}},"Order at ./core/spec/models/spree/order/store_credit_spec.rb":{"source_file":"core/spec/models/spree/order/store_credit_spec.rb","duration":{"p50":"0","p90":"0"}},"Order at ./spec/models/spree/order/gift_card_spec.rb":{"source_file":"core/spec/models/spree/order/gift_card_spec.rb","duration":{"p50":"824785881","p90":"1069698895"}},"Order at ./spec/models/spree/order/store_credit_spec.rb":{"source_file":"core/spec/models/spree/order/store_credit_spec.rb","duration":{"p50":"3344827773","p90":"3771297869"}},"Payment at ./core/spec/models/spree/payment/store_credit_spec.rb":{"source_file":"core/spec/models/spree/payment/store_credit_spec.rb","duration":{"p50":"0","p90":"0"}},"Payment at ./spec/models/spree/payment/store_credit_spec.rb":{"source_file":"core/spec/models/spree/payment/store_credit_spec.rb","duration":{"p50":"635946949","p90":"731516527"}},"Permission Sets Integration with Ability at ./spec/models/spree/permission_sets/ability_integration_spec.rb":{"source_file":"core/spec/models/spree/permission_sets/ability_integration_spec.rb","duration":{"p50":"370590302","p90":"401456752"}},"Product scopes at ./core/spec/models/spree/product/scopes_spec.rb":{"source_file":"core/spec/models/spree/product/scopes_spec.rb","duration":{"p50":"0","p90":"0"}},"Product scopes at ./spec/models/spree/product/scopes_spec.rb":{"source_file":"core/spec/models/spree/product/scopes_spec.rb","duration":{"p50":"16239846362","p90":"16902629603"}},"Spree at ./core/spec/lib/spree/core_spec.rb":{"source_file":"core/spec/lib/spree/core_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree at ./spec/lib/spree/core_spec.rb":{"source_file":"core/spec/lib/spree/core_spec.rb","duration":{"p50":"322174228","p90":"349008105"}},"Spree environment accessors at ./spec/lib/spree/core_environment_spec.rb":{"source_file":"core/spec/lib/spree/core_environment_spec.rb","duration":{"p50":"342097053","p90":"417841070"}},"Spree module dependency accessors at ./spec/models/spree/app_dependencies_spec.rb":{"source_file":"core/spec/models/spree/app_dependencies_spec.rb","duration":{"p50":"315794540","p90":"461787339"}},"Spree::Ability at ./spec/models/spree/ability_spec.rb":{"source_file":"core/spec/models/spree/ability_spec.rb","duration":{"p50":"911532407","p90":"1027754031"}},"Spree::Account::Addresses::Create at ./spec/services/spree/account/addresses/create_spec.rb":{"source_file":"core/spec/services/spree/account/addresses/create_spec.rb","duration":{"p50":"611010298","p90":"661901319"}},"Spree::Account::Addresses::Update at ./spec/services/spree/account/addresses/update_spec.rb":{"source_file":"core/spec/services/spree/account/addresses/update_spec.rb","duration":{"p50":"335322854","p90":"356058774"}},"Spree::Account::Create at ./spec/services/spree/account/create_spec.rb":{"source_file":"core/spec/services/spree/account/create_spec.rb","duration":{"p50":"315794540","p90":"328682798"}},"Spree::Account::Update at ./core/spec/services/spree/account/update_spec.rb":{"source_file":"core/spec/services/spree/account/update_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Account::Update at ./spec/services/spree/account/update_spec.rb":{"source_file":"core/spec/services/spree/account/update_spec.rb","duration":{"p50":"1048516738","p90":"1158794069"}},"Spree::Address at ./core/spec/models/spree/address_spec.rb":{"source_file":"core/spec/models/spree/address_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Address at ./spec/models/spree/address_spec.rb":{"source_file":"core/spec/models/spree/address_spec.rb","duration":{"p50":"5405577038","p90":"6217922653"}},"Spree::Addresses::Find at ./core/spec/finders/spree/addresses/find_spec.rb":{"source_file":"core/spec/finders/spree/addresses/find_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Addresses::Find at ./spec/finders/spree/addresses/find_spec.rb":{"source_file":"core/spec/finders/spree/addresses/find_spec.rb","duration":{"p50":"401456752","p90":"531184355"}},"Spree::Addresses::GeocodeAddressJob at ./core/spec/jobs/spree/addresses/geocode_address_job_spec.rb":{"source_file":"core/spec/jobs/spree/addresses/geocode_address_job_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Addresses::GeocodeAddressJob at ./spec/jobs/spree/addresses/geocode_address_job_spec.rb":{"source_file":"core/spec/jobs/spree/addresses/geocode_address_job_spec.rb","duration":{"p50":"363251880","p90":"452643035"}},"Spree::Addresses::PhoneValidator at ./core/spec/services/spree/addresses/phone_validator_spec.rb":{"source_file":"core/spec/services/spree/addresses/phone_validator_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Addresses::PhoneValidator at ./spec/services/spree/addresses/phone_validator_spec.rb":{"source_file":"core/spec/services/spree/addresses/phone_validator_spec.rb","duration":{"p50":"417841070","p90":"461787339"}},"Spree::Addresses::Update at ./spec/services/spree/addresses/update_spec.rb":{"source_file":"core/spec/services/spree/addresses/update_spec.rb","duration":{"p50":"5626190324","p90":"6217922653"}},"Spree::Adjustable::Adjuster::Base at ./spec/models/spree/adjustable/adjuster/base_spec.rb":{"source_file":"core/spec/models/spree/adjustable/adjuster/base_spec.rb","duration":{"p50":"378076975","p90":"531184355"}},"Spree::Adjustable::Adjuster::Promotion at ./core/spec/models/spree/adjustable/adjuster/promotion_spec.rb":{"source_file":"core/spec/models/spree/adjustable/adjuster/promotion_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Adjustable::Adjuster::Promotion at ./spec/models/spree/adjustable/adjuster/promotion_spec.rb":{"source_file":"core/spec/models/spree/adjustable/adjuster/promotion_spec.rb","duration":{"p50":"3551667475","p90":"3847485705"}},"Spree::Adjustable::Adjuster::Tax at ./core/spec/models/spree/adjustable/adjuster/tax_spec.rb":{"source_file":"core/spec/models/spree/adjustable/adjuster/tax_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Adjustable::Adjuster::Tax at ./spec/models/spree/adjustable/adjuster/tax_spec.rb":{"source_file":"core/spec/models/spree/adjustable/adjuster/tax_spec.rb","duration":{"p50":"1113355619","p90":"1306541891"}},"Spree::Adjustable::AdjustmentsUpdater at ./spec/models/spree/adjustable/adjustments_updater_spec.rb":{"source_file":"core/spec/models/spree/adjustable/adjustments_updater_spec.rb","duration":{"p50":"893482261","p90":"1135847652"}},"Spree::Adjustment at ./core/spec/models/spree/adjustment_spec.rb":{"source_file":"core/spec/models/spree/adjustment_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Adjustment at ./spec/models/spree/adjustment_spec.rb":{"source_file":"core/spec/models/spree/adjustment_spec.rb","duration":{"p50":"1628063388","p90":"1835643687"}},"Spree::Asset at ./spec/models/spree/asset_spec.rb":{"source_file":"core/spec/models/spree/asset_spec.rb","duration":{"p50":"661901319","p90":"792444507"}},"Spree::Base at ./spec/models/spree/base_spec.rb":{"source_file":"core/spec/models/spree/base_spec.rb","duration":{"p50":"315794540","p90":"409566990"}},"Spree::BaseAnalyticsEventHandler at ./core/spec/models/spree/base_analytics_event_handler_spec.rb":{"source_file":"core/spec/models/spree/base_analytics_event_handler_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::BaseAnalyticsEventHandler at ./spec/models/spree/base_analytics_event_handler_spec.rb":{"source_file":"core/spec/models/spree/base_analytics_event_handler_spec.rb","duration":{"p50":"335322854","p90":"363251880"}},"Spree::BaseHelper at ./spec/helpers/base_helper_spec.rb":{"source_file":"core/spec/helpers/base_helper_spec.rb","duration":{"p50":"4338045372","p90":"4794297569"}},"Spree::CSV::CustomerPresenter at ./spec/presenters/spree/csv/customer_presenter_spec.rb":{"source_file":"core/spec/presenters/spree/csv/customer_presenter_spec.rb","duration":{"p50":"3925212689","p90":"4167942623"}},"Spree::CSV::GiftCardPresenter at ./core/spec/presenters/spree/csv/gift_card_presenter_spec.rb":{"source_file":"core/spec/presenters/spree/csv/gift_card_presenter_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::CSV::GiftCardPresenter at ./spec/presenters/spree/csv/gift_card_presenter_spec.rb":{"source_file":"core/spec/presenters/spree/csv/gift_card_presenter_spec.rb","duration":{"p50":"349008105","p90":"370590302"}},"Spree::CSV::NewsletterSubscriberPresenter at ./spec/presenters/spree/csv/newsletter_subscriber_presenter_spec.rb":{"source_file":"core/spec/presenters/spree/csv/newsletter_subscriber_presenter_spec.rb","duration":{"p50":"378076975","p90":"520665853"}},"Spree::CSV::OrderLineItemPresenter at ./core/spec/presenters/spree/csv/order_line_items_presenter_spec.rb":{"source_file":"core/spec/presenters/spree/csv/order_line_items_presenter_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::CSV::OrderLineItemPresenter at ./spec/presenters/spree/csv/order_line_items_presenter_spec.rb":{"source_file":"core/spec/presenters/spree/csv/order_line_items_presenter_spec.rb","duration":{"p50":"1728740663","p90":"2028706782"}},"Spree::CSV::ProductVariantPresenter at ./spec/presenters/spree/csv/product_variant_presenter_spec.rb":{"source_file":"core/spec/presenters/spree/csv/product_variant_presenter_spec.rb","duration":{"p50":"2477884579","p90":"2907840000"}},"Spree::CalculatedAdjustments at ./spec/lib/calculated_adjustments_spec.rb":{"source_file":"core/spec/lib/calculated_adjustments_spec.rb","duration":{"p50":"303411654","p90":"335322854"}},"Spree::Calculator at ./core/spec/models/spree/calculator_spec.rb":{"source_file":"core/spec/models/spree/calculator_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Calculator at ./spec/models/spree/calculator_spec.rb":{"source_file":"core/spec/models/spree/calculator_spec.rb","duration":{"p50":"452643035","p90":"520665853"}},"Spree::Calculator::DefaultTax at ./core/spec/models/spree/calculator/default_tax_spec.rb":{"source_file":"core/spec/models/spree/calculator/default_tax_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Calculator::DefaultTax at ./spec/models/spree/calculator/default_tax_spec.rb":{"source_file":"core/spec/models/spree/calculator/default_tax_spec.rb","duration":{"p50":"3026515237","p90":"3344827773"}},"Spree::Calculator::FlatPercentItemTotal at ./core/spec/models/spree/calculator/flat_percent_item_total_spec.rb":{"source_file":"core/spec/models/spree/calculator/flat_percent_item_total_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Calculator::FlatPercentItemTotal at ./spec/models/spree/calculator/flat_percent_item_total_spec.rb":{"source_file":"core/spec/models/spree/calculator/flat_percent_item_total_spec.rb","duration":{"p50":"335322854","p90":"510355638"}},"Spree::Calculator::FlatRate at ./core/spec/models/spree/calculator/flat_rate_spec.rb":{"source_file":"core/spec/models/spree/calculator/flat_rate_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Calculator::FlatRate at ./spec/models/spree/calculator/flat_rate_spec.rb":{"source_file":"core/spec/models/spree/calculator/flat_rate_spec.rb","duration":{"p50":"1502887919","p90":"1799294307"}},"Spree::Calculator::FlexiRate at ./spec/models/spree/calculator/flexi_rate_spec.rb":{"source_file":"core/spec/models/spree/calculator/flexi_rate_spec.rb","duration":{"p50":"1027754031","p90":"1182204051"}},"Spree::Calculator::PercentOnLineItem at ./core/spec/models/spree/calculator/percent_on_line_item_spec.rb":{"source_file":"core/spec/models/spree/calculator/percent_on_line_item_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Calculator::PercentOnLineItem at ./spec/models/spree/calculator/percent_on_line_item_spec.rb":{"source_file":"core/spec/models/spree/calculator/percent_on_line_item_spec.rb","duration":{"p50":"893482261","p90":"1007402466"}},"Spree::Calculator::PriceSack at ./core/spec/models/spree/calculator/price_sack_spec.rb":{"source_file":"core/spec/models/spree/calculator/price_sack_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Calculator::PriceSack at ./spec/models/spree/calculator/price_sack_spec.rb":{"source_file":"core/spec/models/spree/calculator/price_sack_spec.rb","duration":{"p50":"471116376","p90":"564032090"}},"Spree::Calculator::Returns::DefaultRefundAmount at ./core/spec/models/spree/calculator/refunds/default_refund_amount_spec.rb":{"source_file":"core/spec/models/spree/calculator/refunds/default_refund_amount_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Calculator::Returns::DefaultRefundAmount at ./spec/models/spree/calculator/refunds/default_refund_amount_spec.rb":{"source_file":"core/spec/models/spree/calculator/refunds/default_refund_amount_spec.rb","duration":{"p50":"2242075211","p90":"2380722160"}},"Spree::Calculator::Shipping::DigitalDelivery at ./spec/models/spree/calculator/shipping/digital_delivery_spec.rb":{"source_file":"core/spec/models/spree/calculator/shipping/digital_delivery_spec.rb","duration":{"p50":"2477884579","p90":"2793818237"}},"Spree::Calculator::Shipping::FlatPercentItemTotal at ./core/spec/models/spree/calculator/shipping/flat_percent_item_total_spec.rb":{"source_file":"core/spec/models/spree/calculator/shipping/flat_percent_item_total_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Calculator::Shipping::FlatPercentItemTotal at ./spec/models/spree/calculator/shipping/flat_percent_item_total_spec.rb":{"source_file":"core/spec/models/spree/calculator/shipping/flat_percent_item_total_spec.rb","duration":{"p50":"490343654","p90":"661901319"}},"Spree::Calculator::Shipping::FlatRate at ./spec/models/spree/calculator/shipping/flat_rate_spec.rb":{"source_file":"core/spec/models/spree/calculator/shipping/flat_rate_spec.rb","duration":{"p50":"1182204051","p90":"1332936677"}},"Spree::Calculator::Shipping::FlexiRate at ./spec/models/spree/calculator/shipping/flexi_rate_spec.rb":{"source_file":"core/spec/models/spree/calculator/shipping/flexi_rate_spec.rb","duration":{"p50":"4085409105","p90":"4699360983"}},"Spree::Calculator::Shipping::PerItem at ./spec/models/spree/calculator/shipping/per_item_spec.rb":{"source_file":"core/spec/models/spree/calculator/shipping/per_item_spec.rb","duration":{"p50":"858447176","p90":"1113355619"}},"Spree::Calculator::Shipping::PriceSack at ./spec/models/spree/calculator/shipping/price_sack_spec.rb":{"source_file":"core/spec/models/spree/calculator/shipping/price_sack_spec.rb","duration":{"p50":"434894068","p90":"717031051"}},"Spree::Calculator::TieredFlatRate at ./spec/models/spree/calculator/tiered_flat_rate_spec.rb":{"source_file":"core/spec/models/spree/calculator/tiered_flat_rate_spec.rb","duration":{"p50":"471116376","p90":"510355638"}},"Spree::Calculator::TieredPercent at ./core/spec/models/spree/calculator/tiered_percent_spec.rb":{"source_file":"core/spec/models/spree/calculator/tiered_percent_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Calculator::TieredPercent at ./spec/models/spree/calculator/tiered_percent_spec.rb":{"source_file":"core/spec/models/spree/calculator/tiered_percent_spec.rb","duration":{"p50":"500249586","p90":"702832417"}},"Spree::Cart::AddItem at ./spec/services/spree/cart/add_item_spec.rb":{"source_file":"core/spec/services/spree/cart/add_item_spec.rb","duration":{"p50":"4699360983","p90":"5855807315"}},"Spree::Cart::Associate at ./spec/services/spree/cart/associate_spec.rb":{"source_file":"core/spec/services/spree/cart/associate_spec.rb","duration":{"p50":"349008105","p90":"385714894"}},"Spree::Cart::ChangeCurrency at ./core/spec/services/spree/cart/change_currency_spec.rb":{"source_file":"core/spec/services/spree/cart/change_currency_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Cart::ChangeCurrency at ./spec/services/spree/cart/change_currency_spec.rb":{"source_file":"core/spec/services/spree/cart/change_currency_spec.rb","duration":{"p50":"967900360","p90":"1158794069"}},"Spree::Cart::Create at ./spec/services/spree/cart/create_spec.rb":{"source_file":"core/spec/services/spree/cart/create_spec.rb","duration":{"p50":"1158794069","p90":"1359864691"}},"Spree::Cart::Destroy at ./spec/services/spree/cart/destroy_spec.rb":{"source_file":"core/spec/services/spree/cart/destroy_spec.rb","duration":{"p50":"2527942853","p90":"3087656959"}},"Spree::Cart::Empty at ./core/spec/services/spree/cart/empty_spec.rb":{"source_file":"core/spec/services/spree/cart/empty_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Cart::Empty at ./spec/services/spree/cart/empty_spec.rb":{"source_file":"core/spec/services/spree/cart/empty_spec.rb","duration":{"p50":"393507114","p90":"552863137"}},"Spree::Cart::RemoveItem at ./spec/services/spree/cart/remove_item_spec.rb":{"source_file":"core/spec/services/spree/cart/remove_item_spec.rb","duration":{"p50":"2069690757","p90":"2154159312"}},"Spree::Cart::RemoveLineItem at ./spec/services/spree/cart/remove_line_item_spec.rb":{"source_file":"core/spec/services/spree/cart/remove_line_item_spec.rb","duration":{"p50":"1387336705","p90":"1949157452"}},"Spree::Cart::RemoveOutOfStockItems at ./core/spec/services/spree/cart/remove_out_of_stock_items_spec.rb":{"source_file":"core/spec/services/spree/cart/remove_out_of_stock_items_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Cart::RemoveOutOfStockItems at ./spec/services/spree/cart/remove_out_of_stock_items_spec.rb":{"source_file":"core/spec/services/spree/cart/remove_out_of_stock_items_spec.rb","duration":{"p50":"948734016","p90":"1113355619"}},"Spree::Cart::SetQuantity at ./core/spec/services/spree/cart/set_quantity_spec.rb":{"source_file":"core/spec/services/spree/cart/set_quantity_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Cart::SetQuantity at ./spec/services/spree/cart/set_quantity_spec.rb":{"source_file":"core/spec/services/spree/cart/set_quantity_spec.rb","duration":{"p50":"635946949","p90":"731516527"}},"Spree::Checkout::AddStoreCredit at ./spec/services/spree/checkout/add_store_credit_spec.rb":{"source_file":"core/spec/services/spree/checkout/add_store_credit_spec.rb","duration":{"p50":"688914943","p90":"808453487"}},"Spree::Checkout::Advance at ./core/spec/services/spree/checkout/advance_spec.rb":{"source_file":"core/spec/services/spree/checkout/advance_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Checkout::Advance at ./spec/services/spree/checkout/advance_spec.rb":{"source_file":"core/spec/services/spree/checkout/advance_spec.rb","duration":{"p50":"3771297869","p90":"4252143484"}},"Spree::Checkout::GetShippingRates at ./spec/services/spree/checkout/get_shipping_rates_spec.rb":{"source_file":"core/spec/services/spree/checkout/get_shipping_rates_spec.rb","duration":{"p50":"2380722160","p90":"2579012406"}},"Spree::Checkout::RemoveStoreCredit at ./core/spec/services/spree/checkout/remove_store_credit_spec.rb":{"source_file":"core/spec/services/spree/checkout/remove_store_credit_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Checkout::RemoveStoreCredit at ./spec/services/spree/checkout/remove_store_credit_spec.rb":{"source_file":"core/spec/services/spree/checkout/remove_store_credit_spec.rb","duration":{"p50":"731516527","p90":"841448222"}},"Spree::Checkout::SelectShippingMethod at ./spec/services/spree/checkout/select_shipping_method_spec.rb":{"source_file":"core/spec/services/spree/checkout/select_shipping_method_spec.rb","duration":{"p50":"5626190324","p90":"6094795472"}},"Spree::Checkout::Update at ./spec/services/spree/checkout/update_spec.rb":{"source_file":"core/spec/services/spree/checkout/update_spec.rb","duration":{"p50":"4167942623","p90":"4699360983"}},"Spree::Classification at ./spec/models/spree/classification_spec.rb":{"source_file":"core/spec/models/spree/classification_spec.rb","duration":{"p50":"4699360983","p90":"5405577038"}},"Spree::Classifications::Reposition at ./spec/services/spree/classifications/reposition_spec.rb":{"source_file":"core/spec/services/spree/classifications/reposition_spec.rb","duration":{"p50":"967900360","p90":"1027754031"}},"Spree::Core::ControllerHelpers::Auth at ./spec/lib/spree/core/controller_helpers/auth_spec.rb":{"source_file":"core/spec/lib/spree/core/controller_helpers/auth_spec.rb","duration":{"p50":"297403503","p90":"315794540"}},"Spree::Core::ControllerHelpers::Currency at ./core/spec/lib/spree/core/controller_helpers/currency_spec.rb":{"source_file":"core/spec/lib/spree/core/controller_helpers/currency_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Core::ControllerHelpers::Currency at ./spec/lib/spree/core/controller_helpers/currency_spec.rb":{"source_file":"core/spec/lib/spree/core/controller_helpers/currency_spec.rb","duration":{"p50":"1473127762","p90":"1564224024"}},"Spree::Core::ControllerHelpers::Locale at ./spec/lib/spree/core/controller_helpers/locale_spec.rb":{"source_file":"core/spec/lib/spree/core/controller_helpers/locale_spec.rb","duration":{"p50":"2850259010","p90":"2966584242"}},"Spree::Core::ControllerHelpers::Order at ./core/spec/lib/spree/core/controller_helpers/order_spec.rb":{"source_file":"core/spec/lib/spree/core/controller_helpers/order_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Core::ControllerHelpers::Order at ./spec/lib/spree/core/controller_helpers/order_spec.rb":{"source_file":"core/spec/lib/spree/core/controller_helpers/order_spec.rb","duration":{"p50":"2111502692","p90":"2477884579"}},"Spree::Core::ControllerHelpers::Search at ./core/spec/lib/spree/core/controller_helpers/search_spec.rb":{"source_file":"core/spec/lib/spree/core/controller_helpers/search_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Core::ControllerHelpers::Search at ./spec/lib/spree/core/controller_helpers/search_spec.rb":{"source_file":"core/spec/lib/spree/core/controller_helpers/search_spec.rb","duration":{"p50":"297403503","p90":"335322854"}},"Spree::Core::ControllerHelpers::Store at ./spec/lib/spree/core/controller_helpers/store_spec.rb":{"source_file":"core/spec/lib/spree/core/controller_helpers/store_spec.rb","duration":{"p50":"4252143484","p90":"4891152065"}},"Spree::Core::ControllerHelpers::StrongParameters at ./core/spec/lib/spree/core/controller_helpers/strong_parameters_spec.rb":{"source_file":"core/spec/lib/spree/core/controller_helpers/strong_parameters_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Core::ControllerHelpers::StrongParameters at ./spec/lib/spree/core/controller_helpers/strong_parameters_spec.rb":{"source_file":"core/spec/lib/spree/core/controller_helpers/strong_parameters_spec.rb","duration":{"p50":"322174228","p90":"480633878"}},"Spree::Core::Dependencies at ./spec/models/spree/app_dependencies_spec.rb":{"source_file":"core/spec/models/spree/app_dependencies_spec.rb","duration":{"p50":"335322854","p90":"385714894"}},"Spree::Core::Importer::Order at ./core/spec/lib/spree/core/importer/order_spec.rb":{"source_file":"core/spec/lib/spree/core/importer/order_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Core::Importer::Order at ./spec/lib/spree/core/importer/order_spec.rb":{"source_file":"core/spec/lib/spree/core/importer/order_spec.rb","duration":{"p50":"5090770556","p90":"5405577038"}},"Spree::Core::NumberGenerator at ./core/spec/lib/spree/core/number_generator_spec.rb":{"source_file":"core/spec/lib/spree/core/number_generator_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Core::NumberGenerator at ./spec/lib/spree/core/number_generator_spec.rb":{"source_file":"core/spec/lib/spree/core/number_generator_spec.rb","duration":{"p50":"480633878","p90":"520665853"}},"Spree::Core::Partials at ./core/spec/lib/spree/core/partials_spec.rb":{"source_file":"core/spec/lib/spree/core/partials_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Core::Partials at ./spec/lib/spree/core/partials_spec.rb":{"source_file":"core/spec/lib/spree/core/partials_spec.rb","duration":{"p50":"303411654","p90":"490343654"}},"Spree::Core::Search::Base at ./core/spec/lib/search/base_spec.rb":{"source_file":"core/spec/lib/search/base_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Core::Search::Base at ./spec/lib/search/base_spec.rb":{"source_file":"core/spec/lib/search/base_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Core::TokenGenerator at ./core/spec/lib/spree/core/token_generator_spec.rb":{"source_file":"core/spec/lib/spree/core/token_generator_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Core::TokenGenerator at ./spec/lib/spree/core/token_generator_spec.rb":{"source_file":"core/spec/lib/spree/core/token_generator_spec.rb","duration":{"p50":"291514324","p90":"309541183"}},"Spree::Country at ./core/spec/models/spree/country_spec.rb":{"source_file":"core/spec/models/spree/country_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Country at ./spec/models/spree/country_spec.rb":{"source_file":"core/spec/models/spree/country_spec.rb","duration":{"p50":"746294639","p90":"761371298"}},"Spree::CouponCode at ./spec/models/spree/coupon_code_spec.rb":{"source_file":"core/spec/models/spree/coupon_code_spec.rb","duration":{"p50":"356058774","p90":"426282304"}},"Spree::CouponCodes::BulkGenerateJob at ./spec/jobs/spree/coupon_codes/bulk_generate_job_spec.rb":{"source_file":"core/spec/jobs/spree/coupon_codes/bulk_generate_job_spec.rb","duration":{"p50":"746294639","p90":"841448222"}},"Spree::CreditCard at ./spec/models/spree/credit_card_spec.rb":{"source_file":"core/spec/models/spree/credit_card_spec.rb","duration":{"p50":"5193614405","p90":"6217922653"}},"Spree::CreditCards::Destroy at ./core/spec/services/spree/credit_cards/destroy_spec.rb":{"source_file":"core/spec/services/spree/credit_cards/destroy_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::CreditCards::Destroy at ./spec/services/spree/credit_cards/destroy_spec.rb":{"source_file":"core/spec/services/spree/credit_cards/destroy_spec.rb","duration":{"p50":"1443956915","p90":"1660953558"}},"Spree::CurrencyHelper at ./spec/helpers/currency_helper_spec.rb":{"source_file":"core/spec/helpers/currency_helper_spec.rb","duration":{"p50":"1872727398","p90":"2028706782"}},"Spree::Current at ./core/spec/models/spree/current_spec.rb":{"source_file":"core/spec/models/spree/current_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Current at ./spec/models/spree/current_spec.rb":{"source_file":"core/spec/models/spree/current_spec.rb","duration":{"p50":"4989963218","p90":"5514780614"}},"Spree::CustomDomain at ./core/spec/models/spree/custom_domain_spec.rb":{"source_file":"core/spec/models/spree/custom_domain_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::CustomDomain at ./spec/models/spree/custom_domain_spec.rb":{"source_file":"core/spec/models/spree/custom_domain_spec.rb","duration":{"p50":"1280669775","p90":"1415363709"}},"Spree::CustomerGroup at ./core/spec/models/spree/customer_group_spec.rb":{"source_file":"core/spec/models/spree/customer_group_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::CustomerGroup at ./spec/models/spree/customer_group_spec.rb":{"source_file":"core/spec/models/spree/customer_group_spec.rb","duration":{"p50":"911532407","p90":"1158794069"}},"Spree::CustomerGroupUser at ./core/spec/models/spree/customer_group_user_spec.rb":{"source_file":"core/spec/models/spree/customer_group_user_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::CustomerGroupUser at ./spec/models/spree/customer_group_user_spec.rb":{"source_file":"core/spec/models/spree/customer_group_user_spec.rb","duration":{"p50":"335322854","p90":"349008105"}},"Spree::CustomerReturn at ./core/spec/models/spree/customer_return_spec.rb":{"source_file":"core/spec/models/spree/customer_return_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::CustomerReturn at ./spec/models/spree/customer_return_spec.rb":{"source_file":"core/spec/models/spree/customer_return_spec.rb","duration":{"p50":"25725512621","p90":"28431183178"}},"Spree::DataFeed::Google at ./core/spec/models/spree/data_feed/google_spec.rb":{"source_file":"core/spec/models/spree/data_feed/google_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::DataFeed::Google at ./spec/models/spree/data_feed/google_spec.rb":{"source_file":"core/spec/models/spree/data_feed/google_spec.rb","duration":{"p50":"858447176","p90":"1007402466"}},"Spree::DataFeeds::Google::RequiredAttributes at ./core/spec/services/spree/data_feeds/google/required_attributes_spec.rb":{"source_file":"core/spec/services/spree/data_feeds/google/required_attributes_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::DataFeeds::Google::RequiredAttributes at ./spec/services/spree/data_feeds/google/required_attributes_spec.rb":{"source_file":"core/spec/services/spree/data_feeds/google/required_attributes_spec.rb","duration":{"p50":"490343654","p90":"541915353"}},"Spree::DataFeeds::Google::Rss at ./spec/services/spree/data_feeds/google/rss_spec.rb":{"source_file":"core/spec/services/spree/data_feeds/google/rss_spec.rb","duration":{"p50":"2966584242","p90":"3344827773"}},"Spree::Digital at ./spec/models/spree/digital_spec.rb":{"source_file":"core/spec/models/spree/digital_spec.rb","duration":{"p50":"987453902","p90":"1091308973"}},"Spree::DigitalLink at ./core/spec/models/spree/digital_link_spec.rb":{"source_file":"core/spec/models/spree/digital_link_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::DigitalLink at ./spec/models/spree/digital_link_spec.rb":{"source_file":"core/spec/models/spree/digital_link_spec.rb","duration":{"p50":"6471689520","p90":"8227195624"}},"Spree::DisplayMoney at ./core/spec/models/spree/concerns/display_money_spec.rb":{"source_file":"core/spec/models/spree/concerns/display_money_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::DisplayMoney at ./spec/models/spree/concerns/display_money_spec.rb":{"source_file":"core/spec/models/spree/concerns/display_money_spec.rb","duration":{"p50":"335322854","p90":"520665853"}},"Spree::Event at ./spec/models/spree/event_spec.rb":{"source_file":"core/spec/models/spree/event_spec.rb","duration":{"p50":"531184355","p90":"552863137"}},"Spree::EventLogSubscriber at ./spec/subscribers/spree/event_log_subscriber_spec.rb":{"source_file":"core/spec/subscribers/spree/event_log_subscriber_spec.rb","duration":{"p50":"315794540","p90":"322174228"}},"Spree::Events at ./spec/lib/spree/events_spec.rb":{"source_file":"core/spec/lib/spree/events_spec.rb","duration":{"p50":"335322854","p90":"480633878"}},"Spree::Events::AssetSerializer at ./core/spec/serializers/spree/events/asset_serializer_spec.rb":{"source_file":"core/spec/serializers/spree/events/asset_serializer_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Events::AssetSerializer at ./spec/serializers/spree/events/asset_serializer_spec.rb":{"source_file":"core/spec/serializers/spree/events/asset_serializer_spec.rb","duration":{"p50":"717031051","p90":"948734016"}},"Spree::Events::BaseSerializer at ./core/spec/serializers/spree/events/base_serializer_spec.rb":{"source_file":"core/spec/serializers/spree/events/base_serializer_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Events::BaseSerializer at ./spec/serializers/spree/events/base_serializer_spec.rb":{"source_file":"core/spec/serializers/spree/events/base_serializer_spec.rb","duration":{"p50":"342097053","p90":"378076975"}},"Spree::Events::CustomerReturnSerializer at ./spec/serializers/spree/events/customer_return_serializer_spec.rb":{"source_file":"core/spec/serializers/spree/events/customer_return_serializer_spec.rb","duration":{"p50":"1835643687","p90":"2197677682"}},"Spree::Events::DigitalLinkSerializer at ./spec/serializers/spree/events/digital_link_serializer_spec.rb":{"source_file":"core/spec/serializers/spree/events/digital_link_serializer_spec.rb","duration":{"p50":"1113355619","p90":"1280669775"}},"Spree::Events::DigitalSerializer at ./spec/serializers/spree/events/digital_serializer_spec.rb":{"source_file":"core/spec/serializers/spree/events/digital_serializer_spec.rb","duration":{"p50":"717031051","p90":"1069698895"}},"Spree::Events::ExportSerializer at ./spec/serializers/spree/events/export_serializer_spec.rb":{"source_file":"core/spec/serializers/spree/events/export_serializer_spec.rb","duration":{"p50":"393507114","p90":"417841070"}},"Spree::Events::GiftCardBatchSerializer at ./core/spec/serializers/spree/events/gift_card_batch_serializer_spec.rb":{"source_file":"core/spec/serializers/spree/events/gift_card_batch_serializer_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Events::GiftCardBatchSerializer at ./spec/serializers/spree/events/gift_card_batch_serializer_spec.rb":{"source_file":"core/spec/serializers/spree/events/gift_card_batch_serializer_spec.rb","duration":{"p50":"443679807","p90":"480633878"}},"Spree::Events::GiftCardSerializer at ./core/spec/serializers/spree/events/gift_card_serializer_spec.rb":{"source_file":"core/spec/serializers/spree/events/gift_card_serializer_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Events::GiftCardSerializer at ./spec/serializers/spree/events/gift_card_serializer_spec.rb":{"source_file":"core/spec/serializers/spree/events/gift_card_serializer_spec.rb","duration":{"p50":"322174228","p90":"461787339"}},"Spree::Events::ImportRowSerializer at ./spec/serializers/spree/events/import_row_serializer_spec.rb":{"source_file":"core/spec/serializers/spree/events/import_row_serializer_spec.rb","duration":{"p50":"893482261","p90":"1113355619"}},"Spree::Events::ImportSerializer at ./core/spec/serializers/spree/events/import_serializer_spec.rb":{"source_file":"core/spec/serializers/spree/events/import_serializer_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Events::ImportSerializer at ./spec/serializers/spree/events/import_serializer_spec.rb":{"source_file":"core/spec/serializers/spree/events/import_serializer_spec.rb","duration":{"p50":"426282304","p90":"461787339"}},"Spree::Events::InvitationSerializer at ./core/spec/serializers/spree/events/invitation_serializer_spec.rb":{"source_file":"core/spec/serializers/spree/events/invitation_serializer_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Events::InvitationSerializer at ./spec/serializers/spree/events/invitation_serializer_spec.rb":{"source_file":"core/spec/serializers/spree/events/invitation_serializer_spec.rb","duration":{"p50":"552863137","p90":"611010298"}},"Spree::Events::LineItemSerializer at ./core/spec/serializers/spree/events/line_item_serializer_spec.rb":{"source_file":"core/spec/serializers/spree/events/line_item_serializer_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Events::LineItemSerializer at ./spec/serializers/spree/events/line_item_serializer_spec.rb":{"source_file":"core/spec/serializers/spree/events/line_item_serializer_spec.rb","duration":{"p50":"1135847652","p90":"1280669775"}},"Spree::Events::NewsletterSubscriberSerializer at ./spec/serializers/spree/events/newsletter_subscriber_serializer_spec.rb":{"source_file":"core/spec/serializers/spree/events/newsletter_subscriber_serializer_spec.rb","duration":{"p50":"309541183","p90":"328682798"}},"Spree::Events::OrderSerializer at ./core/spec/serializers/spree/events/order_serializer_spec.rb":{"source_file":"core/spec/serializers/spree/events/order_serializer_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Events::OrderSerializer at ./spec/serializers/spree/events/order_serializer_spec.rb":{"source_file":"core/spec/serializers/spree/events/order_serializer_spec.rb","duration":{"p50":"1660953558","p90":"1949157452"}},"Spree::Events::PaymentSerializer at ./spec/serializers/spree/events/payment_serializer_spec.rb":{"source_file":"core/spec/serializers/spree/events/payment_serializer_spec.rb","duration":{"p50":"1595824509","p90":"1835643687"}},"Spree::Events::PostCategorySerializer at ./core/spec/serializers/spree/events/post_category_serializer_spec.rb":{"source_file":"core/spec/serializers/spree/events/post_category_serializer_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Events::PostCategorySerializer at ./spec/serializers/spree/events/post_category_serializer_spec.rb":{"source_file":"core/spec/serializers/spree/events/post_category_serializer_spec.rb","duration":{"p50":"328682798","p90":"363251880"}},"Spree::Events::PostSerializer at ./spec/serializers/spree/events/post_serializer_spec.rb":{"source_file":"core/spec/serializers/spree/events/post_serializer_spec.rb","duration":{"p50":"531184355","p90":"587051459"}},"Spree::Events::PriceSerializer at ./spec/serializers/spree/events/price_serializer_spec.rb":{"source_file":"core/spec/serializers/spree/events/price_serializer_spec.rb","duration":{"p50":"841448222","p90":"1113355619"}},"Spree::Events::ProductSerializer at ./spec/serializers/spree/events/product_serializer_spec.rb":{"source_file":"core/spec/serializers/spree/events/product_serializer_spec.rb","duration":{"p50":"623353940","p90":"808453487"}},"Spree::Events::PromotionSerializer at ./spec/serializers/spree/events/promotion_serializer_spec.rb":{"source_file":"core/spec/serializers/spree/events/promotion_serializer_spec.rb","duration":{"p50":"443679807","p90":"480633878"}},"Spree::Events::RefundSerializer at ./core/spec/serializers/spree/events/refund_serializer_spec.rb":{"source_file":"core/spec/serializers/spree/events/refund_serializer_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Events::RefundSerializer at ./spec/serializers/spree/events/refund_serializer_spec.rb":{"source_file":"core/spec/serializers/spree/events/refund_serializer_spec.rb","duration":{"p50":"623353940","p90":"675273063"}},"Spree::Events::Registry at ./core/spec/lib/spree/events/registry_spec.rb":{"source_file":"core/spec/lib/spree/events/registry_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Events::Registry at ./spec/lib/spree/events/registry_spec.rb":{"source_file":"core/spec/lib/spree/events/registry_spec.rb","duration":{"p50":"309541183","p90":"342097053"}},"Spree::Events::ReimbursementSerializer at ./spec/serializers/spree/events/reimbursement_serializer_spec.rb":{"source_file":"core/spec/serializers/spree/events/reimbursement_serializer_spec.rb","duration":{"p50":"3026515237","p90":"3551667475"}},"Spree::Events::ReportSerializer at ./core/spec/serializers/spree/events/report_serializer_spec.rb":{"source_file":"core/spec/serializers/spree/events/report_serializer_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Events::ReportSerializer at ./spec/serializers/spree/events/report_serializer_spec.rb":{"source_file":"core/spec/serializers/spree/events/report_serializer_spec.rb","duration":{"p50":"401456752","p90":"417841070"}},"Spree::Events::ReturnAuthorizationSerializer at ./spec/serializers/spree/events/return_authorization_serializer_spec.rb":{"source_file":"core/spec/serializers/spree/events/return_authorization_serializer_spec.rb","duration":{"p50":"1473127762","p90":"1694508175"}},"Spree::Events::ReturnItemSerializer at ./spec/serializers/spree/events/return_item_serializer_spec.rb":{"source_file":"core/spec/serializers/spree/events/return_item_serializer_spec.rb","duration":{"p50":"3150033867","p90":"3771297869"}},"Spree::Events::ShipmentSerializer at ./spec/serializers/spree/events/shipment_serializer_spec.rb":{"source_file":"core/spec/serializers/spree/events/shipment_serializer_spec.rb","duration":{"p50":"702832417","p90":"746294639"}},"Spree::Events::StockItemSerializer at ./spec/serializers/spree/events/stock_item_serializer_spec.rb":{"source_file":"core/spec/serializers/spree/events/stock_item_serializer_spec.rb","duration":{"p50":"929947204","p90":"1027754031"}},"Spree::Events::StockMovementSerializer at ./core/spec/serializers/spree/events/stock_movement_serializer_spec.rb":{"source_file":"core/spec/serializers/spree/events/stock_movement_serializer_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Events::StockMovementSerializer at ./spec/serializers/spree/events/stock_movement_serializer_spec.rb":{"source_file":"core/spec/serializers/spree/events/stock_movement_serializer_spec.rb","duration":{"p50":"1007402466","p90":"1206086961"}},"Spree::Events::StockTransferSerializer at ./spec/serializers/spree/events/stock_transfer_serializer_spec.rb":{"source_file":"core/spec/serializers/spree/events/stock_transfer_serializer_spec.rb","duration":{"p50":"858447176","p90":"1158794069"}},"Spree::Events::StoreCreditSerializer at ./spec/serializers/spree/events/store_credit_serializer_spec.rb":{"source_file":"core/spec/serializers/spree/events/store_credit_serializer_spec.rb","duration":{"p50":"552863137","p90":"675273063"}},"Spree::Events::UserSerializer at ./spec/serializers/spree/events/user_serializer_spec.rb":{"source_file":"core/spec/serializers/spree/events/user_serializer_spec.rb","duration":{"p50":"309541183","p90":"322174228"}},"Spree::Events::VariantSerializer at ./spec/serializers/spree/events/variant_serializer_spec.rb":{"source_file":"core/spec/serializers/spree/events/variant_serializer_spec.rb","duration":{"p50":"1660953558","p90":"1988534370"}},"Spree::Events::WishedItemSerializer at ./spec/serializers/spree/events/wished_item_serializer_spec.rb":{"source_file":"core/spec/serializers/spree/events/wished_item_serializer_spec.rb","duration":{"p50":"776752537","p90":"841448222"}},"Spree::Events::WishlistSerializer at ./spec/serializers/spree/events/wishlist_serializer_spec.rb":{"source_file":"core/spec/serializers/spree/events/wishlist_serializer_spec.rb","duration":{"p50":"342097053","p90":"541915353"}},"Spree::Exchange at ./spec/models/spree/exchange_spec.rb":{"source_file":"core/spec/models/spree/exchange_spec.rb","duration":{"p50":"3771297869","p90":"4425682652"}},"Spree::Export at ./spec/models/spree/export_spec.rb":{"source_file":"core/spec/models/spree/export_spec.rb","duration":{"p50":"5514780614","p90":"6343537252"}},"Spree::ExportMailer at ./core/spec/mailers/spree/export_mailer_spec.rb":{"source_file":"core/spec/mailers/spree/export_mailer_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::ExportMailer at ./spec/mailers/spree/export_mailer_spec.rb":{"source_file":"core/spec/mailers/spree/export_mailer_spec.rb","duration":{"p50":"531184355","p90":"648794362"}},"Spree::ExportSubscriber at ./core/spec/subscribers/spree/export_subscriber_spec.rb":{"source_file":"core/spec/subscribers/spree/export_subscriber_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::ExportSubscriber at ./spec/subscribers/spree/export_subscriber_spec.rb":{"source_file":"core/spec/subscribers/spree/export_subscriber_spec.rb","duration":{"p50":"315794540","p90":"452643035"}},"Spree::Exports::Customers at ./core/spec/models/spree/exports/customers_spec.rb":{"source_file":"core/spec/models/spree/exports/customers_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Exports::Customers at ./spec/models/spree/exports/customers_spec.rb":{"source_file":"core/spec/models/spree/exports/customers_spec.rb","duration":{"p50":"309541183","p90":"434894068"}},"Spree::Exports::GenerateJob at ./spec/jobs/spree/exports/generate_job_spec.rb":{"source_file":"core/spec/jobs/spree/exports/generate_job_spec.rb","duration":{"p50":"342097053","p90":"461787339"}},"Spree::Exports::GiftCards at ./core/spec/models/spree/exports/gift_cards_spec.rb":{"source_file":"core/spec/models/spree/exports/gift_cards_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Exports::GiftCards at ./spec/models/spree/exports/gift_cards_spec.rb":{"source_file":"core/spec/models/spree/exports/gift_cards_spec.rb","duration":{"p50":"385714894","p90":"434894068"}},"Spree::Exports::NewsletterSubscribers at ./spec/models/spree/exports/newsletter_subscribers_spec.rb":{"source_file":"core/spec/models/spree/exports/newsletter_subscribers_spec.rb","duration":{"p50":"309541183","p90":"322174228"}},"Spree::Exports::Orders at ./spec/models/spree/exports/orders_spec.rb":{"source_file":"core/spec/models/spree/exports/orders_spec.rb","duration":{"p50":"315794540","p90":"328682798"}},"Spree::Exports::Products at ./spec/models/spree/exports/products_spec.rb":{"source_file":"core/spec/models/spree/exports/products_spec.rb","duration":{"p50":"541915353","p90":"635946949"}},"Spree::Filters::OptionsPresenter at ./core/spec/presenters/spree/filters/options_presenter_spec.rb":{"source_file":"core/spec/presenters/spree/filters/options_presenter_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Filters::OptionsPresenter at ./spec/presenters/spree/filters/options_presenter_spec.rb":{"source_file":"core/spec/presenters/spree/filters/options_presenter_spec.rb","duration":{"p50":"328682798","p90":"349008105"}},"Spree::Filters::PricePresenter at ./core/spec/presenters/spree/filters/price_presenter_spec.rb":{"source_file":"core/spec/presenters/spree/filters/price_presenter_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Filters::PricePresenter at ./spec/presenters/spree/filters/price_presenter_spec.rb":{"source_file":"core/spec/presenters/spree/filters/price_presenter_spec.rb","duration":{"p50":"297403503","p90":"309541183"}},"Spree::Filters::PriceRangePresenter at ./spec/presenters/spree/filters/price_range_presenter_spec.rb":{"source_file":"core/spec/presenters/spree/filters/price_range_presenter_spec.rb","duration":{"p50":"297403503","p90":"409566990"}},"Spree::Filters::PropertiesPresenter at ./core/spec/presenters/spree/filters/properties_presenter_spec.rb":{"source_file":"core/spec/presenters/spree/filters/properties_presenter_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Filters::PropertiesPresenter at ./spec/presenters/spree/filters/properties_presenter_spec.rb":{"source_file":"core/spec/presenters/spree/filters/properties_presenter_spec.rb","duration":{"p50":"675273063","p90":"875789543"}},"Spree::Filters::PropertyPresenter at ./spec/presenters/spree/filters/property_presenter_spec.rb":{"source_file":"core/spec/presenters/spree/filters/property_presenter_spec.rb","duration":{"p50":"552863137","p90":"635946949"}},"Spree::Filters::QuantifiedPriceRangePresenter at ./core/spec/presenters/spree/filters/quantified_price_range_presenter_spec.rb":{"source_file":"core/spec/presenters/spree/filters/quantified_price_range_presenter_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Filters::QuantifiedPriceRangePresenter at ./spec/presenters/spree/filters/quantified_price_range_presenter_spec.rb":{"source_file":"core/spec/presenters/spree/filters/quantified_price_range_presenter_spec.rb","duration":{"p50":"291514324","p90":"328682798"}},"Spree::FulfilmentChanger at ./spec/models/spree/fulfilment_changer_spec.rb":{"source_file":"core/spec/models/spree/fulfilment_changer_spec.rb","duration":{"p50":"15603052073","p90":"19057737897"}},"Spree::Gateway at ./core/spec/models/spree/gateway_spec.rb":{"source_file":"core/spec/models/spree/gateway_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Gateway at ./spec/models/spree/gateway_spec.rb":{"source_file":"core/spec/models/spree/gateway_spec.rb","duration":{"p50":"510355638","p90":"552863137"}},"Spree::Gateway::Bogus at ./core/spec/models/spree/gateway/bogus_spec.rb":{"source_file":"core/spec/models/spree/gateway/bogus_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Gateway::Bogus at ./spec/models/spree/gateway/bogus_spec.rb":{"source_file":"core/spec/models/spree/gateway/bogus_spec.rb","duration":{"p50":"322174228","p90":"363251880"}},"Spree::GiftCard at ./core/spec/models/spree/gift_card_spec.rb":{"source_file":"core/spec/models/spree/gift_card_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::GiftCard at ./spec/models/spree/gift_card_spec.rb":{"source_file":"core/spec/models/spree/gift_card_spec.rb","duration":{"p50":"611010298","p90":"675273063"}},"Spree::GiftCardBatch at ./spec/models/spree/gift_card_batch_spec.rb":{"source_file":"core/spec/models/spree/gift_card_batch_spec.rb","duration":{"p50":"378076975","p90":"452643035"}},"Spree::GiftCards::Apply at ./core/spec/services/spree/gift_cards/apply_spec.rb":{"source_file":"core/spec/services/spree/gift_cards/apply_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::GiftCards::Apply at ./spec/services/spree/gift_cards/apply_spec.rb":{"source_file":"core/spec/services/spree/gift_cards/apply_spec.rb","duration":{"p50":"824785881","p90":"911532407"}},"Spree::GiftCards::BulkGenerateJob at ./core/spec/jobs/spree/gift_cards/bulk_generate_job_spec.rb":{"source_file":"core/spec/jobs/spree/gift_cards/bulk_generate_job_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::GiftCards::BulkGenerateJob at ./spec/jobs/spree/gift_cards/bulk_generate_job_spec.rb":{"source_file":"core/spec/jobs/spree/gift_cards/bulk_generate_job_spec.rb","duration":{"p50":"291514324","p90":"461787339"}},"Spree::GiftCards::Redeem at ./spec/services/spree/gift_cards/redeem_spec.rb":{"source_file":"core/spec/services/spree/gift_cards/redeem_spec.rb","duration":{"p50":"393507114","p90":"510355638"}},"Spree::GiftCards::Remove at ./core/spec/services/spree/gift_cards/remove_spec.rb":{"source_file":"core/spec/services/spree/gift_cards/remove_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::GiftCards::Remove at ./spec/services/spree/gift_cards/remove_spec.rb":{"source_file":"core/spec/services/spree/gift_cards/remove_spec.rb","duration":{"p50":"575426677","p90":"702832417"}},"Spree::HasImageAltText at ./core/spec/models/concerns/spree/has_image_alt_text_spec.rb":{"source_file":"core/spec/models/concerns/spree/has_image_alt_text_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::HasImageAltText at ./spec/models/concerns/spree/has_image_alt_text_spec.rb":{"source_file":"core/spec/models/concerns/spree/has_image_alt_text_spec.rb","duration":{"p50":"322174228","p90":"490343654"}},"Spree::Image at ./core/spec/models/spree/image_spec.rb":{"source_file":"core/spec/models/spree/image_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Image at ./spec/models/spree/image_spec.rb":{"source_file":"core/spec/models/spree/image_spec.rb","duration":{"p50":"1835643687","p90":"2333579147"}},"Spree::ImageMethods at ./core/spec/models/concerns/spree/image_methods_spec.rb":{"source_file":"core/spec/models/concerns/spree/image_methods_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::ImageMethods at ./spec/models/concerns/spree/image_methods_spec.rb":{"source_file":"core/spec/models/concerns/spree/image_methods_spec.rb","duration":{"p50":"841448222","p90":"967900360"}},"Spree::Images::SaveFromUrlJob at ./spec/jobs/spree/images/save_from_url_job_spec.rb":{"source_file":"core/spec/jobs/spree/images/save_from_url_job_spec.rb","duration":{"p50":"1113355619","p90":"1230452354"}},"Spree::ImagesHelper at ./spec/helpers/images_helper_spec.rb":{"source_file":"core/spec/helpers/images_helper_spec.rb","duration":{"p50":"2287369659","p90":"2579012406"}},"Spree::Import at ./core/spec/models/spree/import_spec.rb":{"source_file":"core/spec/models/spree/import_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Import at ./spec/models/spree/import_spec.rb":{"source_file":"core/spec/models/spree/import_spec.rb","duration":{"p50":"2738495104","p90":"2907840000"}},"Spree::ImportMapping at ./spec/models/spree/import_mapping_spec.rb":{"source_file":"core/spec/models/spree/import_mapping_spec.rb","duration":{"p50":"1048516738","p90":"1359864691"}},"Spree::ImportRow at ./core/spec/models/spree/import_row_spec.rb":{"source_file":"core/spec/models/spree/import_row_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::ImportRow at ./spec/models/spree/import_row_spec.rb":{"source_file":"core/spec/models/spree/import_row_spec.rb","duration":{"p50":"1628063388","p90":"1763664717"}},"Spree::Imports::CreateRowsJob at ./core/spec/jobs/spree/imports/create_rows_job_spec.rb":{"source_file":"core/spec/jobs/spree/imports/create_rows_job_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Imports::CreateRowsJob at ./spec/jobs/spree/imports/create_rows_job_spec.rb":{"source_file":"core/spec/jobs/spree/imports/create_rows_job_spec.rb","duration":{"p50":"510355638","p90":"564032090"}},"Spree::Imports::ProcessRowsJob at ./core/spec/jobs/spree/imports/process_rows_job_spec.rb":{"source_file":"core/spec/jobs/spree/imports/process_rows_job_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Imports::ProcessRowsJob at ./spec/jobs/spree/imports/process_rows_job_spec.rb":{"source_file":"core/spec/jobs/spree/imports/process_rows_job_spec.rb","duration":{"p50":"792444507","p90":"948734016"}},"Spree::Imports::RowProcessors::ProductVariant at ./core/spec/services/spree/imports/row_processors/product_variant_spec.rb":{"source_file":"core/spec/services/spree/imports/row_processors/product_variant_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Imports::RowProcessors::ProductVariant at ./spec/services/spree/imports/row_processors/product_variant_spec.rb":{"source_file":"core/spec/services/spree/imports/row_processors/product_variant_spec.rb","duration":{"p50":"9276174270","p90":"9849800553"}},"Spree::Integration at ./spec/models/spree/integration_spec.rb":{"source_file":"core/spec/models/spree/integration_spec.rb","duration":{"p50":"309541183","p90":"426282304"}},"Spree::InventoryUnit at ./spec/models/spree/inventory_unit_spec.rb":{"source_file":"core/spec/models/spree/inventory_unit_spec.rb","duration":{"p50":"11330020377","p90":"12273697282"}},"Spree::Invitation at ./core/spec/models/spree/invitation_spec.rb":{"source_file":"core/spec/models/spree/invitation_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Invitation at ./spec/models/spree/invitation_spec.rb":{"source_file":"core/spec/models/spree/invitation_spec.rb","duration":{"p50":"3925212689","p90":"4004509915"}},"Spree::InvitationEmailSubscriber at ./spec/subscribers/spree/invitation_email_subscriber_spec.rb":{"source_file":"core/spec/subscribers/spree/invitation_email_subscriber_spec.rb","duration":{"p50":"575426677","p90":"648794362"}},"Spree::InvitationMailer at ./spec/mailers/spree/invitation_mailer_spec.rb":{"source_file":"core/spec/mailers/spree/invitation_mailer_spec.rb","duration":{"p50":"717031051","p90":"776752537"}},"Spree::LegacyUser at ./core/spec/models/spree/admin_user_spec.rb":{"source_file":"core/spec/models/spree/admin_user_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::LegacyUser at ./core/spec/models/spree/user_spec.rb":{"source_file":"core/spec/models/spree/user_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::LegacyUser at ./spec/models/spree/admin_user_spec.rb":{"source_file":"core/spec/models/spree/admin_user_spec.rb","duration":{"p50":"2907840000","p90":"2966584242"}},"Spree::LegacyUser at ./spec/models/spree/user_spec.rb":{"source_file":"core/spec/models/spree/user_spec.rb","duration":{"p50":"808453487","p90":"4085409105"}},"Spree::LineItem at ./spec/models/spree/line_item_spec.rb":{"source_file":"core/spec/models/spree/line_item_spec.rb","duration":{"p50":"12774613405","p90":"14694371668"}},"Spree::LineItems::Create at ./core/spec/services/spree/line_items/create_spec.rb":{"source_file":"core/spec/services/spree/line_items/create_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::LineItems::Create at ./spec/services/spree/line_items/create_spec.rb":{"source_file":"core/spec/services/spree/line_items/create_spec.rb","duration":{"p50":"531184355","p90":"611010298"}},"Spree::LineItems::Destroy at ./spec/services/spree/line_items/destroy_spec.rb":{"source_file":"core/spec/services/spree/line_items/destroy_spec.rb","duration":{"p50":"1113355619","p90":"1280669775"}},"Spree::LineItems::Update at ./core/spec/services/spree/line_items/update_spec.rb":{"source_file":"core/spec/services/spree/line_items/update_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::LineItems::Update at ./spec/services/spree/line_items/update_spec.rb":{"source_file":"core/spec/services/spree/line_items/update_spec.rb","duration":{"p50":"1306541891","p90":"1595824509"}},"Spree::LocaleHelper at ./spec/helpers/locale_helper_spec.rb":{"source_file":"core/spec/helpers/locale_helper_spec.rb","duration":{"p50":"1332936677","p90":"1443956915"}},"Spree::Locales::SetFallbackLocaleForStore at ./spec/services/spree/locales/set_fallback_locale_for_store_spec.rb":{"source_file":"core/spec/services/spree/locales/set_fallback_locale_for_store_spec.rb","duration":{"p50":"911532407","p90":"1091308973"}},"Spree::LocalizedNumber at ./core/spec/lib/spree/localized_number_spec.rb":{"source_file":"core/spec/lib/spree/localized_number_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::LocalizedNumber at ./spec/lib/spree/localized_number_spec.rb":{"source_file":"core/spec/lib/spree/localized_number_spec.rb","duration":{"p50":"291514324","p90":"328682798"}},"Spree::LogEntry at ./spec/models/spree/log_entry_spec.rb":{"source_file":"core/spec/models/spree/log_entry_spec.rb","duration":{"p50":"315794540","p90":"426282304"}},"Spree::Metafield at ./spec/models/spree/metafield_spec.rb":{"source_file":"core/spec/models/spree/metafield_spec.rb","duration":{"p50":"598911084","p90":"675273063"}},"Spree::MetafieldDefinition at ./core/spec/models/spree/metafield_definition_spec.rb":{"source_file":"core/spec/models/spree/metafield_definition_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::MetafieldDefinition at ./spec/models/spree/metafield_definition_spec.rb":{"source_file":"core/spec/models/spree/metafield_definition_spec.rb","duration":{"p50":"342097053","p90":"409566990"}},"Spree::Metafields at ./core/spec/models/concerns/spree/metafields_spec.rb":{"source_file":"core/spec/models/concerns/spree/metafields_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Metafields at ./spec/models/concerns/spree/metafields_spec.rb":{"source_file":"core/spec/models/concerns/spree/metafields_spec.rb","duration":{"p50":"2111502692","p90":"2333579147"}},"Spree::Metafields::Boolean at ./spec/models/spree/metafields/boolean_spec.rb":{"source_file":"core/spec/models/spree/metafields/boolean_spec.rb","duration":{"p50":"297403503","p90":"328682798"}},"Spree::Metafields::Json at ./core/spec/models/spree/metafields/json_spec.rb":{"source_file":"core/spec/models/spree/metafields/json_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Metafields::Json at ./spec/models/spree/metafields/json_spec.rb":{"source_file":"core/spec/models/spree/metafields/json_spec.rb","duration":{"p50":"1048516738","p90":"1182204051"}},"Spree::Metafields::Number at ./core/spec/models/spree/metafields/number_spec.rb":{"source_file":"core/spec/models/spree/metafields/number_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Metafields::Number at ./spec/models/spree/metafields/number_spec.rb":{"source_file":"core/spec/models/spree/metafields/number_spec.rb","duration":{"p50":"541915353","p90":"688914943"}},"Spree::Metafields::RichText at ./core/spec/models/spree/metafields/rich_text_spec.rb":{"source_file":"core/spec/models/spree/metafields/rich_text_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Metafields::RichText at ./spec/models/spree/metafields/rich_text_spec.rb":{"source_file":"core/spec/models/spree/metafields/rich_text_spec.rb","duration":{"p50":"315794540","p90":"342097053"}},"Spree::Migrations at ./core/spec/lib/spree/migrations_spec.rb":{"source_file":"core/spec/lib/spree/migrations_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Migrations at ./spec/lib/spree/migrations_spec.rb":{"source_file":"core/spec/lib/spree/migrations_spec.rb","duration":{"p50":"309541183","p90":"426282304"}},"Spree::Money at ./core/spec/lib/spree/money_spec.rb":{"source_file":"core/spec/lib/spree/money_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Money at ./spec/lib/spree/money_spec.rb":{"source_file":"core/spec/lib/spree/money_spec.rb","duration":{"p50":"409566990","p90":"426282304"}},"Spree::Newsletter::Subscribe at ./spec/services/spree/newsletter/subscribe_spec.rb":{"source_file":"core/spec/services/spree/newsletter/subscribe_spec.rb","duration":{"p50":"401456752","p90":"443679807"}},"Spree::Newsletter::Verify at ./core/spec/services/spree/newsletter/verify_spec.rb":{"source_file":"core/spec/services/spree/newsletter/verify_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Newsletter::Verify at ./spec/services/spree/newsletter/verify_spec.rb":{"source_file":"core/spec/services/spree/newsletter/verify_spec.rb","duration":{"p50":"342097053","p90":"434894068"}},"Spree::NewsletterSubscriber at ./core/spec/models/spree/newsletter_subscriber_spec.rb":{"source_file":"core/spec/models/spree/newsletter_subscriber_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::NewsletterSubscriber at ./spec/models/spree/newsletter_subscriber_spec.rb":{"source_file":"core/spec/models/spree/newsletter_subscriber_spec.rb","duration":{"p50":"370590302","p90":"471116376"}},"Spree::OptionType at ./core/spec/models/spree/option_type_spec.rb":{"source_file":"core/spec/models/spree/option_type_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::OptionType at ./spec/models/spree/option_type_spec.rb":{"source_file":"core/spec/models/spree/option_type_spec.rb","duration":{"p50":"552863137","p90":"648794362"}},"Spree::OptionValue at ./core/spec/models/spree/option_value_spec.rb":{"source_file":"core/spec/models/spree/option_value_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::OptionValue at ./spec/models/spree/option_value_spec.rb":{"source_file":"core/spec/models/spree/option_value_spec.rb","duration":{"p50":"967900360","p90":"1113355619"}},"Spree::OptionValueVariant at ./core/spec/models/spree/option_value_variant_spec.rb":{"source_file":"core/spec/models/spree/option_value_variant_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::OptionValueVariant at ./spec/models/spree/option_value_variant_spec.rb":{"source_file":"core/spec/models/spree/option_value_variant_spec.rb","duration":{"p50":"461787339","p90":"587051459"}},"Spree::OptionValues::FindAvailable at ./spec/finders/spree/option_values/find_available_spec.rb":{"source_file":"core/spec/finders/spree/option_values/find_available_spec.rb","duration":{"p50":"2287369659","p90":"2793818237"}},"Spree::Order at ./core/spec/models/spree/order/callbacks_spec.rb":{"source_file":"core/spec/models/spree/order/callbacks_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Order at ./core/spec/models/spree/order/checkout_spec.rb":{"source_file":"core/spec/models/spree/order/checkout_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Order at ./core/spec/models/spree/order/finalizing_spec.rb":{"source_file":"core/spec/models/spree/order/finalizing_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Order at ./core/spec/models/spree/order/payment_spec.rb":{"source_file":"core/spec/models/spree/order/payment_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Order at ./core/spec/models/spree/order/risk_assessment_spec.rb":{"source_file":"core/spec/models/spree/order/risk_assessment_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Order at ./core/spec/models/spree/order/totals_spec.rb":{"source_file":"core/spec/models/spree/order/totals_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Order at ./core/spec/models/spree/order/updating_spec.rb":{"source_file":"core/spec/models/spree/order/updating_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Order at ./core/spec/models/spree/order/validations_spec.rb":{"source_file":"core/spec/models/spree/order/validations_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Order at ./spec/models/spree/order/address_spec.rb":{"source_file":"core/spec/models/spree/order/address_spec.rb","duration":{"p50":"702832417","p90":"824785881"}},"Spree::Order at ./spec/models/spree/order/adjustments_spec.rb":{"source_file":"core/spec/models/spree/order/adjustments_spec.rb","duration":{"p50":"776752537","p90":"893482261"}},"Spree::Order at ./spec/models/spree/order/callbacks_spec.rb":{"source_file":"core/spec/models/spree/order/callbacks_spec.rb","duration":{"p50":"370590302","p90":"401456752"}},"Spree::Order at ./spec/models/spree/order/checkout_spec.rb":{"source_file":"core/spec/models/spree/order/checkout_spec.rb","duration":{"p50":"11105663538","p90":"11792423004"}},"Spree::Order at ./spec/models/spree/order/currency_updater_spec.rb":{"source_file":"core/spec/models/spree/order/currency_updater_spec.rb","duration":{"p50":"858447176","p90":"948734016"}},"Spree::Order at ./spec/models/spree/order/digital_spec.rb":{"source_file":"core/spec/models/spree/order/digital_spec.rb","duration":{"p50":"6735813161","p90":"7594638512"}},"Spree::Order at ./spec/models/spree/order/finalizing_spec.rb":{"source_file":"core/spec/models/spree/order/finalizing_spec.rb","duration":{"p50":"461787339","p90":"541915353"}},"Spree::Order at ./spec/models/spree/order/payment_spec.rb":{"source_file":"core/spec/models/spree/order/payment_spec.rb","duration":{"p50":"3925212689","p90":"4085409105"}},"Spree::Order at ./spec/models/spree/order/risk_assessment_spec.rb":{"source_file":"core/spec/models/spree/order/risk_assessment_spec.rb","duration":{"p50":"1230452354","p90":"1306541891"}},"Spree::Order at ./spec/models/spree/order/shipments_spec.rb":{"source_file":"core/spec/models/spree/order/shipments_spec.rb","duration":{"p50":"717031051","p90":"792444507"}},"Spree::Order at ./spec/models/spree/order/state_machine_spec.rb":{"source_file":"core/spec/models/spree/order/state_machine_spec.rb","duration":{"p50":"3150033867","p90":"3551667475"}},"Spree::Order at ./spec/models/spree/order/tax_spec.rb":{"source_file":"core/spec/models/spree/order/tax_spec.rb","duration":{"p50":"417841070","p90":"541915353"}},"Spree::Order at ./spec/models/spree/order/totals_spec.rb":{"source_file":"core/spec/models/spree/order/totals_spec.rb","duration":{"p50":"575426677","p90":"688914943"}},"Spree::Order at ./spec/models/spree/order/updating_spec.rb":{"source_file":"core/spec/models/spree/order/updating_spec.rb","duration":{"p50":"328682798","p90":"461787339"}},"Spree::Order at ./spec/models/spree/order/validations_spec.rb":{"source_file":"core/spec/models/spree/order/validations_spec.rb","duration":{"p50":"315794540","p90":"342097053"}},"Spree::Order at ./spec/models/spree/order_spec.rb":{"source_file":"core/spec/models/spree/order_spec.rb","duration":{"p50":"45037788250","p90":"53920345630"}},"Spree::OrderContents at ./spec/models/spree/order_contents_spec.rb":{"source_file":"core/spec/models/spree/order_contents_spec.rb","duration":{"p50":"13564578512","p90":"14694371668"}},"Spree::OrderInventory at ./spec/models/spree/order_inventory_spec.rb":{"source_file":"core/spec/models/spree/order_inventory_spec.rb","duration":{"p50":"6217922653","p90":"7010716259"}},"Spree::OrderMerger at ./spec/models/spree/order_merger_spec.rb":{"source_file":"core/spec/models/spree/order_merger_spec.rb","duration":{"p50":"2428817558","p90":"2631113667"}},"Spree::OrderPromotion at ./spec/models/spree/order_promotion_spec.rb":{"source_file":"core/spec/models/spree/order_promotion_spec.rb","duration":{"p50":"1564224024","p90":"1799294307"}},"Spree::OrderUpdater at ./spec/models/spree/order_updater_spec.rb":{"source_file":"core/spec/models/spree/order_updater_spec.rb","duration":{"p50":"2579012406","p90":"2684267478"}},"Spree::Orders::Approve at ./core/spec/services/spree/orders/approve_spec.rb":{"source_file":"core/spec/services/spree/orders/approve_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Orders::Approve at ./spec/services/spree/orders/approve_spec.rb":{"source_file":"core/spec/services/spree/orders/approve_spec.rb","duration":{"p50":"1443956915","p90":"1660953558"}},"Spree::Orders::Cancel at ./core/spec/services/spree/orders/cancel_spec.rb":{"source_file":"core/spec/services/spree/orders/cancel_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Orders::Cancel at ./spec/services/spree/orders/cancel_spec.rb":{"source_file":"core/spec/services/spree/orders/cancel_spec.rb","duration":{"p50":"2197677682","p90":"2380722160"}},"Spree::Orders::CreateUserAccount at ./spec/services/spree/orders/create_user_account_spec.rb":{"source_file":"core/spec/services/spree/orders/create_user_account_spec.rb","duration":{"p50":"1332936677","p90":"1502887919"}},"Spree::Payment at ./core/spec/models/spree/payment_spec.rb":{"source_file":"core/spec/models/spree/payment_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Payment at ./spec/models/spree/payment_spec.rb":{"source_file":"core/spec/models/spree/payment_spec.rb","duration":{"p50":"9092487651","p90":"9849800553"}},"Spree::Payment::CustomEvents at ./core/spec/models/spree/payment/custom_events_spec.rb":{"source_file":"core/spec/models/spree/payment/custom_events_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Payment::CustomEvents at ./spec/models/spree/payment/custom_events_spec.rb":{"source_file":"core/spec/models/spree/payment/custom_events_spec.rb","duration":{"p50":"1443956915","p90":"1660953558"}},"Spree::Payment::GatewayOptions at ./spec/models/spree/payment/gateway_options_spec.rb":{"source_file":"core/spec/models/spree/payment/gateway_options_spec.rb","duration":{"p50":"328682798","p90":"378076975"}},"Spree::PaymentMethod at ./core/spec/models/spree/payment_method_spec.rb":{"source_file":"core/spec/models/spree/payment_method_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::PaymentMethod at ./spec/models/spree/payment_method_spec.rb":{"source_file":"core/spec/models/spree/payment_method_spec.rb","duration":{"p50":"1799294307","p90":"1988534370"}},"Spree::PaymentMethod::StoreCredit at ./spec/models/spree/payment_method/store_credit_spec.rb":{"source_file":"core/spec/models/spree/payment_method/store_credit_spec.rb","duration":{"p50":"2197677682","p90":"2793818237"}},"Spree::PaymentSource at ./core/spec/models/spree/payment_source_spec.rb":{"source_file":"core/spec/models/spree/payment_source_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::PaymentSource at ./spec/models/spree/payment_source_spec.rb":{"source_file":"core/spec/models/spree/payment_source_spec.rb","duration":{"p50":"328682798","p90":"349008105"}},"Spree::Payments::Create at ./spec/services/spree/payments/create_spec.rb":{"source_file":"core/spec/services/spree/payments/create_spec.rb","duration":{"p50":"2477884579","p90":"2850259010"}},"Spree::PermissionConfiguration at ./spec/lib/spree/core/permission_configuration_spec.rb":{"source_file":"core/spec/lib/spree/core/permission_configuration_spec.rb","duration":{"p50":"328682798","p90":"490343654"}},"Spree::PermissionSets::Base at ./spec/models/spree/permission_sets/base_spec.rb":{"source_file":"core/spec/models/spree/permission_sets/base_spec.rb","duration":{"p50":"322174228","p90":"356058774"}},"Spree::PermissionSets::DefaultCustomer at ./core/spec/models/spree/permission_sets/default_customer_spec.rb":{"source_file":"core/spec/models/spree/permission_sets/default_customer_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::PermissionSets::DefaultCustomer at ./spec/models/spree/permission_sets/default_customer_spec.rb":{"source_file":"core/spec/models/spree/permission_sets/default_customer_spec.rb","duration":{"p50":"731516527","p90":"824785881"}},"Spree::PermissionSets::OrderManagement at ./core/spec/models/spree/permission_sets/order_management_spec.rb":{"source_file":"core/spec/models/spree/permission_sets/order_management_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::PermissionSets::OrderManagement at ./spec/models/spree/permission_sets/order_management_spec.rb":{"source_file":"core/spec/models/spree/permission_sets/order_management_spec.rb","duration":{"p50":"393507114","p90":"564032090"}},"Spree::PermissionSets::ProductManagement at ./spec/models/spree/permission_sets/product_management_spec.rb":{"source_file":"core/spec/models/spree/permission_sets/product_management_spec.rb","duration":{"p50":"363251880","p90":"417841070"}},"Spree::PermissionSets::SuperUser at ./core/spec/models/spree/permission_sets/super_user_spec.rb":{"source_file":"core/spec/models/spree/permission_sets/super_user_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::PermissionSets::SuperUser at ./spec/models/spree/permission_sets/super_user_spec.rb":{"source_file":"core/spec/models/spree/permission_sets/super_user_spec.rb","duration":{"p50":"401456752","p90":"461787339"}},"Spree::Policy at ./spec/models/spree/policy_spec.rb":{"source_file":"core/spec/models/spree/policy_spec.rb","duration":{"p50":"1415363709","p90":"1628063388"}},"Spree::Post at ./spec/models/spree/post_spec.rb":{"source_file":"core/spec/models/spree/post_spec.rb","duration":{"p50":"761371298","p90":"841448222"}},"Spree::PostCategory at ./core/spec/models/spree/post_category_spec.rb":{"source_file":"core/spec/models/spree/post_category_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::PostCategory at ./spec/models/spree/post_category_spec.rb":{"source_file":"core/spec/models/spree/post_category_spec.rb","duration":{"p50":"531184355","p90":"648794362"}},"Spree::Preference at ./spec/models/spree/preference_spec.rb":{"source_file":"core/spec/models/spree/preference_spec.rb","duration":{"p50":"328682798","p90":"356058774"}},"Spree::Preferences::Configuration at ./core/spec/models/spree/preferences/configuration_spec.rb":{"source_file":"core/spec/models/spree/preferences/configuration_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Preferences::Configuration at ./spec/models/spree/preferences/configuration_spec.rb":{"source_file":"core/spec/models/spree/preferences/configuration_spec.rb","duration":{"p50":"291514324","p90":"370590302"}},"Spree::Preferences::Preferable at ./spec/models/spree/preferences/preferable_spec.rb":{"source_file":"core/spec/models/spree/preferences/preferable_spec.rb","duration":{"p50":"417841070","p90":"443679807"}},"Spree::Preferences::RuntimeConfiguration at ./spec/models/spree/preferences/runtime_configuration_spec.rb":{"source_file":"core/spec/models/spree/preferences/runtime_configuration_spec.rb","duration":{"p50":"297403503","p90":"315794540"}},"Spree::Preferences::ScopedStore at ./spec/models/spree/preferences/scoped_store_spec.rb":{"source_file":"core/spec/models/spree/preferences/scoped_store_spec.rb","duration":{"p50":"303411654","p90":"385714894"}},"Spree::Preferences::Store at ./core/spec/models/spree/preferences/store_spec.rb":{"source_file":"core/spec/models/spree/preferences/store_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Preferences::Store at ./spec/models/spree/preferences/store_spec.rb":{"source_file":"core/spec/models/spree/preferences/store_spec.rb","duration":{"p50":"303411654","p90":"349008105"}},"Spree::Price at ./core/spec/models/spree/price_spec.rb":{"source_file":"core/spec/models/spree/price_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Price at ./spec/models/spree/price_spec.rb":{"source_file":"core/spec/models/spree/price_spec.rb","duration":{"p50":"3412400051","p90":"4004509915"}},"Spree::PriceList at ./core/spec/models/spree/price_list_spec.rb":{"source_file":"core/spec/models/spree/price_list_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::PriceList at ./spec/models/spree/price_list_spec.rb":{"source_file":"core/spec/models/spree/price_list_spec.rb","duration":{"p50":"10251792209","p90":"11330020377"}},"Spree::PriceRules::CustomerGroupRule at ./core/spec/models/spree/price_rules/customer_group_rule_spec.rb":{"source_file":"core/spec/models/spree/price_rules/customer_group_rule_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::PriceRules::CustomerGroupRule at ./spec/models/spree/price_rules/customer_group_rule_spec.rb":{"source_file":"core/spec/models/spree/price_rules/customer_group_rule_spec.rb","duration":{"p50":"1359864691","p90":"1564224024"}},"Spree::PriceRules::UserRule at ./spec/models/spree/price_rules/user_rule_spec.rb":{"source_file":"core/spec/models/spree/price_rules/user_rule_spec.rb","duration":{"p50":"1048516738","p90":"1255309977"}},"Spree::PriceRules::VolumeRule at ./spec/models/spree/price_rules/volume_rule_spec.rb":{"source_file":"core/spec/models/spree/price_rules/volume_rule_spec.rb","duration":{"p50":"987453902","p90":"1091308973"}},"Spree::PriceRules::ZoneRule at ./spec/models/spree/price_rules/zone_rule_spec.rb":{"source_file":"core/spec/models/spree/price_rules/zone_rule_spec.rb","duration":{"p50":"1048516738","p90":"1182204051"}},"Spree::Pricing::Context at ./spec/lib/spree/core/pricing/context_spec.rb":{"source_file":"core/spec/lib/spree/core/pricing/context_spec.rb","duration":{"p50":"3623418333","p90":"4167942623"}},"Spree::Pricing::Resolver at ./core/spec/lib/spree/pricing/resolver_spec.rb":{"source_file":"core/spec/lib/spree/pricing/resolver_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Pricing::Resolver at ./spec/lib/spree/pricing/resolver_spec.rb":{"source_file":"core/spec/lib/spree/pricing/resolver_spec.rb","duration":{"p50":"4004509915","p90":"4425682652"}},"Spree::Product at ./core/spec/models/spree/product/normalizes_spec.rb":{"source_file":"core/spec/models/spree/product/normalizes_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Product at ./core/spec/models/spree/product_spec.rb":{"source_file":"core/spec/models/spree/product_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Product at ./spec/models/spree/product/normalizes_spec.rb":{"source_file":"core/spec/models/spree/product/normalizes_spec.rb","duration":{"p50":"500249586","p90":"587051459"}},"Spree::Product at ./spec/models/spree/product_spec.rb":{"source_file":"core/spec/models/spree/product_spec.rb","duration":{"p50":"22364581883","p90":"28431183178"}},"Spree::Product::Slugs at ./core/spec/models/spree/product/slugs_spec.rb":{"source_file":"core/spec/models/spree/product/slugs_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Product::Slugs at ./spec/models/spree/product/slugs_spec.rb":{"source_file":"core/spec/models/spree/product/slugs_spec.rb","duration":{"p50":"4252143484","p90":"4989963218"}},"Spree::ProductMetricsSubscriber at ./core/spec/subscribers/spree/product_metrics_subscriber_spec.rb":{"source_file":"core/spec/subscribers/spree/product_metrics_subscriber_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::ProductMetricsSubscriber at ./spec/subscribers/spree/product_metrics_subscriber_spec.rb":{"source_file":"core/spec/subscribers/spree/product_metrics_subscriber_spec.rb","duration":{"p50":"1502887919","p90":"1628063388"}},"Spree::ProductProperties::FindAvailable at ./spec/finders/spree/product_properties/find_available_spec.rb":{"source_file":"core/spec/finders/spree/product_properties/find_available_spec.rb","duration":{"p50":"1027754031","p90":"1206086961"}},"Spree::ProductProperty at ./core/spec/models/spree/product_property_spec.rb":{"source_file":"core/spec/models/spree/product_property_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::ProductProperty at ./spec/models/spree/product_property_spec.rb":{"source_file":"core/spec/models/spree/product_property_spec.rb","duration":{"p50":"967900360","p90":"1069698895"}},"Spree::Products::AutoMatchTaxons at ./core/spec/services/spree/products/auto_match_taxons_spec.rb":{"source_file":"core/spec/services/spree/products/auto_match_taxons_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Products::AutoMatchTaxons at ./spec/services/spree/products/auto_match_taxons_spec.rb":{"source_file":"core/spec/services/spree/products/auto_match_taxons_spec.rb","duration":{"p50":"731516527","p90":"841448222"}},"Spree::Products::Duplicator at ./core/spec/services/spree/products/duplicator_spec.rb":{"source_file":"core/spec/services/spree/products/duplicator_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Products::Duplicator at ./spec/services/spree/products/duplicator_spec.rb":{"source_file":"core/spec/services/spree/products/duplicator_spec.rb","duration":{"p50":"6602430722","p90":"7296838747"}},"Spree::Products::Find at ./spec/finders/spree/products/find_spec.rb":{"source_file":"core/spec/finders/spree/products/find_spec.rb","duration":{"p50":"16239846362","p90":"17592462461"}},"Spree::Products::PrepareNestedAttributes at ./spec/services/spree/products/prepare_nested_attributes_spec.rb":{"source_file":"core/spec/services/spree/products/prepare_nested_attributes_spec.rb","duration":{"p50":"7296838747","p90":"7594638512"}},"Spree::Products::RefreshMetricsJob at ./core/spec/jobs/spree/products/refresh_metrics_job_spec.rb":{"source_file":"core/spec/jobs/spree/products/refresh_metrics_job_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Products::RefreshMetricsJob at ./spec/jobs/spree/products/refresh_metrics_job_spec.rb":{"source_file":"core/spec/jobs/spree/products/refresh_metrics_job_spec.rb","duration":{"p50":"717031051","p90":"808453487"}},"Spree::Products::TouchTaxonsJob at ./core/spec/jobs/spree/products/touch_taxons_job_spec.rb":{"source_file":"core/spec/jobs/spree/products/touch_taxons_job_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Products::TouchTaxonsJob at ./spec/jobs/spree/products/touch_taxons_job_spec.rb":{"source_file":"core/spec/jobs/spree/products/touch_taxons_job_spec.rb","duration":{"p50":"611010298","p90":"648794362"}},"Spree::ProductsHelper at ./core/spec/helpers/products_helper_spec.rb":{"source_file":"core/spec/helpers/products_helper_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::ProductsHelper at ./spec/helpers/products_helper_spec.rb":{"source_file":"core/spec/helpers/products_helper_spec.rb","duration":{"p50":"2738495104","p90":"3087656959"}},"Spree::Promotion at ./core/spec/models/spree/promotion_spec.rb":{"source_file":"core/spec/models/spree/promotion_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Promotion at ./spec/models/spree/promotion_spec.rb":{"source_file":"core/spec/models/spree/promotion_spec.rb","duration":{"p50":"5193614405","p90":"5974106452"}},"Spree::Promotion::Actions::CreateAdjustment at ./spec/models/spree/promotion/actions/create_adjustment_spec.rb":{"source_file":"core/spec/models/spree/promotion/actions/create_adjustment_spec.rb","duration":{"p50":"1595824509","p90":"1988534370"}},"Spree::Promotion::Actions::CreateItemAdjustments at ./spec/models/spree/promotion/actions/create_item_adjustments_spec.rb":{"source_file":"core/spec/models/spree/promotion/actions/create_item_adjustments_spec.rb","duration":{"p50":"3150033867","p90":"3623418333"}},"Spree::Promotion::Actions::CreateLineItems at ./spec/models/spree/promotion/actions/create_line_items_spec.rb":{"source_file":"core/spec/models/spree/promotion/actions/create_line_items_spec.rb","duration":{"p50":"2684267478","p90":"3150033867"}},"Spree::Promotion::Actions::FreeShipping at ./spec/models/spree/promotion/actions/free_shipping_spec.rb":{"source_file":"core/spec/models/spree/promotion/actions/free_shipping_spec.rb","duration":{"p50":"1564224024","p90":"1910560275"}},"Spree::Promotion::Rules::Country at ./spec/models/spree/promotion/rules/country_spec.rb":{"source_file":"core/spec/models/spree/promotion/rules/country_spec.rb","duration":{"p50":"1660953558","p90":"1835643687"}},"Spree::Promotion::Rules::Currency at ./spec/models/spree/promotion/rules/currency_spec.rb":{"source_file":"core/spec/models/spree/promotion/rules/currency_spec.rb","duration":{"p50":"342097053","p90":"500249586"}},"Spree::Promotion::Rules::CustomerGroup at ./spec/models/spree/promotion/rules/customer_group_spec.rb":{"source_file":"core/spec/models/spree/promotion/rules/customer_group_spec.rb","duration":{"p50":"370590302","p90":"500249586"}},"Spree::Promotion::Rules::FirstOrder at ./core/spec/models/spree/promotion/rules/first_order_spec.rb":{"source_file":"core/spec/models/spree/promotion/rules/first_order_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Promotion::Rules::FirstOrder at ./spec/models/spree/promotion/rules/first_order_spec.rb":{"source_file":"core/spec/models/spree/promotion/rules/first_order_spec.rb","duration":{"p50":"1473127762","p90":"1628063388"}},"Spree::Promotion::Rules::ItemTotal at ./core/spec/models/spree/promotion/rules/item_total_spec.rb":{"source_file":"core/spec/models/spree/promotion/rules/item_total_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Promotion::Rules::ItemTotal at ./spec/models/spree/promotion/rules/item_total_spec.rb":{"source_file":"core/spec/models/spree/promotion/rules/item_total_spec.rb","duration":{"p50":"434894068","p90":"575426677"}},"Spree::Promotion::Rules::OneUsePerUser at ./core/spec/models/spree/promotion/rules/one_use_per_user_spec.rb":{"source_file":"core/spec/models/spree/promotion/rules/one_use_per_user_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Promotion::Rules::OneUsePerUser at ./spec/models/spree/promotion/rules/one_use_per_user_spec.rb":{"source_file":"core/spec/models/spree/promotion/rules/one_use_per_user_spec.rb","duration":{"p50":"393507114","p90":"500249586"}},"Spree::Promotion::Rules::OptionValue at ./spec/models/spree/promotion/rules/option_value_spec.rb":{"source_file":"core/spec/models/spree/promotion/rules/option_value_spec.rb","duration":{"p50":"1069698895","p90":"1158794069"}},"Spree::Promotion::Rules::Product at ./spec/models/spree/promotion/rules/product_spec.rb":{"source_file":"core/spec/models/spree/promotion/rules/product_spec.rb","duration":{"p50":"4004509915","p90":"4515090383"}},"Spree::Promotion::Rules::Taxon at ./spec/models/spree/promotion/rules/taxon_spec.rb":{"source_file":"core/spec/models/spree/promotion/rules/taxon_spec.rb","duration":{"p50":"3087656959","p90":"3481337426"}},"Spree::Promotion::Rules::User at ./core/spec/models/spree/promotion/rules/user_spec.rb":{"source_file":"core/spec/models/spree/promotion/rules/user_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Promotion::Rules::User at ./spec/models/spree/promotion/rules/user_spec.rb":{"source_file":"core/spec/models/spree/promotion/rules/user_spec.rb","duration":{"p50":"461787339","p90":"520665853"}},"Spree::Promotion::Rules::UserLoggedIn at ./core/spec/models/spree/promotion/rules/user_logged_in_spec.rb":{"source_file":"core/spec/models/spree/promotion/rules/user_logged_in_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Promotion::Rules::UserLoggedIn at ./spec/models/spree/promotion/rules/user_logged_in_spec.rb":{"source_file":"core/spec/models/spree/promotion/rules/user_logged_in_spec.rb","duration":{"p50":"309541183","p90":"328682798"}},"Spree::PromotionAction at ./core/spec/models/spree/promotion_action_spec.rb":{"source_file":"core/spec/models/spree/promotion_action_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::PromotionAction at ./spec/models/spree/promotion_action_spec.rb":{"source_file":"core/spec/models/spree/promotion_action_spec.rb","duration":{"p50":"297403503","p90":"335322854"}},"Spree::PromotionCategory at ./spec/models/spree/promotion_category_spec.rb":{"source_file":"core/spec/models/spree/promotion_category_spec.rb","duration":{"p50":"291514324","p90":"349008105"}},"Spree::PromotionHandler::Cart at ./spec/models/spree/promotion_handler/cart_spec.rb":{"source_file":"core/spec/models/spree/promotion_handler/cart_spec.rb","duration":{"p50":"1206086961","p90":"1280669775"}},"Spree::PromotionHandler::Coupon at ./spec/models/spree/promotion_handler/coupon_spec.rb":{"source_file":"core/spec/models/spree/promotion_handler/coupon_spec.rb","duration":{"p50":"11105663538","p90":"12030653772"}},"Spree::PromotionHandler::Coupon at ./spec/models/spree/promotion_handler/coupon_with_gift_card_spec.rb":{"source_file":"core/spec/models/spree/promotion_handler/coupon_with_gift_card_spec.rb","duration":{"p50":"1230452354","p90":"1359864691"}},"Spree::PromotionHandler::FreeShipping at ./core/spec/models/spree/promotion_handler/free_shipping_spec.rb":{"source_file":"core/spec/models/spree/promotion_handler/free_shipping_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::PromotionHandler::FreeShipping at ./spec/models/spree/promotion_handler/free_shipping_spec.rb":{"source_file":"core/spec/models/spree/promotion_handler/free_shipping_spec.rb","duration":{"p50":"761371298","p90":"893482261"}},"Spree::PromotionHandler::Page at ./core/spec/models/spree/promotion_handler/page_spec.rb":{"source_file":"core/spec/models/spree/promotion_handler/page_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::PromotionHandler::Page at ./spec/models/spree/promotion_handler/page_spec.rb":{"source_file":"core/spec/models/spree/promotion_handler/page_spec.rb","duration":{"p50":"858447176","p90":"948734016"}},"Spree::PromotionHandler::PromotionDuplicator at ./core/spec/models/spree/promotion_handler/promotion_duplicator_spec.rb":{"source_file":"core/spec/models/spree/promotion_handler/promotion_duplicator_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::PromotionHandler::PromotionDuplicator at ./spec/models/spree/promotion_handler/promotion_duplicator_spec.rb":{"source_file":"core/spec/models/spree/promotion_handler/promotion_duplicator_spec.rb","duration":{"p50":"3213670915","p90":"3696618704"}},"Spree::PromotionRule at ./spec/models/spree/promotion_rule_spec.rb":{"source_file":"core/spec/models/spree/promotion_rule_spec.rb","duration":{"p50":"335322854","p90":"356058774"}},"Spree::Property at ./core/spec/models/spree/property_spec.rb":{"source_file":"core/spec/models/spree/property_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Property at ./spec/models/spree/property_spec.rb":{"source_file":"core/spec/models/spree/property_spec.rb","duration":{"p50":"2197677682","p90":"2428817558"}},"Spree::Prototype at ./spec/models/spree/prototype_spec.rb":{"source_file":"core/spec/models/spree/prototype_spec.rb","duration":{"p50":"385714894","p90":"417841070"}},"Spree::Publishable at ./spec/models/concerns/spree/publishable_spec.rb":{"source_file":"core/spec/models/concerns/spree/publishable_spec.rb","duration":{"p50":"393507114","p90":"461787339"}},"Spree::RansackConfiguration at ./core/spec/lib/spree/core/ransack_configuration_spec.rb":{"source_file":"core/spec/lib/spree/core/ransack_configuration_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::RansackConfiguration at ./spec/lib/spree/core/ransack_configuration_spec.rb":{"source_file":"core/spec/lib/spree/core/ransack_configuration_spec.rb","duration":{"p50":"349008105","p90":"409566990"}},"Spree::RansackableAttributes at ./spec/models/spree/concerns/ransackable_attributes_spec.rb":{"source_file":"core/spec/models/spree/concerns/ransackable_attributes_spec.rb","duration":{"p50":"309541183","p90":"452643035"}},"Spree::Refund at ./spec/models/spree/refund_spec.rb":{"source_file":"core/spec/models/spree/refund_spec.rb","duration":{"p50":"3551667475","p90":"3771297869"}},"Spree::RefundReason at ./spec/models/spree/refund_reason_spec.rb":{"source_file":"core/spec/models/spree/refund_reason_spec.rb","duration":{"p50":"315794540","p90":"349008105"}},"Spree::Reimbursement at ./spec/models/spree/reimbursement_spec.rb":{"source_file":"core/spec/models/spree/reimbursement_spec.rb","duration":{"p50":"9654754998","p90":"10670190014"}},"Spree::Reimbursement::Credit at ./core/spec/models/spree/reimbursement/credit_spec.rb":{"source_file":"core/spec/models/spree/reimbursement/credit_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Reimbursement::Credit at ./spec/models/spree/reimbursement/credit_spec.rb":{"source_file":"core/spec/models/spree/reimbursement/credit_spec.rb","duration":{"p50":"875789543","p90":"929947204"}},"Spree::Reimbursement::ReimbursementTypeEngine at ./spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb":{"source_file":"core/spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb","duration":{"p50":"10458899123","p90":"11105663538"}},"Spree::Reimbursement::ReimbursementTypeValidator at ./spec/models/spree/reimbursement/reimbursement_type_validator_spec.rb":{"source_file":"core/spec/models/spree/reimbursement/reimbursement_type_validator_spec.rb","duration":{"p50":"3623418333","p90":"3696618704"}},"Spree::ReimbursementPerformer at ./spec/models/spree/reimbursement_performer_spec.rb":{"source_file":"core/spec/models/spree/reimbursement_performer_spec.rb","duration":{"p50":"1359864691","p90":"1763664717"}},"Spree::ReimbursementTaxCalculator at ./spec/models/spree/reimbursement_tax_calculator_spec.rb":{"source_file":"core/spec/models/spree/reimbursement_tax_calculator_spec.rb","duration":{"p50":"2154159312","p90":"2242075211"}},"Spree::ReimbursementType::Credit at ./core/spec/models/spree/reimbursement_type/credit_spec.rb":{"source_file":"core/spec/models/spree/reimbursement_type/credit_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::ReimbursementType::Credit at ./spec/models/spree/reimbursement_type/credit_spec.rb":{"source_file":"core/spec/models/spree/reimbursement_type/credit_spec.rb","duration":{"p50":"1949157452","p90":"2333579147"}},"Spree::ReimbursementType::Exchange at ./core/spec/models/spree/reimbursement_type/exchange_spec.rb":{"source_file":"core/spec/models/spree/reimbursement_type/exchange_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::ReimbursementType::Exchange at ./spec/models/spree/reimbursement_type/exchange_spec.rb":{"source_file":"core/spec/models/spree/reimbursement_type/exchange_spec.rb","duration":{"p50":"1949157452","p90":"2069690757"}},"Spree::ReimbursementType::OriginalPayment at ./spec/models/spree/reimbursement_type/original_payment_spec.rb":{"source_file":"core/spec/models/spree/reimbursement_type/original_payment_spec.rb","duration":{"p50":"2477884579","p90":"2738495104"}},"Spree::ReimbursementType::StoreCredit at ./core/spec/models/spree/reimbursement_type/store_credit_spec.rb":{"source_file":"core/spec/models/spree/reimbursement_type/store_credit_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::ReimbursementType::StoreCredit at ./spec/models/spree/reimbursement_type/store_credit_spec.rb":{"source_file":"core/spec/models/spree/reimbursement_type/store_credit_spec.rb","duration":{"p50":"7748065553","p90":"8562965265"}},"Spree::Report at ./core/spec/models/spree/report_spec.rb":{"source_file":"core/spec/models/spree/report_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Report at ./spec/models/spree/report_spec.rb":{"source_file":"core/spec/models/spree/report_spec.rb","duration":{"p50":"1158794069","p90":"1280669775"}},"Spree::ReportLineItem at ./core/spec/models/spree/report_line_item_spec.rb":{"source_file":"core/spec/models/spree/report_line_item_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::ReportLineItem at ./spec/models/spree/report_line_item_spec.rb":{"source_file":"core/spec/models/spree/report_line_item_spec.rb","duration":{"p50":"297403503","p90":"315794540"}},"Spree::ReportLineItems::ProductsPerformance at ./core/spec/models/spree/report_line_items/products_performance_spec.rb":{"source_file":"core/spec/models/spree/report_line_items/products_performance_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::ReportLineItems::ProductsPerformance at ./spec/models/spree/report_line_items/products_performance_spec.rb":{"source_file":"core/spec/models/spree/report_line_items/products_performance_spec.rb","duration":{"p50":"2028706782","p90":"2111502692"}},"Spree::ReportLineItems::SalesTotal at ./spec/models/spree/report_line_items/sales_total_spec.rb":{"source_file":"core/spec/models/spree/report_line_items/sales_total_spec.rb","duration":{"p50":"1728740663","p90":"1910560275"}},"Spree::ReportMailer at ./core/spec/mailers/spree/report_mailer_spec.rb":{"source_file":"core/spec/mailers/spree/report_mailer_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::ReportMailer at ./spec/mailers/spree/report_mailer_spec.rb":{"source_file":"core/spec/mailers/spree/report_mailer_spec.rb","duration":{"p50":"434894068","p90":"480633878"}},"Spree::ReportSubscriber at ./core/spec/subscribers/spree/report_subscriber_spec.rb":{"source_file":"core/spec/subscribers/spree/report_subscriber_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::ReportSubscriber at ./spec/subscribers/spree/report_subscriber_spec.rb":{"source_file":"core/spec/subscribers/spree/report_subscriber_spec.rb","duration":{"p50":"328682798","p90":"342097053"}},"Spree::Reports::ProductsPerformance at ./core/spec/models/spree/reports/products_performance_spec.rb":{"source_file":"core/spec/models/spree/reports/products_performance_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Reports::ProductsPerformance at ./spec/models/spree/reports/products_performance_spec.rb":{"source_file":"core/spec/models/spree/reports/products_performance_spec.rb","duration":{"p50":"2527942853","p90":"2793818237"}},"Spree::Reports::SalesTotal at ./spec/models/spree/reports/sales_total_spec.rb":{"source_file":"core/spec/models/spree/reports/sales_total_spec.rb","duration":{"p50":"1988534370","p90":"2197677682"}},"Spree::ReturnAuthorization at ./spec/models/spree/return_authorization_spec.rb":{"source_file":"core/spec/models/spree/return_authorization_spec.rb","duration":{"p50":"15603052073","p90":"17947865743"}},"Spree::ReturnItem at ./spec/models/spree/return_item_spec.rb":{"source_file":"core/spec/models/spree/return_item_spec.rb","duration":{"p50":"47822865191","p90":"52852616014"}},"Spree::ReturnItem::EligibilityValidator::Default at ./core/spec/models/spree/return_item/eligibility_validator/default_spec.rb":{"source_file":"core/spec/models/spree/return_item/eligibility_validator/default_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::ReturnItem::EligibilityValidator::Default at ./spec/models/spree/return_item/eligibility_validator/default_spec.rb":{"source_file":"core/spec/models/spree/return_item/eligibility_validator/default_spec.rb","duration":{"p50":"3087656959","p90":"3278593560"}},"Spree::ReturnItem::EligibilityValidator::InventoryShipped at ./spec/models/spree/return_item/eligibility_validator/inventory_shipped_spec.rb":{"source_file":"core/spec/models/spree/return_item/eligibility_validator/inventory_shipped_spec.rb","duration":{"p50":"3026515237","p90":"3344827773"}},"Spree::ReturnItem::EligibilityValidator::NoReimbursements at ./spec/models/spree/return_item/eligibility_validator/no_reimbursements_spec.rb":{"source_file":"core/spec/models/spree/return_item/eligibility_validator/no_reimbursements_spec.rb","duration":{"p50":"3213670915","p90":"3551667475"}},"Spree::ReturnItem::EligibilityValidator::OrderCompleted at ./core/spec/models/spree/return_item/eligibility_validator/order_completed_spec.rb":{"source_file":"core/spec/models/spree/return_item/eligibility_validator/order_completed_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::ReturnItem::EligibilityValidator::OrderCompleted at ./spec/models/spree/return_item/eligibility_validator/order_completed_spec.rb":{"source_file":"core/spec/models/spree/return_item/eligibility_validator/order_completed_spec.rb","duration":{"p50":"2111502692","p90":"2287369659"}},"Spree::ReturnItem::EligibilityValidator::RMARequired at ./core/spec/models/spree/return_item/eligibility_validator/rma_required_spec.rb":{"source_file":"core/spec/models/spree/return_item/eligibility_validator/rma_required_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::ReturnItem::EligibilityValidator::RMARequired at ./spec/models/spree/return_item/eligibility_validator/rma_required_spec.rb":{"source_file":"core/spec/models/spree/return_item/eligibility_validator/rma_required_spec.rb","duration":{"p50":"1359864691","p90":"1533249291"}},"Spree::ReturnItem::EligibilityValidator::TimeSincePurchase at ./spec/models/spree/return_item/eligibility_validator/time_since_purchase_spec.rb":{"source_file":"core/spec/models/spree/return_item/eligibility_validator/time_since_purchase_spec.rb","duration":{"p50":"2579012406","p90":"2907840000"}},"Spree::ReturnItem::ExchangeVariantEligibility::SameOptionValue at ./spec/models/spree/return_item/exchange_variant_eligibility/same_option_value_spec.rb":{"source_file":"core/spec/models/spree/return_item/exchange_variant_eligibility/same_option_value_spec.rb","duration":{"p50":"1255309977","p90":"1473127762"}},"Spree::ReturnItem::ExchangeVariantEligibility::SameProduct at ./spec/models/spree/return_item/exchange_variant_eligibility/same_product_spec.rb":{"source_file":"core/spec/models/spree/return_item/exchange_variant_eligibility/same_product_spec.rb","duration":{"p50":"1443956915","p90":"1835643687"}},"Spree::ReturnsCalculator at ./core/spec/models/spree/returns_calculator_spec.rb":{"source_file":"core/spec/models/spree/returns_calculator_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::ReturnsCalculator at ./spec/models/spree/returns_calculator_spec.rb":{"source_file":"core/spec/models/spree/returns_calculator_spec.rb","duration":{"p50":"824785881","p90":"1027754031"}},"Spree::Role at ./spec/models/spree/role_spec.rb":{"source_file":"core/spec/models/spree/role_spec.rb","duration":{"p50":"309541183","p90":"363251880"}},"Spree::RoleUser at ./core/spec/models/spree/role_user_spec.rb":{"source_file":"core/spec/models/spree/role_user_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::RoleUser at ./spec/models/spree/role_user_spec.rb":{"source_file":"core/spec/models/spree/role_user_spec.rb","duration":{"p50":"349008105","p90":"363251880"}},"Spree::Seeds::All at ./core/spec/services/spree/seeds/all_spec.rb":{"source_file":"core/spec/services/spree/seeds/all_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Seeds::All at ./spec/services/spree/seeds/all_spec.rb":{"source_file":"core/spec/services/spree/seeds/all_spec.rb","duration":{"p50":"1910560275","p90":"2028706782"}},"Spree::Seeds::DigitalDelivery at ./core/spec/services/spree/seeds/digital_delivery_spec.rb":{"source_file":"core/spec/services/spree/seeds/digital_delivery_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Seeds::DigitalDelivery at ./spec/services/spree/seeds/digital_delivery_spec.rb":{"source_file":"core/spec/services/spree/seeds/digital_delivery_spec.rb","duration":{"p50":"370590302","p90":"500249586"}},"Spree::Seeds::PaymentMethods at ./spec/services/spree/seeds/payment_methods_spec.rb":{"source_file":"core/spec/services/spree/seeds/payment_methods_spec.rb","duration":{"p50":"746294639","p90":"858447176"}},"Spree::Seeds::ReturnsEnvironment at ./core/spec/services/spree/seeds/returns_environment_spec.rb":{"source_file":"core/spec/services/spree/seeds/returns_environment_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Seeds::ReturnsEnvironment at ./spec/services/spree/seeds/returns_environment_spec.rb":{"source_file":"core/spec/services/spree/seeds/returns_environment_spec.rb","duration":{"p50":"461787339","p90":"575426677"}},"Spree::Seeds::TaxCategories at ./core/spec/services/spree/seeds/tax_categories_spec.rb":{"source_file":"core/spec/services/spree/seeds/tax_categories_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Seeds::TaxCategories at ./spec/services/spree/seeds/tax_categories_spec.rb":{"source_file":"core/spec/services/spree/seeds/tax_categories_spec.rb","duration":{"p50":"303411654","p90":"328682798"}},"Spree::ServiceModule at ./spec/lib/spree/service_module_spec.rb":{"source_file":"core/spec/lib/spree/service_module_spec.rb","duration":{"p50":"322174228","p90":"335322854"}},"Spree::Shipment at ./spec/models/spree/shipment_spec.rb":{"source_file":"core/spec/models/spree/shipment_spec.rb","duration":{"p50":"88901102526","p90":"104326966700"}},"Spree::Shipment::CustomEvents at ./spec/models/spree/shipment/custom_events_spec.rb":{"source_file":"core/spec/models/spree/shipment/custom_events_spec.rb","duration":{"p50":"1660953558","p90":"2197677682"}},"Spree::ShipmentHelper at ./core/spec/helpers/shipment_helper_spec.rb":{"source_file":"core/spec/helpers/shipment_helper_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::ShipmentHelper at ./spec/helpers/shipment_helper_spec.rb":{"source_file":"core/spec/helpers/shipment_helper_spec.rb","duration":{"p50":"587051459","p90":"746294639"}},"Spree::Shipments::AddItem at ./core/spec/services/spree/shipments/add_item_spec.rb":{"source_file":"core/spec/services/spree/shipments/add_item_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Shipments::AddItem at ./spec/services/spree/shipments/add_item_spec.rb":{"source_file":"core/spec/services/spree/shipments/add_item_spec.rb","duration":{"p50":"2527942853","p90":"2850259010"}},"Spree::Shipments::Create at ./spec/services/spree/shipments/create_spec.rb":{"source_file":"core/spec/services/spree/shipments/create_spec.rb","duration":{"p50":"3481337426","p90":"3847485705"}},"Spree::Shipments::RemoveItem at ./spec/services/spree/shipments/remove_item_spec.rb":{"source_file":"core/spec/services/spree/shipments/remove_item_spec.rb","duration":{"p50":"4989963218","p90":"5626190324"}},"Spree::ShippingCalculator at ./spec/models/spree/shipping_calculator_spec.rb":{"source_file":"core/spec/models/spree/shipping_calculator_spec.rb","duration":{"p50":"1069698895","p90":"1182204051"}},"Spree::ShippingCategory at ./core/spec/models/spree/shipping_category_spec.rb":{"source_file":"core/spec/models/spree/shipping_category_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::ShippingCategory at ./spec/models/spree/shipping_category_spec.rb":{"source_file":"core/spec/models/spree/shipping_category_spec.rb","duration":{"p50":"322174228","p90":"363251880"}},"Spree::ShippingMethod at ./spec/models/spree/shipping_method_spec.rb":{"source_file":"core/spec/models/spree/shipping_method_spec.rb","duration":{"p50":"1443956915","p90":"1660953558"}},"Spree::ShippingRate at ./core/spec/models/spree/shipping_rate_spec.rb":{"source_file":"core/spec/models/spree/shipping_rate_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::ShippingRate at ./spec/models/spree/shipping_rate_spec.rb":{"source_file":"core/spec/models/spree/shipping_rate_spec.rb","duration":{"p50":"2111502692","p90":"2738495104"}},"Spree::State at ./spec/models/spree/state_spec.rb":{"source_file":"core/spec/models/spree/state_spec.rb","duration":{"p50":"309541183","p90":"356058774"}},"Spree::Stock::AvailabilityValidator at ./core/spec/models/spree/stock/availability_validator_spec.rb":{"source_file":"core/spec/models/spree/stock/availability_validator_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Stock::AvailabilityValidator at ./spec/models/spree/stock/availability_validator_spec.rb":{"source_file":"core/spec/models/spree/stock/availability_validator_spec.rb","duration":{"p50":"761371298","p90":"776752537"}},"Spree::Stock::ContentItem at ./spec/models/spree/stock/content_item_spec.rb":{"source_file":"core/spec/models/spree/stock/content_item_spec.rb","duration":{"p50":"1069698895","p90":"1502887919"}},"Spree::Stock::Coordinator at ./core/spec/models/spree/stock/coordinator_spec.rb":{"source_file":"core/spec/models/spree/stock/coordinator_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Stock::Coordinator at ./spec/models/spree/stock/coordinator_spec.rb":{"source_file":"core/spec/models/spree/stock/coordinator_spec.rb","duration":{"p50":"1660953558","p90":"1694508175"}},"Spree::Stock::Differentiator at ./core/spec/models/spree/stock/differentiator_spec.rb":{"source_file":"core/spec/models/spree/stock/differentiator_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Stock::Differentiator at ./spec/models/spree/stock/differentiator_spec.rb":{"source_file":"core/spec/models/spree/stock/differentiator_spec.rb","duration":{"p50":"1502887919","p90":"1694508175"}},"Spree::Stock::Estimator at ./spec/models/spree/stock/estimator_spec.rb":{"source_file":"core/spec/models/spree/stock/estimator_spec.rb","duration":{"p50":"1280669775","p90":"1443956915"}},"Spree::Stock::InventoryUnitBuilder at ./spec/models/spree/stock/inventory_unit_builder_spec.rb":{"source_file":"core/spec/models/spree/stock/inventory_unit_builder_spec.rb","duration":{"p50":"808453487","p90":"911532407"}},"Spree::Stock::Package at ./spec/models/spree/stock/package_spec.rb":{"source_file":"core/spec/models/spree/stock/package_spec.rb","duration":{"p50":"5626190324","p90":"6094795472"}},"Spree::Stock::Packer at ./spec/models/spree/stock/packer_spec.rb":{"source_file":"core/spec/models/spree/stock/packer_spec.rb","duration":{"p50":"1564224024","p90":"1872727398"}},"Spree::Stock::Prioritizer at ./spec/models/spree/stock/prioritizer_spec.rb":{"source_file":"core/spec/models/spree/stock/prioritizer_spec.rb","duration":{"p50":"1988534370","p90":"2154159312"}},"Spree::Stock::Quantifier at ./spec/models/spree/stock/quantifier_spec.rb":{"source_file":"core/spec/models/spree/stock/quantifier_spec.rb","duration":{"p50":"3150033867","p90":"3412400051"}},"Spree::Stock::Splitter::Backordered at ./core/spec/models/spree/stock/splitter/backordered_spec.rb":{"source_file":"core/spec/models/spree/stock/splitter/backordered_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Stock::Splitter::Backordered at ./spec/models/spree/stock/splitter/backordered_spec.rb":{"source_file":"core/spec/models/spree/stock/splitter/backordered_spec.rb","duration":{"p50":"552863137","p90":"702832417"}},"Spree::Stock::Splitter::Base at ./core/spec/models/spree/stock/splitter/base_spec.rb":{"source_file":"core/spec/models/spree/stock/splitter/base_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Stock::Splitter::Base at ./spec/models/spree/stock/splitter/base_spec.rb":{"source_file":"core/spec/models/spree/stock/splitter/base_spec.rb","duration":{"p50":"297403503","p90":"315794540"}},"Spree::Stock::Splitter::Digital at ./core/spec/models/spree/stock/splitter/digital_spec.rb":{"source_file":"core/spec/models/spree/stock/splitter/digital_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Stock::Splitter::Digital at ./spec/models/spree/stock/splitter/digital_spec.rb":{"source_file":"core/spec/models/spree/stock/splitter/digital_spec.rb","duration":{"p50":"2154159312","p90":"2579012406"}},"Spree::Stock::Splitter::ShippingCategory at ./spec/models/spree/stock/splitter/shipping_category_spec.rb":{"source_file":"core/spec/models/spree/stock/splitter/shipping_category_spec.rb","duration":{"p50":"370590302","p90":"385714894"}},"Spree::Stock::Splitter::Weight at ./spec/models/spree/stock/splitter/weight_spec.rb":{"source_file":"core/spec/models/spree/stock/splitter/weight_spec.rb","duration":{"p50":"426282304","p90":"510355638"}},"Spree::StockItem at ./core/spec/models/spree/stock_item_spec.rb":{"source_file":"core/spec/models/spree/stock_item_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::StockItem at ./spec/models/spree/stock_item_spec.rb":{"source_file":"core/spec/models/spree/stock_item_spec.rb","duration":{"p50":"8562965265","p90":"9463571730"}},"Spree::StockLocation at ./spec/models/spree/stock_location_spec.rb":{"source_file":"core/spec/models/spree/stock_location_spec.rb","duration":{"p50":"6343537252","p90":"7594638512"}},"Spree::StockLocations::StockItems::Create at ./spec/services/spree/stock_locations/stock_items/create_spec.rb":{"source_file":"core/spec/services/spree/stock_locations/stock_items/create_spec.rb","duration":{"p50":"1799294307","p90":"1988534370"}},"Spree::StockLocations::StockItems::CreateJob at ./core/spec/jobs/spree/stock_locations/stock_items/create_job_spec.rb":{"source_file":"core/spec/jobs/spree/stock_locations/stock_items/create_job_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::StockLocations::StockItems::CreateJob at ./spec/jobs/spree/stock_locations/stock_items/create_job_spec.rb":{"source_file":"core/spec/jobs/spree/stock_locations/stock_items/create_job_spec.rb","duration":{"p50":"309541183","p90":"363251880"}},"Spree::StockMovement at ./core/spec/models/spree/stock_movement_spec.rb":{"source_file":"core/spec/models/spree/stock_movement_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::StockMovement at ./spec/models/spree/stock_movement_spec.rb":{"source_file":"core/spec/models/spree/stock_movement_spec.rb","duration":{"p50":"1763664717","p90":"2111502692"}},"Spree::StockMovement::CustomEvents at ./core/spec/models/spree/stock_movement/custom_events_spec.rb":{"source_file":"core/spec/models/spree/stock_movement/custom_events_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::StockMovement::CustomEvents at ./spec/models/spree/stock_movement/custom_events_spec.rb":{"source_file":"core/spec/models/spree/stock_movement/custom_events_spec.rb","duration":{"p50":"1048516738","p90":"1306541891"}},"Spree::StockTransfer at ./spec/models/spree/stock_transfer_spec.rb":{"source_file":"core/spec/models/spree/stock_transfer_spec.rb","duration":{"p50":"4252143484","p90":"4891152065"}},"Spree::Store at ./spec/models/spree/store_spec.rb":{"source_file":"core/spec/models/spree/store_spec.rb","duration":{"p50":"24716767886","p90":"27868189452"}},"Spree::StoreCredit at ./core/spec/models/spree/store_credit_spec.rb":{"source_file":"core/spec/models/spree/store_credit_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::StoreCredit at ./spec/models/spree/store_credit_spec.rb":{"source_file":"core/spec/models/spree/store_credit_spec.rb","duration":{"p50":"4699360983","p90":"5514780614"}},"Spree::StoreFaviconImage at ./core/spec/models/spree/store_favicon_image_spec.rb":{"source_file":"core/spec/models/spree/store_favicon_image_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::StoreFaviconImage at ./spec/models/spree/store_favicon_image_spec.rb":{"source_file":"core/spec/models/spree/store_favicon_image_spec.rb","duration":{"p50":"426282304","p90":"575426677"}},"Spree::StoreProduct at ./spec/models/spree/store_product_spec.rb":{"source_file":"core/spec/models/spree/store_product_spec.rb","duration":{"p50":"2631113667","p90":"3026515237"}},"Spree::Stores::FindCurrent at ./core/spec/finders/spree/stores/find_current_spec.rb":{"source_file":"core/spec/finders/spree/stores/find_current_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Stores::FindCurrent at ./spec/finders/spree/stores/find_current_spec.rb":{"source_file":"core/spec/finders/spree/stores/find_current_spec.rb","duration":{"p50":"1763664717","p90":"1949157452"}},"Spree::Stores::SettingsDefaultsByCountry at ./spec/services/spree/stores/settings_defaults_by_country_spec.rb":{"source_file":"core/spec/services/spree/stores/settings_defaults_by_country_spec.rb","duration":{"p50":"309541183","p90":"349008105"}},"Spree::Subscriber at ./spec/models/spree/subscriber_spec.rb":{"source_file":"core/spec/models/spree/subscriber_spec.rb","duration":{"p50":"309541183","p90":"452643035"}},"Spree::Tags::BulkAdd at ./spec/services/spree/tags/bulk_add_spec.rb":{"source_file":"core/spec/services/spree/tags/bulk_add_spec.rb","duration":{"p50":"1533249291","p90":"1799294307"}},"Spree::Tags::BulkRemove at ./core/spec/services/spree/tags/bulk_remove_spec.rb":{"source_file":"core/spec/services/spree/tags/bulk_remove_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Tags::BulkRemove at ./spec/services/spree/tags/bulk_remove_spec.rb":{"source_file":"core/spec/services/spree/tags/bulk_remove_spec.rb","duration":{"p50":"1027754031","p90":"1280669775"}},"Spree::TaxCategory at ./core/spec/models/spree/tax_category_spec.rb":{"source_file":"core/spec/models/spree/tax_category_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::TaxCategory at ./spec/models/spree/tax_category_spec.rb":{"source_file":"core/spec/models/spree/tax_category_spec.rb","duration":{"p50":"611010298","p90":"648794362"}},"Spree::TaxRate at ./spec/models/spree/tax_rate_spec.rb":{"source_file":"core/spec/models/spree/tax_rate_spec.rb","duration":{"p50":"8227195624","p90":"9092487651"}},"Spree::Taxon at ./spec/models/spree/taxon_spec.rb":{"source_file":"core/spec/models/spree/taxon_spec.rb","duration":{"p50":"9092487651","p90":"10048786423"}},"Spree::TaxonImage at ./spec/models/spree/taxon_image_spec.rb":{"source_file":"core/spec/models/spree/taxon_image_spec.rb","duration":{"p50":"309541183","p90":"393507114"}},"Spree::Taxonomy at ./core/spec/models/spree/taxonomy_spec.rb":{"source_file":"core/spec/models/spree/taxonomy_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Taxonomy at ./spec/models/spree/taxonomy_spec.rb":{"source_file":"core/spec/models/spree/taxonomy_spec.rb","duration":{"p50":"858447176","p90":"1113355619"}},"Spree::Taxons::AddProducts at ./core/spec/services/spree/taxons/add_products_spec.rb":{"source_file":"core/spec/services/spree/taxons/add_products_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Taxons::AddProducts at ./spec/services/spree/taxons/add_products_spec.rb":{"source_file":"core/spec/services/spree/taxons/add_products_spec.rb","duration":{"p50":"2333579147","p90":"2850259010"}},"Spree::Taxons::Find at ./core/spec/finders/spree/taxons/find_spec.rb":{"source_file":"core/spec/finders/spree/taxons/find_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Taxons::Find at ./spec/finders/spree/taxons/find_spec.rb":{"source_file":"core/spec/finders/spree/taxons/find_spec.rb","duration":{"p50":"401456752","p90":"575426677"}},"Spree::Taxons::RegenerateProducts at ./core/spec/services/spree/taxons/regenerate_products_spec.rb":{"source_file":"core/spec/services/spree/taxons/regenerate_products_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Taxons::RegenerateProducts at ./spec/services/spree/taxons/regenerate_products_spec.rb":{"source_file":"core/spec/services/spree/taxons/regenerate_products_spec.rb","duration":{"p50":"3150033867","p90":"3551667475"}},"Spree::Taxons::RemoveProducts at ./core/spec/services/spree/taxons/remove_products_spec.rb":{"source_file":"core/spec/services/spree/taxons/remove_products_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Taxons::RemoveProducts at ./spec/services/spree/taxons/remove_products_spec.rb":{"source_file":"core/spec/services/spree/taxons/remove_products_spec.rb","duration":{"p50":"2527942853","p90":"2684267478"}},"Spree::UrlValidator at ./spec/validators/spree/url_validator_spec.rb":{"source_file":"core/spec/validators/spree/url_validator_spec.rb","duration":{"p50":"315794540","p90":"443679807"}},"Spree::UserManagement at ./core/spec/models/spree/concerns/user_management_spec.rb":{"source_file":"core/spec/models/spree/concerns/user_management_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::UserManagement at ./spec/models/spree/concerns/user_management_spec.rb":{"source_file":"core/spec/models/spree/concerns/user_management_spec.rb","duration":{"p50":"1694508175","p90":"1910560275"}},"Spree::UserMethods at ./core/spec/models/spree/concerns/user_methods_spec.rb":{"source_file":"core/spec/models/spree/concerns/user_methods_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::UserMethods at ./spec/models/spree/concerns/user_methods_spec.rb":{"source_file":"core/spec/models/spree/concerns/user_methods_spec.rb","duration":{"p50":"1255309977","p90":"1387336705"}},"Spree::UserRoles at ./spec/models/spree/concerns/user_roles_spec.rb":{"source_file":"core/spec/models/spree/concerns/user_roles_spec.rb","duration":{"p50":"1443956915","p90":"1728740663"}},"Spree::Variant at ./spec/models/spree/variant_spec.rb":{"source_file":"core/spec/models/spree/variant_spec.rb","duration":{"p50":"19057737897","p90":"20236243068"}},"Spree::VariantPresenter at ./core/spec/presenters/spree/variant_presenter_spec.rb":{"source_file":"core/spec/presenters/spree/variant_presenter_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::VariantPresenter at ./spec/presenters/spree/variant_presenter_spec.rb":{"source_file":"core/spec/presenters/spree/variant_presenter_spec.rb","duration":{"p50":"731516527","p90":"929947204"}},"Spree::Variants::OptionTypesFinder at ./spec/finders/spree/variants/option_types_finder_spec.rb":{"source_file":"core/spec/finders/spree/variants/option_types_finder_spec.rb","duration":{"p50":"841448222","p90":"987453902"}},"Spree::Variants::OptionTypesPresenter at ./core/spec/presenters/spree/variants/option_types_presenter_spec.rb":{"source_file":"core/spec/presenters/spree/variants/option_types_presenter_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Variants::OptionTypesPresenter at ./spec/presenters/spree/variants/option_types_presenter_spec.rb":{"source_file":"core/spec/presenters/spree/variants/option_types_presenter_spec.rb","duration":{"p50":"3150033867","p90":"3847485705"}},"Spree::Variants::OptionsPresenter at ./core/spec/presenters/spree/variants/options_presenter_spec.rb":{"source_file":"core/spec/presenters/spree/variants/options_presenter_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Variants::OptionsPresenter at ./spec/presenters/spree/variants/options_presenter_spec.rb":{"source_file":"core/spec/presenters/spree/variants/options_presenter_spec.rb","duration":{"p50":"510355638","p90":"661901319"}},"Spree::Variants::RemoveFromIncompleteOrdersJob at ./spec/jobs/spree/variants/remove_from_incomplete_orders_job_spec.rb":{"source_file":"core/spec/jobs/spree/variants/remove_from_incomplete_orders_job_spec.rb","duration":{"p50":"417841070","p90":"587051459"}},"Spree::Variants::RemoveLineItemJob at ./core/spec/jobs/spree/variants/remove_line_item_job_spec.rb":{"source_file":"core/spec/jobs/spree/variants/remove_line_item_job_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Variants::RemoveLineItemJob at ./spec/jobs/spree/variants/remove_line_item_job_spec.rb":{"source_file":"core/spec/jobs/spree/variants/remove_line_item_job_spec.rb","duration":{"p50":"461787339","p90":"510355638"}},"Spree::Variants::RemoveLineItems at ./core/spec/services/spree/variants/remove_line_items_spec.rb":{"source_file":"core/spec/services/spree/variants/remove_line_items_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Variants::RemoveLineItems at ./spec/services/spree/variants/remove_line_items_spec.rb":{"source_file":"core/spec/services/spree/variants/remove_line_items_spec.rb","duration":{"p50":"3150033867","p90":"3481337426"}},"Spree::Variants::TouchJob at ./spec/jobs/spree/variants/touch_job_spec.rb":{"source_file":"core/spec/jobs/spree/variants/touch_job_spec.rb","duration":{"p50":"761371298","p90":"911532407"}},"Spree::Variants::VisibleFinder at ./core/spec/finders/spree/variants/visible_finder_spec.rb":{"source_file":"core/spec/finders/spree/variants/visible_finder_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Variants::VisibleFinder at ./spec/finders/spree/variants/visible_finder_spec.rb":{"source_file":"core/spec/finders/spree/variants/visible_finder_spec.rb","duration":{"p50":"480633878","p90":"587051459"}},"Spree::VatPriceCalculation at ./core/spec/models/spree/concerns/vat_price_calculation_spec.rb":{"source_file":"core/spec/models/spree/concerns/vat_price_calculation_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::VatPriceCalculation at ./spec/models/spree/concerns/vat_price_calculation_spec.rb":{"source_file":"core/spec/models/spree/concerns/vat_price_calculation_spec.rb","duration":{"p50":"309541183","p90":"328682798"}},"Spree::Wallet::CreatePaymentSource at ./core/spec/services/spree/wallet/create_payment_source_spec.rb":{"source_file":"core/spec/services/spree/wallet/create_payment_source_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Wallet::CreatePaymentSource at ./spec/services/spree/wallet/create_payment_source_spec.rb":{"source_file":"core/spec/services/spree/wallet/create_payment_source_spec.rb","duration":{"p50":"409566990","p90":"443679807"}},"Spree::WebhookDelivery at ./core/spec/models/spree/webhook_delivery_spec.rb":{"source_file":"core/spec/models/spree/webhook_delivery_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::WebhookDelivery at ./spec/models/spree/webhook_delivery_spec.rb":{"source_file":"core/spec/models/spree/webhook_delivery_spec.rb","duration":{"p50":"426282304","p90":"461787339"}},"Spree::WebhookEndpoint at ./spec/models/spree/webhook_endpoint_spec.rb":{"source_file":"core/spec/models/spree/webhook_endpoint_spec.rb","duration":{"p50":"370590302","p90":"401456752"}},"Spree::WishedItem at ./spec/models/spree/wished_item_spec.rb":{"source_file":"core/spec/models/spree/wished_item_spec.rb","duration":{"p50":"2477884579","p90":"3278593560"}},"Spree::Wishlist at ./spec/models/spree/wishlist_spec.rb":{"source_file":"core/spec/models/spree/wishlist_spec.rb","duration":{"p50":"5405577038","p90":"6217922653"}},"Spree::Zone at ./core/spec/models/spree/zone_spec.rb":{"source_file":"core/spec/models/spree/zone_spec.rb","duration":{"p50":"0","p90":"0"}},"Spree::Zone at ./spec/models/spree/zone_spec.rb":{"source_file":"core/spec/models/spree/zone_spec.rb","duration":{"p50":"911532407","p90":"948734016"}},"Spree::ZoneMember at ./spec/models/spree/zone_member_spec.rb":{"source_file":"core/spec/models/spree/zone_member_spec.rb","duration":{"p50":"342097053","p90":"471116376"}},"StoreCreditCategory at ./spec/models/spree/store_credit_category_spec.rb":{"source_file":"core/spec/models/spree/store_credit_category_spec.rb","duration":{"p50":"356058774","p90":"378076975"}},"StoreCreditEvent at ./core/spec/models/spree/store_credit_event_spec.rb":{"source_file":"core/spec/models/spree/store_credit_event_spec.rb","duration":{"p50":"0","p90":"0"}},"StoreCreditEvent at ./spec/models/spree/store_credit_event_spec.rb":{"source_file":"core/spec/models/spree/store_credit_event_spec.rb","duration":{"p50":"1069698895","p90":"1206086961"}},"Variant scopes at ./spec/models/spree/variant/scopes_spec.rb":{"source_file":"core/spec/models/spree/variant/scopes_spec.rb","duration":{"p50":"6094795472","p90":"6602430722"}},"core:activate_products at ./spec/lib/tasks/core_spec.rb":{"source_file":"core/spec/lib/tasks/core_spec.rb","duration":{"p50":"623353940","p90":"746294639"}},"core:archive_products at ./spec/lib/tasks/core_spec.rb":{"source_file":"core/spec/lib/tasks/core_spec.rb","duration":{"p50":"688914943","p90":"761371298"}},"core:migrate_newsletter_subscribers at ./spec/lib/tasks/core_spec.rb":{"source_file":"core/spec/lib/tasks/core_spec.rb","duration":{"p50":"349008105","p90":"480633878"}},"exchanges:charge_unreturned_items at ./spec/lib/tasks/exchanges_spec.rb":{"source_file":"core/spec/lib/tasks/exchanges_spec.rb","duration":{"p50":"15918265246","p90":"16567924067"}},"i18n at ./core/spec/lib/i18n_spec.rb":{"source_file":"core/spec/lib/i18n_spec.rb","duration":{"p50":"0","p90":"0"}},"i18n at ./spec/lib/i18n_spec.rb":{"source_file":"core/spec/lib/i18n_spec.rb","duration":{"p50":"328682798","p90":"490343654"}},"product filters at ./core/spec/models/spree/product_filter_spec.rb":{"source_file":"core/spec/models/spree/product_filter_spec.rb","duration":{"p50":"0","p90":"0"}},"product filters at ./spec/models/spree/product_filter_spec.rb":{"source_file":"core/spec/models/spree/product_filter_spec.rb","duration":{"p50":"443679807","p90":"587051459"}}}},"expectedRunnableTestFiles":["spec/models/spree/app_dependencies_spec.rb","spec/services/spree/orders/cancel_spec.rb"],"expectedParallelRunners":1,"originalParallelRunners":3} \ No newline at end of file diff --git a/internal/testoptimization/client.go b/internal/testoptimization/client.go index 7617114..c838938 100644 --- a/internal/testoptimization/client.go +++ b/internal/testoptimization/client.go @@ -26,7 +26,7 @@ type CIVisibilityIntegrations interface { ExitCiVisibility() GetSettings() *net.SettingsResponseData GetSettingsRawResponse() json.RawMessage - GetSkippableTests() map[string]map[string][]net.SkippableResponseDataAttributes + GetSkippableTests() net.SkippableTests GetSkippableTestsRawResponse() json.RawMessage GetKnownTests() *net.KnownTestsResponseData GetKnownTestsRawResponse() json.RawMessage @@ -57,7 +57,7 @@ func (d *DatadogCIVisibilityIntegrations) GetSettingsRawResponse() json.RawMessa return integrations.GetSettingsRawResponse() } -func (d *DatadogCIVisibilityIntegrations) GetSkippableTests() map[string]map[string][]net.SkippableResponseDataAttributes { +func (d *DatadogCIVisibilityIntegrations) GetSkippableTests() net.SkippableTests { return integrations.GetSkippableTests() } @@ -132,32 +132,21 @@ func (c *DatadogClient) GetSettings() *net.SettingsResponseData { func (c *DatadogClient) GetSkippableTests() map[string]bool { startTime := time.Now() - skippedTests := make(map[string]bool) slog.Debug("Fetching skippable tests...") skippableTests := c.integrations.GetSkippableTests() + if skippableTests == nil { + skippableTests = net.SkippableTests{} + } if err := c.cacheManager.StoreSkippableTestsCache(c.integrations.GetSkippableTestsRawResponse()); err != nil { slog.Warn("Failed to store skippable tests cache", "error", err) } - for _, suites := range skippableTests { - for _, tests := range suites { - for _, test := range tests { - t := Test{ - Name: test.Name, - Suite: test.Suite, - Parameters: test.Parameters, - } - skippedTests[t.FQN()] = true - } - } - } - duration := time.Since(startTime) - slog.Debug("Finished fetching skippable tests", "count", len(skippedTests), "duration", duration) + slog.Debug("Finished fetching skippable tests", "count", len(skippableTests), "duration", duration) - return skippedTests + return skippableTests } func (c *DatadogClient) GetKnownTests() *net.KnownTestsResponseData { diff --git a/internal/testoptimization/client_test.go b/internal/testoptimization/client_test.go index af6d08d..fe0703b 100644 --- a/internal/testoptimization/client_test.go +++ b/internal/testoptimization/client_test.go @@ -29,7 +29,7 @@ type MockCIVisibilityIntegrations struct { ShutdownCalled bool Settings *net.SettingsResponseData SettingsRawResponse json.RawMessage - SkippableTests map[string]map[string][]net.SkippableResponseDataAttributes + SkippableTests net.SkippableTests SkippableTestsRawResponse json.RawMessage KnownTests *net.KnownTestsResponseData KnownTestsRawResponse json.RawMessage @@ -53,7 +53,7 @@ func (m *MockCIVisibilityIntegrations) GetSettingsRawResponse() json.RawMessage return m.SettingsRawResponse } -func (m *MockCIVisibilityIntegrations) GetSkippableTests() map[string]map[string][]net.SkippableResponseDataAttributes { +func (m *MockCIVisibilityIntegrations) GetSkippableTests() net.SkippableTests { return m.SkippableTests } @@ -214,30 +214,10 @@ func TestDatadogClient_GetSkippableTests(t *testing.T) { ItrEnabled: true, TestsSkipping: true, }, - SkippableTests: map[string]map[string][]net.SkippableResponseDataAttributes{ - "module1": { - "suite1": []net.SkippableResponseDataAttributes{ - { - Suite: "TestSuite1", - Name: "test_method_1", - Parameters: "param1", - }, - { - Suite: "TestSuite1", - Name: "test_method_2", - Parameters: "param2", - }, - }, - }, - "module2": { - "suite2": []net.SkippableResponseDataAttributes{ - { - Suite: "TestSuite2", - Name: "test_method_3", - Parameters: "param3", - }, - }, - }, + SkippableTests: net.SkippableTests{ + "module1.TestSuite1.test_method_1.param1": true, + "module1.TestSuite1.test_method_2.param2": true, + "module2.TestSuite2.test_method_3.param3": true, }, } mockUtils := &MockUtils{} @@ -257,9 +237,9 @@ func TestDatadogClient_GetSkippableTests(t *testing.T) { // Verify expected test FQNs are present expectedTests := []string{ - "TestSuite1.test_method_1.param1", - "TestSuite1.test_method_2.param2", - "TestSuite2.test_method_3.param3", + "module1.TestSuite1.test_method_1.param1", + "module1.TestSuite1.test_method_2.param2", + "module2.TestSuite2.test_method_3.param3", } for _, expectedTest := range expectedTests { @@ -336,38 +316,74 @@ func TestDatadogClient_StoreCacheAndExit_SkipsHTTPCacheWithoutResponse(t *testin func TestTest_FQN(t *testing.T) { testCases := []struct { + module string suite string test string parameters string expected string }{ - {"TestSuite", "testMethod", "param1", "TestSuite.testMethod.param1"}, - {"com.example.TestClass", "test_with_underscores", "param=value", "com.example.TestClass.test_with_underscores.param=value"}, - {"", "test", "", ".test."}, - {"suite", "", "params", "suite..params"}, + {"module", "TestSuite", "testMethod", "param1", "module.TestSuite.testMethod.param1"}, + {"module", "com.example.TestClass", "test_with_underscores", "param=value", "module.com.example.TestClass.test_with_underscores.param=value"}, + {"", "", "test", "", "..test."}, + {"module", "suite", "", "params", "module.suite..params"}, } for _, tc := range testCases { test := Test{ + Module: tc.module, Suite: tc.suite, Name: tc.test, Parameters: tc.parameters, } result := test.FQN() if result != tc.expected { - t.Errorf("Test{Suite: %q, Name: %q, Parameters: %q}.FQN() = %q, expected %q", - tc.suite, tc.test, tc.parameters, result, tc.expected) + t.Errorf("Test{Module: %q, Suite: %q, Name: %q, Parameters: %q}.FQN() = %q, expected %q", + tc.module, tc.suite, tc.test, tc.parameters, result, tc.expected) } } } +func TestDisabledTestsFromTestManagementData(t *testing.T) { + disabledTests := DisabledTestsFromTestManagementData(&net.TestManagementTestsResponseDataModules{ + Modules: map[string]net.TestManagementTestsResponseDataSuites{ + "module-a": { + Suites: map[string]net.TestManagementTestsResponseDataTests{ + "suite-a": { + Tests: map[string]net.TestManagementTestsResponseDataTestProperties{ + "disabled": {Properties: net.TestManagementTestsResponseDataTestPropertiesAttributes{Disabled: true}}, + "quarantined": {Properties: net.TestManagementTestsResponseDataTestPropertiesAttributes{Quarantined: true}}, + }, + }, + }, + }, + "module-b": { + Suites: map[string]net.TestManagementTestsResponseDataTests{ + "suite-b": { + Tests: map[string]net.TestManagementTestsResponseDataTestProperties{ + "also disabled": {Properties: net.TestManagementTestsResponseDataTestPropertiesAttributes{Disabled: true}}, + }, + }, + }, + }, + }, + }) + + expected := map[string]bool{ + "module-a.suite-a.disabled.": true, + "module-b.suite-b.also disabled.": true, + } + if !maps.Equal(disabledTests, expected) { + t.Errorf("DisabledTestsFromTestManagementData() = %v, expected %v", disabledTests, expected) + } +} + func TestDatadogClient_GetSkippableTests_EmptyData(t *testing.T) { mockIntegrations := &MockCIVisibilityIntegrations{ Settings: &net.SettingsResponseData{ ItrEnabled: true, TestsSkipping: true, }, - SkippableTests: map[string]map[string][]net.SkippableResponseDataAttributes{}, + SkippableTests: net.SkippableTests{}, } mockUtils := &MockUtils{} client := NewDatadogClientWithDependencies(mockIntegrations, mockUtils) @@ -399,16 +415,8 @@ func TestDatadogClient_GetSkippableTests_WritesHTTPCache(t *testing.T) { ItrEnabled: true, TestsSkipping: true, }, - SkippableTests: map[string]map[string][]net.SkippableResponseDataAttributes{ - "module1": { - "suite1": []net.SkippableResponseDataAttributes{ - { - Suite: "TestSuite1", - Name: "test_method_1", - Parameters: "param1", - }, - }, - }, + SkippableTests: net.SkippableTests{ + "module1.TestSuite1.test_method_1.param1": true, }, SkippableTestsRawResponse: skippableTestsResponse, } diff --git a/internal/testoptimization/test_management.go b/internal/testoptimization/test_management.go new file mode 100644 index 0000000..8692143 --- /dev/null +++ b/internal/testoptimization/test_management.go @@ -0,0 +1,28 @@ +package testoptimization + +import "github.com/DataDog/ddtest/civisibility/utils/net" + +func DisabledTestsFromTestManagementData(testManagementTests *net.TestManagementTestsResponseDataModules) map[string]bool { + disabledTests := make(map[string]bool) + if testManagementTests == nil { + return disabledTests + } + + for module, suites := range testManagementTests.Modules { + for suite, tests := range suites.Suites { + for name, test := range tests.Tests { + if !test.Properties.Disabled { + continue + } + disabledTest := Test{ + Module: module, + Suite: suite, + Name: name, + } + disabledTests[disabledTest.FQN()] = true + } + } + } + + return disabledTests +} diff --git a/internal/testoptimization/types.go b/internal/testoptimization/types.go index 4247aa9..5aa57f1 100644 --- a/internal/testoptimization/types.go +++ b/internal/testoptimization/types.go @@ -12,5 +12,10 @@ type Test struct { // FQN returns the fully qualified name of the test func (t *Test) FQN() string { + return fmt.Sprintf("%s.%s.%s.%s", t.Module, t.Suite, t.Name, t.Parameters) +} + +// SuiteFQN returns the legacy suite/name/parameters key used by older cached fixtures. +func (t *Test) SuiteFQN() string { return fmt.Sprintf("%s.%s.%s", t.Suite, t.Name, t.Parameters) } From 1a69baa2630059039877d3e54c24cb348812bea8 Mon Sep 17 00:00:00 2001 From: Andrey Marchenko Date: Fri, 5 Jun 2026 10:10:21 +0200 Subject: [PATCH 2/2] Match disabled managed tests without parameters --- internal/planner/discovered_tests.go | 26 +++++- .../high_skippable_integration_test.go | 2 +- internal/planner/planner.go | 10 +-- internal/planner/planner_test.go | 90 +++++++++++++++---- internal/testoptimization/client_test.go | 37 ++++++-- internal/testoptimization/types.go | 10 +-- 6 files changed, 138 insertions(+), 37 deletions(-) diff --git a/internal/planner/discovered_tests.go b/internal/planner/discovered_tests.go index afb8fbe..558f93a 100644 --- a/internal/planner/discovered_tests.go +++ b/internal/planner/discovered_tests.go @@ -8,7 +8,7 @@ import ( func (tp *TestPlanner) recordFullDiscoveryResults( discoveredTests []testoptimization.Test, - skippableTests map[string]bool, + skippableTests testSkipper, subdirPrefix string, ) { discoveredTestsCount := len(discoveredTests) @@ -25,8 +25,8 @@ func (tp *TestPlanner) recordFullDiscoveryResults( tp.testFiles[normalizedSourceFile] = struct{}{} } - if !skippableTests[test.FQN()] { - slog.Debug("Test is not skipped", "test", test.FQN(), "sourceFile", test.SuiteSourceFile) + if !skippableTests.Contains(test) { + slog.Debug("Test is not skipped", "test", test.DatadogTestId(), "sourceFile", test.SuiteSourceFile) recordRunnableTest(tp.suiteAggregates, test, normalizedSourceFile) } else { recordSkippedTest(tp.suiteAggregates, test, normalizedSourceFile) @@ -37,6 +37,26 @@ func (tp *TestPlanner) recordFullDiscoveryResults( slog.Info("Processed the discovered tests", "skippableTestsCount", skippableTestsCount, "discoveredTestsCount", discoveredTestsCount) } +type testSkipper struct { + tiaSkippableTests map[string]bool + disabledTests map[string]bool +} + +func newTestSkipper(tiaSkippableTests, disabledTests map[string]bool) testSkipper { + return testSkipper{ + tiaSkippableTests: tiaSkippableTests, + disabledTests: disabledTests, + } +} + +func (s testSkipper) Contains(test testoptimization.Test) bool { + return s.tiaSkippableTests[test.DatadogTestId()] || s.disabledTests[test.FQN()] +} + +func (s testSkipper) Count() int { + return len(s.tiaSkippableTests) + len(s.disabledTests) +} + func (tp *TestPlanner) recordFastDiscoveryFallbackFiles(discoveredTestFiles []string) { for _, testFile := range discoveredTestFiles { if testFile != "" { diff --git a/internal/planner/high_skippable_integration_test.go b/internal/planner/high_skippable_integration_test.go index a4249c0..30acd1b 100644 --- a/internal/planner/high_skippable_integration_test.go +++ b/internal/planner/high_skippable_integration_test.go @@ -144,7 +144,7 @@ func (f highSkippableIntegrationFixture) nonFullySkippedTestFiles() []string { sourceFile := strings.TrimPrefix(test.SuiteSourceFile, "core/") counts := countsByFile[sourceFile] counts.total++ - if skippableTests[test.FQN()] { + if skippableTests[test.DatadogTestId()] { counts.skipped++ } countsByFile[sourceFile] = counts diff --git a/internal/planner/planner.go b/internal/planner/planner.go index 5ce3d3a..e6f17c2 100644 --- a/internal/planner/planner.go +++ b/internal/planner/planner.go @@ -272,7 +272,7 @@ func (tp *TestPlanner) PreparePlanningData(ctx context.Context) error { discoveryCtx, cancelDiscovery := context.WithCancel(ctx) defer cancelDiscovery() - var skippedTests map[string]bool + var skippedTests testSkipper var discoveredTests []testoptimization.Test var discoveredTestFiles []string var fullDiscoverySucceeded bool @@ -310,7 +310,7 @@ func (tp *TestPlanner) PreparePlanningData(ctx context.Context) error { tp.testSuiteDurations = tp.durationsClient.GetTestSuiteDurations() skippedTests = tp.fetchTestsToSkip(tiaSkippingEnabled) - tp.planReport.SkippableTestsCount = len(skippedTests) + tp.planReport.SkippableTestsCount = skippedTests.Count() return nil }) @@ -403,7 +403,7 @@ func (tp *TestPlanner) PreparePlanningData(ctx context.Context) error { return nil } -func (tp *TestPlanner) fetchTestsToSkip(tiaSkippingEnabled bool) map[string]bool { +func (tp *TestPlanner) fetchTestsToSkip(tiaSkippingEnabled bool) testSkipper { startTime := time.Now() slog.Info("Fetching tests to skip from Datadog...") @@ -417,14 +417,12 @@ func (tp *TestPlanner) fetchTestsToSkip(tiaSkippingEnabled bool) map[string]bool tp.planReport.ManagedFlakyTests = newManagedFlakyTestsReport(testManagementTests) disabledTests := testoptimization.DisabledTestsFromTestManagementData(testManagementTests) - skippedTests := maps.Clone(tiaSkippableTests) - maps.Copy(skippedTests, disabledTests) slog.Info("Fetched tests to skip", "duration", time.Since(startTime), "tiaSkippableTestsCount", len(tiaSkippableTests), "disabledTestsCount", len(disabledTests)) - return skippedTests + return newTestSkipper(tiaSkippableTests, disabledTests) } func (tp *TestPlanner) estimateDiscoveredSuiteDurations() { diff --git a/internal/planner/planner_test.go b/internal/planner/planner_test.go index 7a46b9c..c31da2a 100644 --- a/internal/planner/planner_test.go +++ b/internal/planner/planner_test.go @@ -369,8 +369,8 @@ func TestTestPlanner_Setup_WithParallelRunners(t *testing.T) { mockOptimizationClient := &MockTestOptimizationClient{ Settings: testOptimizationSettings(true, true, false), SkippableTests: map[string]bool{ - (&testoptimization.Test{Module: "rspec", Suite: "TestSuite1", Name: "test2"}).FQN(): true, // Skip test2 - (&testoptimization.Test{Module: "rspec", Suite: "TestSuite4", Name: "test5"}).FQN(): true, // Skip test5 + (&testoptimization.Test{Module: "rspec", Suite: "TestSuite1", Name: "test2"}).DatadogTestId(): true, // Skip test2 + (&testoptimization.Test{Module: "rspec", Suite: "TestSuite4", Name: "test5"}).DatadogTestId(): true, // Skip test5 }, } @@ -528,7 +528,7 @@ func TestTestPlanner_Plan_ChoosesParallelismFromFanoutAdjustedSplit(t *testing.T } tests = append(tests, test) if testIndex > 0 { - skippableTests[test.FQN()] = true + skippableTests[test.DatadogTestId()] = true } } } @@ -600,7 +600,7 @@ func TestTestPlanner_Setup_WithCIProvider(t *testing.T) { mockOptimizationClient := &MockTestOptimizationClient{ Settings: testOptimizationSettings(true, true, false), SkippableTests: map[string]bool{ - (&testoptimization.Test{Module: "rspec", Suite: "TestSuite1", Name: "test1"}).FQN(): true, // Skip test1 = 50% skippable + (&testoptimization.Test{Module: "rspec", Suite: "TestSuite1", Name: "test1"}).DatadogTestId(): true, // Skip test1 = 50% skippable }, } @@ -1057,8 +1057,8 @@ func TestTestPlanner_PreparePlanningData_Success(t *testing.T) { mockOptimizationClient := &MockTestOptimizationClient{ Settings: testOptimizationSettings(true, true, false), SkippableTests: map[string]bool{ - (&testoptimization.Test{Module: "rspec", Suite: "TestSuite1", Name: "test2"}).FQN(): true, // Skip test2 - (&testoptimization.Test{Module: "rspec", Suite: "TestSuite3", Name: "test4"}).FQN(): true, // Skip test4 + (&testoptimization.Test{Module: "rspec", Suite: "TestSuite1", Name: "test2"}).DatadogTestId(): true, // Skip test2 + (&testoptimization.Test{Module: "rspec", Suite: "TestSuite3", Name: "test4"}).DatadogTestId(): true, // Skip test4 }, } mockDurationsClient := &MockTestSuiteDurationsClient{ @@ -1166,7 +1166,7 @@ func TestTestPlanner_PreparePlanningData_DisabledTestManagementTestsAreSkipped(t Tests: []testoptimization.Test{ {Module: "rspec", Suite: "Suite1", Name: "test1", Parameters: "", SuiteSourceFile: "spec/file1_spec.rb"}, {Module: "rspec", Suite: "Suite1", Name: "test2", Parameters: "", SuiteSourceFile: "spec/file1_spec.rb"}, - {Module: "rspec", Suite: "Suite2", Name: "test3", Parameters: "", SuiteSourceFile: "spec/file2_spec.rb"}, + {Module: "rspec", Suite: "Suite2", Name: "test3", Parameters: `{"arguments":{},"metadata":{"scoped_id":"1:2"}}`, SuiteSourceFile: "spec/file2_spec.rb"}, {Module: "rspec", Suite: "Suite3", Name: "test4", Parameters: "", SuiteSourceFile: "spec/file3_spec.rb"}, }, } @@ -1178,7 +1178,7 @@ func TestTestPlanner_PreparePlanningData_DisabledTestManagementTestsAreSkipped(t mockOptimizationClient := &MockTestOptimizationClient{ Settings: testOptimizationSettings(true, true, true), SkippableTests: map[string]bool{ - (&testoptimization.Test{Module: "rspec", Suite: "Suite1", Name: "test2"}).FQN(): true, + (&testoptimization.Test{Module: "rspec", Suite: "Suite1", Name: "test2"}).DatadogTestId(): true, }, TestManagementTests: &net.TestManagementTestsResponseDataModules{ Modules: map[string]net.TestManagementTestsResponseDataSuites{ @@ -1231,6 +1231,62 @@ func TestTestPlanner_PreparePlanningData_DisabledTestManagementTestsAreSkipped(t } } +func TestTestPlanner_PreparePlanningData_TIASkipsRequireParametersMatch(t *testing.T) { + ctx := context.Background() + ciUtils.ResetCITags() + t.Cleanup(ciUtils.ResetCITags) + + parameterizedRunnableTest := testoptimization.Test{ + Module: "rspec", + Suite: "Suite1", + Name: "same name", + Parameters: `{"arguments":{},"metadata":{"scoped_id":"1:1"}}`, + SuiteSourceFile: "spec/file1_spec.rb", + } + parameterizedSkippedTest := testoptimization.Test{ + Module: "rspec", + Suite: "Suite1", + Name: "same name", + Parameters: `{"arguments":{},"metadata":{"scoped_id":"1:2"}}`, + SuiteSourceFile: "spec/file1_spec.rb", + } + mockFramework := &MockFramework{ + FrameworkName: "rspec", + Tests: []testoptimization.Test{ + parameterizedRunnableTest, + parameterizedSkippedTest, + }, + } + mockPlatform := &MockPlatform{ + PlatformName: "ruby", + Tags: map[string]string{"platform": "ruby"}, + Framework: mockFramework, + } + mockOptimizationClient := &MockTestOptimizationClient{ + Settings: testOptimizationSettings(true, true, false), + SkippableTests: map[string]bool{ + (&testoptimization.Test{Module: "rspec", Suite: "Suite1", Name: "same name"}).DatadogTestId(): true, + parameterizedSkippedTest.DatadogTestId(): true, + }, + } + + runner := NewWithDependencies( + &MockPlatformDetector{Platform: mockPlatform}, + mockOptimizationClient, + &MockTestSuiteDurationsClient{}, + newDefaultMockCIProviderDetector(), + ) + + if err := runner.PreparePlanningData(ctx); err != nil { + t.Fatalf("PreparePlanningData() should not return error, got: %v", err) + } + + aggregate := runner.suiteAggregates[testSuiteKey{Module: "rspec", Suite: "Suite1"}] + if aggregate.NumTests != 2 || aggregate.NumTestsSkipped != 1 { + t.Errorf("Expected only the exact TIA parameter match to be skipped, got %+v", aggregate) + } +} + func TestTestPlanner_PreparePlanningData_ModuleQualifiedSkipsDoNotCrossModules(t *testing.T) { ctx := context.Background() ciUtils.ResetCITags() @@ -1253,7 +1309,7 @@ func TestTestPlanner_PreparePlanningData_ModuleQualifiedSkipsDoNotCrossModules(t mockOptimizationClient := &MockTestOptimizationClient{ Settings: testOptimizationSettings(true, true, true), SkippableTests: map[string]bool{ - (&testoptimization.Test{Module: "module-a", Suite: "SharedSuite", Name: "same name"}).FQN(): true, + (&testoptimization.Test{Module: "module-a", Suite: "SharedSuite", Name: "same name"}).DatadogTestId(): true, }, TestManagementTests: &net.TestManagementTestsResponseDataModules{ Modules: map[string]net.TestManagementTestsResponseDataSuites{ @@ -1319,7 +1375,7 @@ func TestTestPlanner_PreparePlanningData_TestManagementDoesNotKeepFullDiscoveryW mockOptimizationClient := &MockTestOptimizationClient{ Settings: testOptimizationSettings(false, false, true), SkippableTests: map[string]bool{ - (&testoptimization.Test{Module: "rspec", Suite: "Suite2", Name: "not_applied"}).FQN(): true, + (&testoptimization.Test{Module: "rspec", Suite: "Suite2", Name: "not_applied"}).DatadogTestId(): true, }, TestManagementTests: &net.TestManagementTestsResponseDataModules{ Modules: map[string]net.TestManagementTestsResponseDataSuites{ @@ -1496,7 +1552,7 @@ func TestTestPlanner_PreparePlanningData_SkippablePercentageUsesDurations(t *tes skippedTest := mockFramework.Tests[0] mockOptimizationClient := &MockTestOptimizationClient{ Settings: testOptimizationSettings(true, true, false), - SkippableTests: map[string]bool{skippedTest.FQN(): true}, + SkippableTests: map[string]bool{skippedTest.DatadogTestId(): true}, } mockDurationsClient := &MockTestSuiteDurationsClient{ Durations: map[string]map[string]testoptimization.TestSuiteDurationInfo{ @@ -2191,7 +2247,7 @@ func TestTestPlanner_PreparePlanningData_BackendDoesNotReintroduceFullySkippedSu } mockOptimizationClient := &MockTestOptimizationClient{ Settings: testOptimizationSettings(true, true, false), - SkippableTests: map[string]bool{skippedTest.FQN(): true}, + SkippableTests: map[string]bool{skippedTest.DatadogTestId(): true}, } mockDurationsClient := &MockTestSuiteDurationsClient{ Durations: map[string]map[string]testoptimization.TestSuiteDurationInfo{ @@ -2246,7 +2302,7 @@ func TestTestPlanner_PreparePlanningData_BackendDoesNotDuplicateDiscoveredSource } mockOptimizationClient := &MockTestOptimizationClient{ Settings: testOptimizationSettings(true, true, false), - SkippableTests: map[string]bool{skippedTest.FQN(): true}, + SkippableTests: map[string]bool{skippedTest.DatadogTestId(): true}, } mockDurationsClient := &MockTestSuiteDurationsClient{ Durations: map[string]map[string]testoptimization.TestSuiteDurationInfo{ @@ -2528,8 +2584,8 @@ func TestTestPlanner_PreparePlanningData_AllTestsSkipped(t *testing.T) { mockOptimizationClient := &MockTestOptimizationClient{ Settings: testOptimizationSettings(true, true, false), SkippableTests: map[string]bool{ - (&testoptimization.Test{Module: "rspec", Suite: "Suite1", Name: "test1"}).FQN(): true, - (&testoptimization.Test{Module: "rspec", Suite: "Suite2", Name: "test2"}).FQN(): true, + (&testoptimization.Test{Module: "rspec", Suite: "Suite1", Name: "test1"}).DatadogTestId(): true, + (&testoptimization.Test{Module: "rspec", Suite: "Suite2", Name: "test2"}).DatadogTestId(): true, }, } @@ -3043,8 +3099,8 @@ func TestPreparePlanningData_ITRSubdir_SkipMatching_WithSuitePathsMatchingCwd(t mockOptimizationClient := &MockTestOptimizationClient{ Settings: testOptimizationSettings(true, true, false), SkippableTests: map[string]bool{ - roleTest1.FQN(): true, - roleTest2.FQN(): true, + roleTest1.DatadogTestId(): true, + roleTest2.DatadogTestId(): true, }, } diff --git a/internal/testoptimization/client_test.go b/internal/testoptimization/client_test.go index fe0703b..7796076 100644 --- a/internal/testoptimization/client_test.go +++ b/internal/testoptimization/client_test.go @@ -314,7 +314,7 @@ func TestDatadogClient_StoreCacheAndExit_SkipsHTTPCacheWithoutResponse(t *testin assertFileDoesNotExist(t, constants.HTTPCacheDir) } -func TestTest_FQN(t *testing.T) { +func TestTest_DatadogTestId(t *testing.T) { testCases := []struct { module string suite string @@ -335,14 +335,41 @@ func TestTest_FQN(t *testing.T) { Name: tc.test, Parameters: tc.parameters, } - result := test.FQN() + result := test.DatadogTestId() if result != tc.expected { - t.Errorf("Test{Module: %q, Suite: %q, Name: %q, Parameters: %q}.FQN() = %q, expected %q", + t.Errorf("Test{Module: %q, Suite: %q, Name: %q, Parameters: %q}.DatadogTestId() = %q, expected %q", tc.module, tc.suite, tc.test, tc.parameters, result, tc.expected) } } } +func TestTest_FQN(t *testing.T) { + testCases := []struct { + module string + suite string + test string + expected string + }{ + {"module", "TestSuite", "testMethod", "module.TestSuite.testMethod"}, + {"module", "com.example.TestClass", "test_with_underscores", "module.com.example.TestClass.test_with_underscores"}, + {"", "", "test", "..test"}, + {"module", "suite", "", "module.suite."}, + } + + for _, tc := range testCases { + test := Test{ + Module: tc.module, + Suite: tc.suite, + Name: tc.test, + } + result := test.FQN() + if result != tc.expected { + t.Errorf("Test{Module: %q, Suite: %q, Name: %q}.FQN() = %q, expected %q", + tc.module, tc.suite, tc.test, result, tc.expected) + } + } +} + func TestDisabledTestsFromTestManagementData(t *testing.T) { disabledTests := DisabledTestsFromTestManagementData(&net.TestManagementTestsResponseDataModules{ Modules: map[string]net.TestManagementTestsResponseDataSuites{ @@ -369,8 +396,8 @@ func TestDisabledTestsFromTestManagementData(t *testing.T) { }) expected := map[string]bool{ - "module-a.suite-a.disabled.": true, - "module-b.suite-b.also disabled.": true, + "module-a.suite-a.disabled": true, + "module-b.suite-b.also disabled": true, } if !maps.Equal(disabledTests, expected) { t.Errorf("DisabledTestsFromTestManagementData() = %v, expected %v", disabledTests, expected) diff --git a/internal/testoptimization/types.go b/internal/testoptimization/types.go index 5aa57f1..00168ca 100644 --- a/internal/testoptimization/types.go +++ b/internal/testoptimization/types.go @@ -10,12 +10,12 @@ type Test struct { SuiteSourceFile string `json:"suiteSourceFile"` } -// FQN returns the fully qualified name of the test +// FQN returns the parameter-free test identity used for Test Management matching. func (t *Test) FQN() string { - return fmt.Sprintf("%s.%s.%s.%s", t.Module, t.Suite, t.Name, t.Parameters) + return fmt.Sprintf("%s.%s.%s", t.Module, t.Suite, t.Name) } -// SuiteFQN returns the legacy suite/name/parameters key used by older cached fixtures. -func (t *Test) SuiteFQN() string { - return fmt.Sprintf("%s.%s.%s", t.Suite, t.Name, t.Parameters) +// DatadogTestId returns the parameterized test identity used for TIA matching. +func (t *Test) DatadogTestId() string { + return fmt.Sprintf("%s.%s.%s.%s", t.Module, t.Suite, t.Name, t.Parameters) }